一句话概括本文:
利用itchat,监控特定信息,转发到特定微信群~
引言:
上一篇 小猪的Python学习之旅 —— 17.Python数据分析:我主良缘交友了解下
貌似反响不错,一堆微信加群的,后面有个小伙伴说看到我的文章,是被推荐到了
掘金Python群的早报,掘金竟然还有官方Py群,妥妥地让他拉我进群啊,然后呢,
里面的掘金之饼赵小饼是个机器人,会拉人,发表之类的,觉得有些意思,自己
也搜了一下相关的库Star了,以后怕是会用到。这不,今天就搞了个简单的东西
玩玩,场景是这样的:
在干货群里有个蘑菇云大佬天天发小宇宙早报,比如今天的:
#每天清晨花60秒了解昨夜今晨的世界大事#
小宇宙整理第663天早安快报,3月30日,星期五,农历二月十四!
1、交通部:全国190个城市实现交通一卡通互联互通;
2、霍金墓地将与牛顿达尔文为邻 葬礼只邀请家人朋友参加;
3、央行货币金银工作会议:开展对各类虚拟货币的整顿清理;
4、三大运营商年报对比:赚钱方面,联通+电信=0.18个移动;
5、爱奇艺 正式登陆纳斯达克 成为目前国内视频平台中唯一的上市公司;
6、6秒42!国际田联正式官宣:中国选手苏炳添以6秒42的成绩创造了新的亚洲纪录!
7、WiFi万能钥匙回应“窃取用户密码”:原理是热点共享 不是破解;
8、动车降价!28条城际铁路动车票价最大折扣将提高至20%;
9、脸书丑闻发酵,剑桥分析母公司被指研究印度选民数据,花花公子宣布删除Facebook官方主页;
10、提议乐视破产重整或退市,孙宏斌或涉嫌"操纵市场";
【早安微语】Time goes by so fast, people go in and out of your life. 如梭时光,生命中人来人往
然后呢,之前自己发到过几个群里,都很喜欢看这个,然后天天早上@我发,
然而我也是转发别人的,别人没发我怎么发?我跟你讲我就是这个表情:
然后呢,每次我都要翻一堆聊天记录,找到小宇宙日报,然后转发,
有时蘑菇云大佬有事,或者我开会忙之类的,往往早报变成了午报。
说有没有公号之类的,就死了这条心吧,目前是没有的,专门发新闻那个
群是要付费的,已经问过小宇宙本人了,只是他偶尔会在一些群里发。
作为一个Py玩家,肯定要想办法解放自己的双手啊,让自动来,套路也不复杂:
监测到小宇宙或者蘑菇云发送的今天的小宇宙,就转发到特定的群。
怎么监测?
- 1.抓包?naive,微信用的自己的协议,研究有得你研究。
- 2.写个xposed模块,类似于自动抢红包的套路?监听接收消息的函数,
遇到是小宇宙的信息,直接把信息发送到特定的群?投入时间成本比较
高,有得整,最主要我知道些,并不熟悉... - 3.打开浏览器登录微信网页端,自己处理网页结构之类的?放弃
最后想起之前star的:itchat:https://github.com/littlecodersh/ItChat
啧啧,有点意思,反正写着基于微信网页端,网页端能干的,这个都能干。
1.用itchat写个小宇宙早报转发脚本
显示命令行走一波pip装下库:
pip install itchat
接着分析下我们的流程:
- 1.监听群聊信息;
- 2.正则过滤当天的小宇宙早报;
- 3.如果过滤到小宇宙早报,判断是否为小宇宙本人发的(避免有些人调戏机器人);
- 4.把新闻转发到某些特定的群;
- 5.本地测试没问题后,把脚本丢到腾讯云服务器上跑;
另外要注意:
移动端要保证微信号在线,不然网页端会断开链接,具体网页端时效性有多久,
还不知道,另外感觉长时间不发信息会被下线,故加个定时器,每隔半个小时
往一个没用的群里发送一条信息。
大概实现流程如上所述,接着开始撸代码
过滤小宇宙早报的正则
对接收到的信息做正则,小宇宙的,而且是特定人发的,
遍历群发的组,调用send方法发送信息。
接着main方法调用下,会弹出一个二维码页面让你扫:
接着就可以试试发下早报了,复制了今天的小宇宙,另外建了三个群聊,
接着随便往其中的一个发小宇宙~
到此相信就没什么疑问了吧,非常简单,接着Timer写个定时器,
每个半个小时往探挽懒月群里发一条广告词
代码如下:
先把时间改成10s看下结果:
可以,接下来就是把脚本丢服务器上执行了。
2.把脚本丢到服务器上运行(利用Screen命令)
不知道你还记不记得ssh连服务器执行py脚本,终端关闭后,脚本也会停止,
如果不记得可以看回之前写的:8.爬虫实战:刷某博客站点的访问量
那里调用的是nohup命令,以后台程序的方式执行我们的脚本。
评论区那里有个掘金大佬评论说可以试试screen(虚拟终端),这里就来试试~
基本用法如下:
- 1.新建Screen:
screen -S screen名字
- 2.Screen里新建虚拟终端:组合键:
ctrl + a + c
- 3.在多个虚拟终端间切换:组合键:
ctrl + a + p
(上一个),
ctrl + a + n
(后一个),ctrl + a + shirt + "
(终端列表之间切换) - 4.关闭一个虚拟终端:
ctrl + a + k
或者键入exit
- 5.挂起当前screen,回到之前的shell:
ctrl + a + d
- 6.重新连接screen:键入
screen -ls
列出所有screen,键入screen - r xxx
重新连接;
接着依旧复制下小宇宙发到群里,看是否能正常转发~
到此就完了,脚本挂着,手机微信也需要登着,坐等明天小宇宙发早报
来检验效果啦~
小结
本节试了下itchat,写了个监控小宇宙发的日报,并转发到某特定群
的小脚本,挺有意思的,当然你可以自行扩展做个机器人,比如每天
定时发车,每日一女优介绍,每日一车牌号?或者一些其他的信息,
结合后台玩起来更嗨,当然这就是后面的事了~
最后祝周末愉快~
附:最终代码(都可以在:https://github.com/coder-pig/ReptileSomething 找到):
# 微信小宇宙助手
import itchat
from itchat.content import *
import datetime
import re
import time
from threading import Timer
xyz_compile = re.compile(r'.*?小宇宙整理.*?%d月%d日.*'
% (datetime.datetime.now().month, datetime.datetime.now().day), re.S)
# 小宇宙日报抓取
@itchat.msg_register([TEXT], isGroupChat=True)
def xyz_reply(msg):
group_list = [u'我是渣渣辉', u'我是轱天乐', u'探挽懒月']
group_name = []
for group in group_list:
chat = itchat.search_chatrooms(name=group)
if len(chat) > 0:
group_name.append(chat[0]['UserName'])
# 过滤小宇宙新闻
result = xyz_compile.search(msg['Content'])
if result is not None:
if result.group() is not None and msg['ActualNickName'] == '十二':
for group in group_name:
itchat.send('%s' % (msg['Content']), toUserName=group)
# 发信息
def send_msg():
sched_time = datetime.datetime(2018, 3, 30, 16, 30, 0)
flag = 0
while True:
now = datetime.datetime.now()
if now == sched_time < now < (sched_time + datetime.timedelta(seconds=10)):
flag = 1
time.sleep(1)
else:
if flag == 1:
itchat.send('123', toUserName=u'探挽懒月')
flag = 0
# 每个半个小时发依次信息貌似能防止掉线
def loop_send():
global count
itchat.send('大扎好,我系轱天乐,我四渣嘎辉,探挽懒月,介四里没有挽过的船新版本,'
'挤需体验三番钟,里造会干我一样,爱像借款游戏。'
, toUserName=itchat.search_chatrooms(name=u'探挽懒月')[0]['UserName'])
count += 1
if count < 10000:
Timer(1800, loop_send).start()
if __name__ == '__main__':
count = 0
Timer(1800, loop_send).start()
itchat.auto_login(enableCmdQR=2, hotReload=True)
itchat.run()
来啊,Py交易啊
想加群一起学习Py的可以加下,智障机器人小Pig,验证信息里包含:
Python,python,py,Py,加群,交易,屁眼 中的一个关键词即可通过;
验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~
欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。