项目的github地址:https://github.com/qihe777/itchatApplication
1.项目运行
配置完成环境后:(关于调用的服务接口所需要的秘钥我都没有修改,但为了你程序能一直运行最好自己申请相应的服务)
运行项目:运行WeixinChat文件中的main方法。
需要打开chrome浏览器,以及数据库处于运行状态。
打开时间大约为1分钟,因为需要先运行电影数据集分析。
打开完成后,需要扫描二维码进行登录,之后找其他人和你聊天完成测试。
出现问题请留言反馈。
2.项目成果演示:
1.操作说明: 2.对话功能 3.藏头诗功能:
4.定时任务 5.小冰颜值测试 6.小冰作诗
7.电影排行榜 8.基于内容的电影推荐 9.搜索电影详细信息
2.环境和准备工作:
1.建立数据库:
a:定时消息数据库构建:
id:时间戳int(11)
给谁发消息,usrname varchar(256)
什么时候发 sendtime int(11)
发送什么 message text
CREATE table send(
id int(11) PRIMARY KEY,
usrname varchar(256),
sendtime int(11),
message text
)
b:电影排行榜表
电影id
电影名称
CREATE TABLE `movierank` (
`id` int(11) PRIMARY KEY,
`title` varchar(256) DEFAULT NULL,
)
2.申请阿里云产品:
智能语音交互,(来实现wav格式的语音转化为汉字):修改AccessToken文件中:init方法中的access_key_id ,access_key_secret以及change方法中的appKey。
3.申请图灵机器人权限
(完成图灵机器人和小冰对话功能):修改WeixinChat文件,gettuling方法中的apiKey。
4.配置ffmpeg环境
(用来将mp3格式语音转化为wav格式):参考https://blog.csdn.net/zhangpeterx/article/details/88581437
5.选取合适的chromedriver,并修改moviename文件中的spider类的init方法中的路径。
(用来使用selenium):参考https://blog.csdn.net/qq_26200629/article/details/86141131
6.python3.6环境。
3.可以做的优化:
1.当前只支持同时和一个人对话,因为偷懒只保存了单个状态变量,应该修改为使用字典存储临时变量。
2.增加定时提醒任务格式,且改为定时从数据库查询任务。
3.对某些耗时任务比如生成藏头诗等最好新建线程来完成。
4.模块重新整理,不太纯粹。
5.增加日志系统
4项目模块讲解:
因为有源码,所以自己去github上下载源码对照着看吧,我就不贴代码了
因为项目很简单,直接看代码就能看懂,我也不多bb,只介绍一下模块功能。
data文件为项目的数据集和rnn藏头诗的训练模型和chrome的启动程序。
代码一共7个文件,不同模块不同文件,6个文件中都为类,在WeixinChat脚本中调用这6个类。
1.itchat微信聊天模块:位于WeixinChat文件中。
可以参考官方文档,也可以参考这个总结:python实现微信接口(itchat)。
基本的回复逻辑在此文件的process方法中,通过全局的状态变量来确定当前进行到了哪一步。
2.语音转化文字模块:见AccessToken文件中VoiceChange类的change方法。
itchat下载语音:msg['Text'](msg['FileName'])保存的为mp3格式,需要使用ffmpeg来转化成wav格式,转换之后调用阿里云提供的功能接口进行转化。
参考:python 将MP3格式转换为WAV格式(ffmpeg安装,使用pycharm安装包)
AccessToken文件中的其他方法的原理请访问阿里云智能语音交互官方文档。
3.机器人聊天模块:见整个xiaobing文件和WeixinChat文件中的gettuling和bingreplay方法
图灵机器人请参考官方文档,小冰这个部分时我舍友直接从网上找的代码,忘记是谁的了。
xiaobing文件包括图片颜值测试和图片作诗功能。
4.定时任务模块:见WeixinChat文件send方法和process方法某一部分。
参考:Python 定时任务的实现方式,关于sched参考:python定时任务-sched模块
刚开始通过sched实现,发现会阻塞线程,然后又通过timer来完成的。
当前我只实现了一种格式:n分钟后提醒我xxxxx,直接通过正则匹配获取数据然后使用threading.Timer开启定时任务。虽然将信息保存到了数据库,但是数据库并没有参与定时任务的生成,只用来记录定时任务信息。
但是这样只支持短时间的任务生成。如果是长时间则需要开启线程来定时查询数据库,这样也更合适一些。
5.藏头诗模块:见rccpoem文件。
我们之前实验给的源码,我反正看不懂。
6.电影推荐模块:见movie文件。
参考文档:
1.TMDb 5000部电影数据的分析
2.Kaggle入门 - TMDB 5000 电影推荐数据分析
3.Movies Recommender System
第三篇文章写得非常不错,强烈推荐。
这三篇文章都有讲解,我的代码也有注释,我就不写讲解了,都是最基本的调接口。
github中有一个电影数据分析的notebook,可以参考。
7.电影详细信息模块:见moviename文件的search方法。
参考:[爬虫]使用selenium爬取豆瓣电影搜索结果,并存入MongoDB数据库中
因为电影推荐数据集是英文,所以我们需要将推荐出来的英文名字转化成中文。如何转化呢:通过豆瓣电影搜索,默认搜索出来的第一个电影就是我们要找的电影。豆瓣搜索:https://movie.douban.com/subject_search?search_text=avatar&cat=1002
我以为只是简单的路径截取就好,没想到数据是通过ajax加载的,找了半天也没找到json数据的url,所以只能通过selenium来模拟浏览器操作然后进行爬取了。
但是在测试的时候我发现了一个干扰项:搜索出来的第一个是个小组,不是电影,所以注意一下自己写的xpath语法。