教你用Python创建微信聊天机器人


Posted in Python onMarch 31, 2020

最近研究微信API,发现个非常好用的python库:wxpy。wxpy基于itchat,使用了 Web 微信的通讯协议,实现了微信登录、收发消息、搜索好友、数据统计等功能。

这里我们就来介绍一下这个库,并在最后实现一个聊天机器人。

有没有很兴奋?有没有很期待?

好了,接下来,开始我们的正题。

准备工作

安装非常简单,从官方源下载安装

pip install -U wxpy

或者从豆瓣源安装

pip install -U wxpy -i "https://pypi.doubanio.com/simple/"

模块初探

安装完成后,我们来试下几个基本的功能

1. 扫码登录微信

from wxpy import *
bot = Bot()

运行上面的程序,会弹出二维码,用手机微信扫一扫即可实现登录。
但上面的程序有一个缺点,每次运行都要扫二维码。不过wxpy非常贴心地提供了缓存的选项,如下

bot = Bot(cache_path=True)

这样把登录信息保存下来,就不用每次都扫二维码了。

2. 发送消息

bot.file_helper.send("hello")

这里的file_helper就是微信的文件传输助手,我们给文件传输助手发送一条消息,可以在手机端收到如下的消息

教你用Python创建微信聊天机器人

3. 接受消息

我们实现一个收到消息自动回复的功能。

@bot.register()
def print_message(msg): 
 print(msg.text) 
 return msg.text

# 进入Python命令行,让程序保持运行
embed()

强哥打开自己的公众号管理平台,在后端向自己发送消息,就可以收到如下的消息回复

教你用Python创建微信聊天机器人

4. 搜索好友及微信群

我们来实现一个搜索公司群、定位老板并转发老板消息的功能

from wxpy import *

bot = Bot(cache_path=True)

# 定位公司群
company_group = bot.groups().search('公司微信群')[0]

# 定位老板

boss = company_group.search('老板大名')[0]

# 将老板的消息转发到文件传输助手
@bot.register(company_group)
def forward_boss_message(msg): 
 if msg.member == boss: 
 msg.forward(bot.file_helper, prefix='老板发言')

# 堵塞线程
embed()

对于老板喜欢在群里面喊话的同学来说,这是一个福音,以后再也不用担心错失老板的重要信息了~~

数据统计

wxpy的好友统计功能非常好用,可以很方便地统计好友的地理位置分布和性别分布。

下面的代码中,强哥统计了下自己的好友的分布情况,并打印出人数最多的10个地区。

from wxpy import *
bot = Bot(cache_path=True)
friends_stat = bot.friends().stats()

friend_loc = [] # 每一个元素是一个二元列表,分别存储地区和人数信息
for province, count in friends_stat["province"].iteritems():
 if province != "":
 friend_loc.append([province, count])

# 对人数倒序排序
friend_loc.sort(key=lambda x: x[1], reverse=True)

# 打印人数最多的10个地区
for item in friend_loc[:10]:
 print item[0], item[1]

统计出来的地区分布数据画成图表如下

教你用Python创建微信聊天机器人

强哥身在上海,大多数的好友也来自上海,上面的图表也如实地反应了这一情况。

统计性别分布的代码如下

for sex, count in friends_stat["sex"].iteritems():
 # 1代表MALE, 2代表FEMALE
 if sex == 1:
 print "MALE %d" % count
 elif sex == 2:
 print "FEMALE %d" % count

把性别分布的数据生成图表如下

教你用Python创建微信聊天机器人

可以看到好友中男性占了大多数。男性朋友多多,老婆放心多多,嗯~~

聊天机器人

有了上面功能简介部分的基础,我们来实现一个聊天机器人。

聊天机器人基于图灵机器人。图灵机器人可以在图灵机器人-中文语境下智能度最高的机器人大脑注册账号,并创建机器人。

# -*- coding: utf-8 -*-
import json
import requests
from wxpy import *

# 调用图灵机器人API,发送消息并获得机器人的回复
def auto_reply(text): 
 url = "http://www.tuling123.com/openapi/api"
 api_key = "你的api key"
 payload = {
 "key": api_key,
 "info": text,
 "userid": "123456"
 }
 r = requests.post(url, data=json.dumps(payload)) 
 result = json.loads(r.content) 
 return "[tuling] " + result["text"]

bot = Bot(console_qr=True, cache_path=True)

@bot.register(mp)
def forward_message(msg): 
 return auto_reply(msg.text)

embed()

运行上面的程序,发送消息给自己,可以看到如下的对话

教你用Python创建微信聊天机器人

机器人太逗了,上来就要红包,还把我当男朋友了~

附录

wxpy文档:http://wxpy.readthedocs.io/zh/latest/
github地址:https://github.com/youfou/wxpy/blob/master/docs/index.rst

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现截屏的函数
Jul 25 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
Django处理多用户类型的方法介绍
May 18 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
为什么入门大数据选择Python而不是Java?
Mar 07 #Python
详解Python中如何写控制台进度条的整理
Mar 07 #Python
python爬虫爬取网页表格数据
Mar 07 #Python
python使用mysql的两种使用方式
Mar 07 #Python
python表格存取的方法
Mar 07 #Python
Django中Model的使用方法教程
Mar 07 #Python
python使用opencv按一定间隔截取视频帧
Mar 06 #Python
You might like
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python 读写中文json的实例详解
2017/10/29 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
关键字final的用法
2013/10/02 面试题
教师评优事迹材料
2014/01/10 职场文书
阳光体育活动方案
2014/02/16 职场文书
节能减排倡议书
2014/04/15 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
创业计划书之寿司
2019/07/19 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP