微信小程序 | 基于ChatGPT实现电影推荐小程序

news2024/12/24 2:33:33

文章目录

    • ** 效果预览 **
      • 1、根据电影明星推荐
      • 2、根据兴趣标签推荐
      • 3、根据电影名推荐
    • 一、需求背景
    • 二、项目原理及架构
      • 2.1 实现原理
        • (1)根据用户的兴趣标签
        • (2)根据关联类似主题的题材
        • (3)根据特定的电影明星
      • 2.2 技术架构
      • 2.3 技术栈
    • 三、项目功能的实现
      • 3.1 小程序端设计与实现
      • 3.2 数据后端设计与实现
      • 3.3 数据智能获取功能设计与实现
    • 四、推荐阅读

在这里插入图片描述


** 效果预览 **

1、根据电影明星推荐

请添加图片描述


2、根据兴趣标签推荐

请添加图片描述


3、根据电影名推荐

请添加图片描述


一、需求背景

在我们日常想看电影的时候,经常会遇到一些问题:
1. 闲来无事想看个电影,打开电影列表,感觉都是看过的,一下子不知道该如何去发现新大陆?
2. 喜欢某个演员,想看与他风格类似的电影,可惜电影网站的影片推荐总是那么不尽人意!
3. 在不同的电影网站,填入自己的感兴趣的标签,结果推荐出来的电影题材并不是自己想要的效果!


既然说起推荐系统,这就刚好踩中了我那研究三年推荐系统的读研苦逼时光了。稍微介绍一下时下主流的推荐系统的架构和算法:

主流推荐算法
基于用户的推荐算法
原理:将用户画像近似的用户进行相互推荐关联
基于项目的推荐算法
原理:将物品特征类似的项目进行相互推荐关联
协同过滤推荐算法
原理:通过协同过滤算法进行相互推荐关联

在这里插入图片描述

这里的大数据推荐系统体系仅为简单的架构模型,其中涉及到更多的计算任务和调度数据流等细节均已省略 【有兴趣的友友可关注后续栏目更新—带你手把手从零实现推荐系统

在如此庞大的数据体量和计算引擎的支持下,现如今的推荐系统仍然没有以完美的姿态来解决用户的冷启动问题,所以说时下,推荐系统在学术界的研究已经达到了一种登峰造极的状态,你我都知道可能多引入一些高性能的模型去加强,多跑几轮模型去调参优化,从而实现更美丽的推荐效果!这样我们可能可以得到一篇优秀的论文!但是在工业应用领域,对于推荐算法的优化,新投入的算力跟人工成本,通常并不会由于更准推荐效果从而产生更丰厚的营收,可以说投入跟产出完全不成正比!这对于时下资本退却的互联网来说,这是最要命的!

于是乎,我们可以转换一下思路,有没有什么模型和算法可以实现推荐效果最优化,不惧怕因为用户数据量少而导致的冷启动问题 ------ 那么这个时候ChatGPT获取可以申请一战,他有超海量的全人类用户数据、连续产生内容及记忆理解上下文功能!

好那么,基于此,让我们来用ChatGPT做一个电影推荐小程序 做一个可以满住你的任意无理要求的电影小程序。


二、项目原理及架构

2.1 实现原理

1. 要利用上ChatGPT的推荐功能,首先构造好目标明确的问题是成功的关键。
2. 在获取到GPT的推荐数据之后,我们需要将推荐结果中的电影内容获取并展示在小程序端,这里我们需要采用Python爬虫对豆瓣电影网进行爬取!

输入用户的喜好
返回电影数据
构造电影问题
返回推荐列表
爬取推荐电影信息
电影小程序
小程序后台服务
ChatGPT模型服务
豆瓣电影爬虫后台服务

这里我们构造了三类推荐类目: 兴趣标签电影主题电影明星


(1)根据用户的兴趣标签

通过用户输入的兴趣标签进行电影的匹配

整合用户兴趣数据
返回推荐结果
用户选择自己感兴趣的标签
ChatGPT进行分析

请添加图片描述


(2)根据关联类似主题的题材

