阅读本文大约需要5分钟
先说一件事,抱着“沉淀成本不是成本”的态度,最近会将以前写的文章删除或者进行合并,按照高人的指点进行格式上和内容上的完善。
因为一直写基础的缘故,今天朋友提了下面这样一个需求。就顺便写了一个小项目和大家分享一下
(图片是微信截图粘贴不了,抱歉。但不影响下文阅读)
2
itchat:
强大的微信个人号的开源接口,使用几十行的代码就可以让你快速了解你的微信好友,群,公众号的信息。像我们之前看到的统计个性签名,好友全国分布等等之类的信息其实在你了解itchat之后都可以十分简单的实现。
这次小项目的重点不是介绍itchat,我会解释用到的部分(写在程序的注释部分)。如果你不熟悉或者想了解整个模块欢迎公众号留言告诉我,会在以后和大家进行分享。
导入模块和申明变量:
1 import itchat
2 from itchat.content import *
3
4
5 gname = '设定群名'
6 context = '这是一条我设定群的发送消息,微信正式处于托管状态。大家可以忽略'
7
自动回复:
1 # 监听msg是谁给我发消息
2 @itchat.msg_register(INCOME_MSG)
3 #通过msg变量返回值定位发送用户
4 def text_reply(msg):
5 # 打印获取到的信息
6 # print(msg)
7 itchat.send("您发送了:\'%s\'\n微信目前处于python托管,你的消息我会转发到手机,谢谢" %
8 (msg['Text']), toUserName=msg['FromUserName'])
这里主要注意的是装饰器的使用,这里其实还是可以监听图片,视频,文档之类的。为了简便,这里只是文本,所以如果对方发送的是图片,会打印成转码格式
群聊发送消息:
1def SendChatRoomsMsg(gname, context):
2 # 获取群组所有的相关信息(注意最好群聊保存到通讯录)
3 myroom = itchat.get_chatrooms(update=True)
4 # myroom = itchat.get_chatrooms()
5 #定义全局变量(也可以不定义)
6 global username
7 # 传入指定群名进行搜索,之所以搜索,是因为群员的名称信息也在里面
8 myroom = itchat.search_chatrooms(name=gname)
9 for room in myroom:
10 # print(room)
11 #遍历所有NickName为键值的信息进行匹配群名
12 if room['NickName'] == gname:
13 username = room['UserName']
14 # 得到群名的唯一标识,进行信息发送
15 itchat.send_msg(context, username)
16 else:
17 print('No groups found')
群里发送消息主要麻烦在群名及相关信息的查找,要准确的了解get_chatrooms()和search_chatrooms()返回值
登录微信并保持登录状态:
1 # 登录微信enableCmdQR表示的是当完全的命令行界面可以弹出文本绘制的二维码
2 # 可以让你得以扫码登录,hotReload表示的连续几次运行不需要再次扫码
3 itchat.auto_login(enableCmdQR=True, hotReload=True)
4 # 调用函数发送群消息
5 SendChatRoomsMsg(gname, context)
6 # 保持登录状态
7 itchat.run()
最后:
其实还可以做得更好玩,导入time模块可以做成定时发送消息装置。我今天也尝试了做成刷屏模式,但是在使用while死循环发送群消息时,就没办法有进程来处理处于阻塞状态的“自动回复”了。我的解决办法是导入OS模块简历fork()建立多进程,有兴趣的可以试试。
我将源码放到GitHub上面了,有兴趣的可以查看源代码
微信扫一扫关注该公众号