使用python构造一个微信聊天机器人
最近在学python的过程中无意间发现一个python库:wxpy,其可以实现让微信自动接收、处理消息并进行回复的一系列功能。感觉挺有意思的,便自行摸索学习,并成功地实现了其功能,故写下此博客作学习分享。
wxpy 支持 Python 3.4-3.6,以及 2.7 版本。
从PYPI 官方源下载安装:
pip install -U wxpy
从豆瓣 PYPI 镜像源下载安装:
pip install -U wxpy -i "https://pypi.doubanio.com/simple/"
推荐国内用户使用镜像源下载安装,相比官方源更稳定,需要注意的是,若想确保安装到对应的 Python 版本中,命令中的 “pip” 替换为 “pip3” 或 “pip2”。
linux下还需安装pillow:
pip install pillow
需要去官网注册一个图灵机器人并获取APIKEY.(图灵机器人是一个中文语境下的对话机器人,可以使用免费版,一个账号最多可以创建5个机器人,一个机器人日调用接口数5000次)
官网地址:http://www.tuling123.com/
若觉得麻烦不想注册也可以,不需要APIKEY也可以实现简单的微信定时发送消息,简单回复等功能,如果想要智能化的自动回复功能,还是乖乖去注册吧。
from wxpy import * # 导入模块
bot = Bot() # 初始化机器人,扫码登陆,但每次登陆都得重新扫码
#bot = Bot(cache_path=True)
#把登录信息保存下来,不想每次都扫码的可以用这一条
运行后会弹出微信登录的二维码,扫描后登录网页版微信
2.发送消息
friend = bot.friends().search(u'你好友的名字')[0]
friend.send(u"哈哈")
#指定某个好友并向其发送消息
运行后会向指定好友发送所写的内容,可以在这个功能的基础上进一步实现定时向某人发送消息的功能。我发现一篇关于“教你用微信每天给女朋友说晚安”的文章,有兴趣可以看一下http://www.cnblogs.com/botoo/p/8622379.html
3.回复消息
@bot.register()
def reply_msg(msg):
msg.reply(u'本人正忙,请稍后回复')
embed()
当好友向你发送消息后就会得到统一回复“本人正忙,请稍后回复”。
from wxpy import * #导入模块
bot = Bot(cache_path=True)#扫码登陆
tuling = Tuling(api_key='自行输入')#初始化图灵机器人
@bot.register(msg_types=TEXT)
def auto_reply_all(msg):
tuling.do_reply(msg)
#自动回复功能,回复所有消息
bot.join()#开始运行
以下即为我运行成功自动回复的结果
(以上源码均源自网络)
关于用图灵的APIKEY来实现自动回复的文章我还收藏了几篇
https://blog.csdn.net/getcomputerstyle/article/details/70175167
https://blog.csdn.net/lin_zhongmu/article/details/77429181
https://blog.csdn.net/qq_36313726/article/details/78572086
我在实现微信自动回复的过程中也不是一帆风顺的,在安装好wxpy,做好前期准备后,运行程序时出现ImportError: No module named 'wxpy'的错误,找了很久总是找不到解决方法,最后才在该文中找到解决方案:https://blog.csdn.net/damotiansheng/article/details/43916881
我把自己做的py文件放到 site_packages 目录下,直接运行,成功地解决了问题。
还有就是关于'sudo'不是内部或外部命令,也不是可运行的程序或批处理文件的错误,该文也给出了解决方案:
http://www.zhimengzhe.com/windows/62640.html
https://www.jianshu.com/p/c0baf3c6db15
https://www.jianshu.com/p/ef75e97146c2
http://blog.sina.com.cn/s/blog_14c3c70df0102whkp.html
需要注意的是不知道用微信机器人会不会有被封号的危险,所以建议大家用小号。
关于Python构造机器人的学习分享就到这里,对于Python的学习,今后还会不定时更新,和我一样在自学Python的小伙伴可以关注一波,互相激励。