发送电影名称
返回推荐结果
用户输入自己的喜欢的电影
ChatGPT进行分析

请添加图片描述


(3)根据特定的电影明星

发送电影明星姓名
返回推荐结果
用户输入自己的喜欢的电影明星
ChatGPT进行分析

请添加图片描述


2.2 技术架构

在这里插入图片描述


2.3 技术栈

模块语言及框架涉及的技术要点
小程序前端基于VUE 2.0语法+Uni-app跨平台开发框架Http接口通信、Flex布局方式、uView样式库的使用、JSON数据解析、定时器的使用
小程序接口服务端Python + Flask WEB框架rest接口的开发、 ChatGPT API接口的数据对接
小程序数据爬虫服务端Python + Request 库Xpath路径元素解析、Http请求爬虫

三、项目功能的实现

3.1 小程序端设计与实现

首页标签选择
请添加图片描述请添加图片描述
推荐电影列表页电影详情页
在这里插入图片描述在这里插入图片描述

3.2 数据后端设计与实现

Flask后端接口服务
用户电影偏好数据交互接口
电影列表及详情获取接口
电影信息爬取接口
ChatGPT数据交互接口
  • 注重介绍后端服务接入 ChatGPT API,需要按照以下步骤进行操作:
  1. 注册一个账号并登录到OpenAI的官网:https://openai.com/
  2. 在Dashboard页面上,创建一个API密钥。在“API Keys”选项卡下,点击“Generate New Key”按钮。将生成的密钥保存好,以备后续使用。
  3. 选择所需的API服务,例如“Completion” API,以使用OpenAI的文本生成功能。

在这里插入图片描述
使用Python调用ChatGPT API实现代码如下:

  • 方法一:使用request
import requests
import json

# 构建API请求
url = "https://api.openai.com/v1/engines/davinci-codex/completions"
headers = {"Content-Type": "application/json",
           "Authorization": "Bearer YOUR_API_KEY"}
data = {
    "prompt": "Hello, my name is",
    "max_tokens": 5
}

# 发送API请求
response = requests.post(url, headers=headers, data=json.dumps(data))

# 解析API响应
response_data = json.loads(response.text)
generated_text = response_data["choices"][0]["text"]

print(generated_text)


  • 方式二:使用openAI库
from flask import Flask, request
import openai

app = Flask(__name__)

openai.api_key = "YOUR_API_KEY_HERE"

@app.route("/")
def home():
    return "Hello, World!"

@app.route("/chat", methods=["POST"])
def chat():
    data = request.json
    response = openai.Completion.create(
        engine="davinci",
        prompt=data["message"],
        max_tokens=60
    )
    return response.choices[0].text

if __name__ == "__main__":
    app.run()



3.3 数据智能获取功能设计与实现

定义一个函数来实现电影信息的爬取,该函数的输入参数为电影名,输出为该电影的名称、导演、主演、类型、上映时间、评分等信息。具体实现步骤如下:

  • 构造请求 URL,其中电影名需要进行 URL 编码。

  • 发送 HTTP 请求,获取豆瓣电影页面的 HTML 内容。

  • 使用 lxml 库解析 HTML 文档,提取电影信息。

import requests
from lxml import etree

def crawl_movie_info(movie_name):
    # 1. 构造请求 URL
    url = f'https://www.douban.com/search?q={movie_name}'

    # 2. 发送 HTTP 请求,获取 HTML 内容
    response = requests.get(url)
    html = response.content.decode()

    # 3. 解析 HTML 文档,提取电影信息
    tree = etree.HTML(html)

    # 获取搜索结果列表中的第一个电影条目
    movie_link = tree.xpath('//div[@class="result"]/div[@class="content"]/h3/a/@href')[0]
    response = requests.get(movie_link)
    html = response.content.decode()

    # 解析电影页面 HTML 文档,提取电影信息
    tree = etree.HTML(html)

    # 电影名称
    movie_title = tree.xpath('//span[@property="v:itemreviewed"]/text()')[0]

    # 导演
    directors = tree.xpath('//a[@rel="v:directedBy"]/text()')
    director = ' / '.join(directors)

    # 主演
    actors = tree.xpath('//span[@class="actor"]/span[@class="attrs"]/a/text()')
    actor = ' / '.join(actors)

    # 类型
    genres = tree.xpath('//span[@property="v:genre"]/text()')
    genre = ' / '.join(genres)

    # 上映日期
    release_date = tree.xpath('//span[@property="v:initialReleaseDate"]/text()')[0]

    # 评分
    rating = tree.xpath('//strong[@class="ll rating_num"]/text()')[0]

    # 返回电影信息
    return {
        '电影名称': movie_title,
        '导演': director,
        '主演': actor,
        '类型': genre,
        '上映时间': release_date,
        '评分': rating,
    }


  • 我们可以通过调用该函数,传入电影名参数来获取电影信息。例如:
