2.8 微信提醒
随着移动互联网的普及,微信几乎是人人必用的产品,使用程序来处理微信消息具有很广泛的应用场景。本节介绍如何使用Python来处理微信消息,以及如何将警告信息发送到微信。
2.8.1 处理微信消息
Python处理微信消息的第三方模块主要有wxpy、itchat等。wxpy在itchat的基础上通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展,这里我们使用wxpy,使用itchat的读者可参考官方文档http://itchat.readthedocs.io/zh/latest/。这些模块使用了Web微信的通信协议,实现了微信登录、收发消息、搜索好友、数据统计等功能。
首先需要从官方源下载并安装wxpy。
pip install wxpy
或者从豆瓣源安装wxpy。
pip install -U wxpy -i “ttps://pypi.doubanio.com/simple”
安装完成后,我们试一下几个基本功能。
(1)查找好友、群、发送消息。
运行上面的程序会弹出二维码,使用手机微信扫一扫即可实现登录。开启了cache_path =True之后,会将登录信息保存下来,短时间内登录不需要重新扫码。
(2)接收消息、自动回复、转发消息。
我们可以利用接收消息再转发消息这一功能来保存重要人物(如老板)所发的消息。转发消息实例如下:
(3)统计好友信息,如省份、城市、性别等。
运行结果如图2.32所示。
图2.32 运行结果
可以将上述代码第6行中的"province"替换为"city","sex"用来统计城市和性别信息。利用Python的图表模块可以轻松将统计数据生成漂亮的图表,在此不再详述。
【示例2-33】我们还可以利用微信实现远程控制:定义一个管理员,当收到管理员的消息命令时,执行相应的指令。
运行上面的程序,使用管理员向登录号发送命令,结果如图2.33所示。
图2.33 实现微信远程控制
2.8.2 将警告信息发送至微信
通过利用微信强大的通知能力,我们可以把程序中的警告/日志发到自己的微信上。wxpy提供了以下两种方式来实现该需求。
(1)获取专有的Logger。
wxpy.get_wechat_logger(receiver=None, name=None, level=30)
参数说明:
receiver:当为None、True或字符串时,将以该值作为cache_path参数启动一个新的机器人,并发送到该机器人的“文件传输助手”;当为机器人时,将发送到该机器人的“文件传输助手”;当为聊天对象时,将发送到该聊天对象。
name:Logger名称。
level:Logger等级,默认为logging.WARNING。
实例代码如下:
(2)加入现有的Logger。
class wxpy.WeChatLoggingHandler(receiver=None)
可以将日志发送至指定的聊天对象。
参数说明:
receiver:当为None、True或字符串时,将以该值作为cache_path参数启动一个新的机器人,并发送到该机器人的“文件传输助手”;当为机器人时,将发送到该机器人的“文件传输助手”;当为聊天对象时,将发送到该聊天对象。
实例代码如下:
当然,我们也可以使用其他聊天对象来接收日志。比如,先在微信中建立一个群聊,并在里面加入需要关注这些日志的人员,然后将该群作为接收者。
from wxpy import * # 初始化机器人 bot = Bot() # 找到需要接收日志的群 -- 'ensure_one()' 用于确保找到的结果是唯一的,避免发错地方 group_receiver = ensure_one(bot.groups().search('XX业务-警告通知')) # 指定这个群为接收者 logger = get_wechat_logger(group_receiver) logger.error('打扰大家了,但这是一条重要的错误日志...')
上述两种方法都是wxpy官方提供监控程序的方法,该方法虽然简单,但每次添加一个程序的微信监控都需要扫描二维码重新登录一次,这就显得非常麻烦,有没有一种方法能让微信运行之后无论添加多少次程序都不需要重新扫描二维码呢?当然有,社区的程序员已经为用户想到了——wechat_sener模块。
wechat_sender是基于wxpy和Tornado实现的一个可以将网站、爬虫、脚本等其他应用中各种消息(日志、报警、运行结果等)发送到微信的工具。
安装:
pip install wechat_sender
使用:
(1)只需要在原有的脚本中添加两行代码。
(2)然后在其他脚本中添加以下代码即可实现消息发送至微信。
from wechat_sender import Sender Sender().send('Hello From Wechat Sender') # Hello From Wechat Sender 这条消息将通过(1)中登录微信的文件传输助手发送给你
例如我们已有的wxpy脚本如下:
使用wechat_sender时只需要增加第3行和第10行代码即可。
之后如果还想在其他程序或脚本中发送微信消息,只需要:
# coding: utf-8 from wechat_sender import Sender Sender().send("test message") #发送至已登录微信的文件传输助手 Sender().send_to(“test_message”,”xxx”) #发送至xxx用户,也可以发送至群聊等聊天对象
后续若有程序需要发送报警信息至微信,则不需要重新扫描二维码,只要添加相应的发送语句即可,非常简便。
以上就是本小节介绍的如何使用微信处理消息,以及如何将警告信息发送至微信,读者可以依据具体需要定制自己的代码。