[wxpy]用Python玩转微信之wxpy初探 ── 做属于自己的微信机器人

用Python玩转微信之wxpy初探

  • wxpy介绍
  • 安装wxpy
  • 代码实现
    • 1.登录微信
    • 2.自动处理消息
    • 3.实现程序运行
    • 4.自动回复消息
  • 完整代码

最近事情不多,有时间可以去研究点儿东西,之前看到有在微信里可以自动回复内容、自动发文件的机器人,想去一探究竟。正好最近正在研究Python,便网上搜了下,还真有通过Python控制微信的API,可实现自动消息处理、自动加好友等功能。说起用Python控制微信,可能很多人都会想到itchat,但本人这次研究的不是itchat,而是另一个可以操作微信的API──wxpy,下面来一探wxpy如何操作微信的。

wxpy介绍

wxpy 是在 itchat 的基础上,进行了优化,提高了易用性,并扩展了功能。详细介绍可参考wxpy网站。

安装wxpy

wxpy从Python2.7到3.6均支持,安装wxpy也很简单,通过以下命令即可安装:

pip install wxpy

也可以通过豆瓣的镜像进行安装:

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

代码实现

1.登录微信

注意:建议使用小号登录,为避免常用账号经常登录造成一定概率限制登录的可能性
在wxpy中使用以下方式登录微信:

import wxpy
bot = wxpy.Bot(cache_path=True)

参数中cache_path的作用如下:

cache_path – 设置当前会话的缓存路径,并开启缓存功能;为 None (默认) 则不开启缓存功能。开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 设为 True 时,使用默认的缓存路径 ‘wxpy.pkl’。

除了cache_path参数,Bot()还支持一下参数:

console_qr – 在终端中显示登陆二维码,需要安装 pillow 模块 (pip3 install pillow)。可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 True 时,也将在内部当作 2)。也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 例如: 在大部分 Linux 系统中可设为 True 或 2,而在macOS Terminal 的默认白底配色中,应设为 -2。
qr_path – 保存二维码的路径
qr_callback – 获得二维码后的回调,可以用来定义二维码的处理方式,接收参数: uuid, status, qrcode
login_callback – 登陆成功后的回调,若不指定,将进行清屏操作,并删除二维码文件 logout_callback – 登出时的回调

执行以上代码后,会弹出一个登录二维码,和登录PC版或网页版微信一样,使用手机微信扫描登录,相当于登录微信网页版,只不过是在命令行中进行登录,登录后的效果如下图所示。
在这里插入图片描述
但是执行以上代码登录后,基本没什么用,因为本人没发现能操作什么,因此继续向下研究。

2.自动处理消息

wxpy中提供消息注册功能,可以实现自动处理消息。该功能是通过函数的装饰器方式实现的,比如以下方法实现了自动打印发过来的文本消息。

@bot.register(msg_types=wxpy.TEXT)
def printtext(msg):
    print(msg)

其中msg_types参数,是指定接收消息的类型,wxpy中支持以下消息类型:

文本 TEXT
位置 MAP
名片 CARD
提示 NOTE
分享 SHARING
图片 PICTURE
语音 RECORDING
文件 ATTACHMENT
视频 VIDEO
好友请求 FRIENDS
系统 SYSTEM

但是,当运行时,发现登录后,发消息并没有打印出来,因为在登录后没有进行其他操作,程序会因主线程执行完成而退出,不过没关系,wxpy中提供了解决方法。

3.实现程序运行

为了保证程序主线程不会因无操作而自动退出,wxpy中提供了主线程阻塞功能,方法如下:

wxpy.embed()

加上以上代码后,再次运行,即可停留在了Python的命令行交互界面,然后发过来的信息将会打印在命令行交互界面上,效果如下:
在这里插入图片描述
上面实现了消息的自动处理,但是我需要的是自动回复,下面接着研究。

4.自动回复消息

发现wxpy中提供了消息回复方法“Message.reply()”,于是将刚才的自动处理方式改为下面的自动回复。

@bot.register(msg_types=wxpy.TEXT)
def autoreply(msg):
    msg.reply("收到!")

然后运行后,即可实现自动回复消息,致辞自动回复消息功能已实现完成,总共代码不到十行,是不是很简单,人人都可以做属于自己的微信机器人。

完整代码

import wxpy
bot = wxpy.Bot(cache_path=True)

@bot.register(msg_types=wxpy.TEXT)
def autoreply(msg):
    msg.reply("收到!")

wxpy.embed()

参考:

  • wxpy:https://wxpy.readthedocs.io/zh/latest/index.html

你可能感兴趣的:(Python)