用 Python 玩微信,机器人陪你唠嗑

748 阅读5分钟


本文来自读者投稿第 3 篇,读者公众号「brucepk」

之前给大家分享了怎么用 itchat 库制作微信朋友性别统计图,今天给大家介绍一个更强大的库:wxpy 库。

wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展,wxpy 库可能是最优雅的微信个人号 API。

今天只用到 wxpy 库其中的一个小功能:陪人聊天。

安装

wxpy 库支持 Python 3.4-3.6 版本和 2.7 版本。如果你的电脑只安装了一个 Python 版本,直接用下面命令安装:

pip install wxpy

如果你电脑同时装了 2.7 和 3.x 版本,将上方命令中的 “pip” 替换为 pip3 或 pip2,可确保安装到对应的 Python 版本中。

或者可以从 PYPI 官方源下载安装 (在国内可能比较慢或不稳定):

pip install -U wxpy

也可以从豆瓣 PYPI 镜像源下载安装 (推荐国内用户选用):

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

我用的 Python 版本是 3.6,代码编辑工具是 Pycharm。
安装完成后在代码编辑工具 Pycharm 中导入 wxpy 库。

登陆微信

直接调用 wxpy 库里的 Bot() 方法就会弹窗微信二维码,扫描即可登录微信。

# 导入模块
from wxpy import *
import requests
import json
# 初始化机器人,扫码登陆
bot = Bot()

登录后就可以对微信进行相关操作了。

创建图灵机器人

接下来需要在图灵机器人官网注册账号,点击下方阅读原文可进入官网。

登录后创建机器人,填写应用终端、应用行业、应用场景。


创建成功后就能得到 apikey。



接口请求 API

将刚注册获取的 apikey 和用户输入的信息 info 作为 post 请求的参 data。直接用 request.post 请求图灵机器人 api 地址,加上刚才的 data。这样就完成了对图灵机器人接口的请求。

robot = Bot()
def talk_robot(info='你好啊'):   #定义一个默认参数
    api_url = 'http://www.tuling123.com/openapi/api'  # 图灵接口url
    apikey = 'xxxxxxxxxx'       # 注册图灵生成key 
    data = {'key': apikey, 'info': info}                                   
    r = requests.post(api_url, data=data).text

用 requests.post 处理后的返回的数据是 json 格式,比如我输入的 info 参数是「大家好」,返回的 json 语句是:

{"code":100000,"text":"看来你心情还不错哦!"}

当然,这个参数对应的回复不止一条,这是随机回复的其中一条,也有可能回复:

{"code":100000,"text":"你好,我就好。"}

我们现在需要把 json 语句的值提取出来,使用 json.loads(r)['text'] 方法提取出 text 值。

response = json.loads(r)['text']
return response

创建话痨机器人

wxpy 提供了注册消息的方法,可以简单将各种类型的消息注册并自定义处理方式。注册消息使用简单的 @bot.register() 方法。

定义一个回复朋友消息的函数,并将回复的 message 这个字符串使用 format() 方法格式化后作为上面 talk_robot() 函数的入参,返回机器人回复的消息。

当然仅仅写以上内容,会导致你的程序主程序运行结束自然退出。wxpy 给出了embed() 方法,在程序末尾(或其他你想要暂停调试的地方)加上 embed() 方法就可以让程序保持运行,同时进入Python命令行。

@robot.register()
def reply_my_friend(msg):
    message = '{}'.format(msg.text)
    response = talk_robot(info=message)
    return response
embed()

这样,我的小号就化身成为话痨微信机器人,我们在群里不管说什么,他都会搭话。

创建微智能机器人

如果技术群里人多的在讨论问题的话,这个话痨就会显得不是太智能,这时我们可以加个判断条件对 TA 进行优化下,只有 @TA 时,TA 才会搭话。

@robot.register()
def print_group_msg(msg):
    if msg.is_at:
        message = '{}'.format(msg.text)
        response = talk_robot(info=message)
    return response
embed()

来看下这个微智能的机器人。

这样,简单的两款微信机器人就完成了,跃跃欲试的小伙伴赶紧试试吧。请记住用自己的小号来登录做成机器人,如果用自己常用的微信做成话痨机器人的话,你的各微信群会爆炸的,不明所以的吃瓜群众还以为你的微信中病毒了呢。

用小号做话痨机器人的话也要注意把小号关注的公众号取消关注,因为一旦公众号有推文过来,你的话痨机器人就会搭话,而一般的公众号都会设置关键词回复和收到消息回复的功能,所以他们会一直聊下去,但是这个免费的 api 接口每天的请求次数是有限制的,每天免费 5000 次请求。如果超过这个次数限制的话,TA 就只会说一句话:亲爱的,当天请求次数已用完。当然,土豪请忽略我上面说的这句话。

如果群人数比较多,很活跃的话,可以用其他手机号再注册图灵获取一个 apikey。

源码很简单,可以自己敲下,如需参考我的源码,公众号回复「wxpy」获取源码。

优化

以上创建的机器人只能识别中文和个别的英文,不识别表情、图片、语音、视频,这个后期会逐步优化的。

今天讲的只是 wxpy 库冰山一角的功能,还有很多有意思的功能:

  • 发送文本、图片、视频、文件;

  • 通过关键词或用户属性搜索 好友、群聊、群成员等;

  • 获取好友/群成员的昵称、备注、性别、地区等信息;

  • 加好友,建群,邀请入群,移出群等等;

推荐阅读:

如何自学 Python

欢迎大家关注我的公众号「痴海」,后台回复「1024」,为你精心准备时下最热门的技术。