Copy code
movie_name = '大赢家'
movie_info = crawl_movie_info(movie_name)
print(movie_info)
  • 输出结果如下:

{'电影名称': '大赢家', '导演': '李伟 / 黄伟明', '主演': '赵本山 / 贾玲 / 小沈阳 / 张子枫 / 李春

四、推荐阅读

🥇入门和进阶小程序开发,不可错误的精彩内容🥇 :

  • 《小程序开发必备功能的吐血整理【个人中心界面样式大全】》
  • 《微信小程序 | 借ChatGPT之手重构社交聊天小程序》
  • 《微信小程序 | 人脸识别的最终解决方案》
  • 《微信小程序 |基于百度AI从零实现人脸识别小程序》
  • 《吐血整理的几十款小程序登陆界面【附完整代码】》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IK集成ElasticSearch,IK分词器的下载及使用

IK集成ElasticSearch,IK分词器的下载及使用 下载ElasticSearch 8.7.0网址:Download Elasticsearch | Elastic 历史版本地址:Past Releases of Elastic Stack Software | Elastic 解压ElasticSearch 什么是IK分词器 分词∶即把一段中文或…

IO流基础

目录 1.FileOutPutStream字节输入流 1.1FileOutPutStream使用 1.1.1创建对象 FileOutPutStream fos new FileOutPutStream("路径或者File对象"); 1.1.2.写数据 调用write方法,参数是int类型,但传入文件中是asci…

【LeetCode: 剑指 Offer II 112. 最长递增路径 | 递归 | DFS | 深度优先遍历 | 记忆化缓存表】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

海康工业相机网口相机丢包问题解决方法

​1.1 系统环境设置 1.1.1 网卡设置 网卡推荐使 Intel 芯片的独立千兆网口,例如 intel I350、I210 等芯片组网卡 设置网卡巨型帧为选择 9KB 或 9014 字节 *不同网卡类型,网卡属性有差异,需灵活参考 设置网卡接收与传输缓存区到最大(intel 网卡一般为 2048,realtek 一般…

Program tuning - Druid和Linux配合优化数据库连接池配置

Program tuning - Druid和Linux配合优化数据库连接池配置配置步骤1. 添加依赖2. 添加配置3. 启动监控界面常见问题输入地址之后,浏览器直接打印html代码,而不是登录框刷新页面不能重新加载数据调优步骤1. 开始压测2. 监控线程池状态3. 查看服务器状态结论…

算法 贪心5 || 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

435. 无重叠区间 和452. 用最少数量的箭引爆气球 思路是很相似的。本题按照左边排序或者按照右边排序都是可以的,最终目的都是为了让区间尽可能重叠。 1、按右边排序,排序完第一个元素的右边界一定是最小右边界。往下找第一个不与其重合的左边界&#x…

亚马逊云科技为全球的可持续发展进程做出贡献

可持续发展是一个涉及经济、环境和社会三个方面的复杂问题。经济发展必须在保护环境和社会公正的前提下进行,这样才能实现真正的可持续发展。为了实现这一目标,人们需要借助技术手段,更好地理解和解决环境和社会问题。 亚马逊云科技是全球领…

nssctf web入门(2)

目录 [SWPUCTF 2021 新生赛]easy_md5 [SWPUCTF 2021 新生赛]include [SWPUCTF 2021 新生赛]PseudoProtocols 这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解…

到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

文章目录到了那个年纪,就应该阅读Spring源码了😄第一步,clone😆第二步,使用idea打开项目😊gradle介绍(插叙手法)😃第三步,修改gradle的远程仓库地址&#x1f…

Day932.5个步骤,高效推动组件化架构重构 -系统重构实战

5个步骤,高效推动组件化架构重构 Hi,我是阿昌,今天学习记录都是关于5个步骤,高效推动组件化架构重构的内容。 项目的架构设计是一回事,代码落地又是另外一回事,很多架构设计最终都只是落在了 PPT 上。 一…

QT Graphics View坐标系转换

背景 在做绘图处理时,Scence作为场景,大小是无限的,而View作为一个观察镜头,观察范围是有限的。 那么有限的View观察无限的Scence区域,必然要选定一个观测锚点。 所以View具有一个centerOn(QPointF pos)函数&#xff…

Linux-初学者系列——篇幅1_文件管理命令(持续更新中)

Linux-初学者系列_篇幅1 文件管理命令-目录Linux-初学者系列_篇幅11.创建文件语法:示例:2.创建目录语法:示例:注意:常见错误:3.复制语法:示例:补充:4.移动语法&#xff1…

Vue|数据渲染

Vue 是如何将编译器中的代码转换为页面真实元素的?在Vue 中,自带了模板渲染,而模板的语法也非常简洁易懂。 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一. 数据渲染1.1 条件渲染v-ifv-show1.2 列表渲染v-for1.3 小结一. 数据渲染 1.1 条件渲染 vue条件渲染指…

3. 500 服务器异常 html

目录 1.效果图 2.code 1.效果图 2.code <!DOCTYPE html> <html><head><meta charset="utf-8"><title>500</title><style type="text/css">html,body {margin: 0;padding: 0;height: 100%;min-height: 450px;…

Git --- 常用命令、分支操作、团队协作机制

一、Git 概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性 其性能优于 Subversion、…

多通道振弦传感器无线采集仪与参数配置工具连接

多通道振弦传感器无线采集仪与参数配置工具连接 VS101~VS432 设备配备了专门的参数配置工具 SETP 来完成设备工作参数的查看和修改工作。 连接前的准备工作 &#xff08; 1&#xff09;数据接口与计算机连接 使用标配的通讯线与计算机 RS232 接口连接。 若需基于手机网络发送数…

Java-异常机制

异常机制 正常情况下&#xff0c;程序按照我们希望的样子和步骤去执行&#xff0c;但是&#xff0c;代码就像人生&#xff0c;要是一帆风顺了&#xff0c;就要想想是不是哪里出事了。程序若是有报错还好&#xff0c;就怕没有报错。 实例 public class Test {public static vo…

如何用 YonBuilder 构建线索管理应用

加速企业数智营销&#xff1a;如何用 YonBuilder 构建线索管理应用 如何用 YonBuilder 低代码开发线索管理应用&#xff1f; 线索管理是指通过各种渠道收集、筛选、打分、分配、跟进和培育潜在客户的信息&#xff0c;以便将其转化为成交客户的过程。 通过数智化手段实现良好…

ArcGIS地质图矢量化技巧

01 概述 今天以ArcGIS为例&#xff0c;结合多年的工作经验&#xff0c;来介绍一下地质图矢量化的技巧。 02 底图的配准 不同比例尺的图件&#xff0c;有着不同的配准精度要求&#xff1a; 1&#xff1a;20万的地质图&#xff0c;配准误差不能高于20米&#xff1b; 1:50万…

DFIG控制9: 搭建定子αβ坐标系下的电机模型

DFIG控制9&#xff1a; 搭建定子αβ坐标系下的电机模型。本文基于教程的第9部分&#xff08;终于做完了&#xff09;。主要目的是自己搭建一个DFIG的电机模型&#xff0c;与Simulink库中的模型做个对比。 本文基于教程的第9部分&#xff1a; DFIM Tutorial 9 - Analytical Mod…