一句話概括本文:
利用itchat,監(jiān)控特定信息,轉發(fā)到特定微信群~

引言:
上一篇 小豬的Python學習之旅 —— 17.Python數(shù)據(jù)分析:我主良緣交友了解下
貌似反響不錯,一堆微信加群的,后面有個小伙伴說看到我的文章,是被推薦到了
掘金Python群的早報,掘金竟然還有官方Py群,妥妥地讓他拉我進群啊,然后呢,
里面的掘金之餅趙小餅是個機器人,會拉人,發(fā)表之類的,覺得有些意思,自己
也搜了一下相關的庫Star了,以后怕是會用到。這不,今天就搞了個簡單的東西
玩玩,場景是這樣的:
在干貨群里有個蘑菇云大佬天天發(fā)小宇宙早報,比如今天的:
#每天清晨花60秒了解昨夜今晨的世界大事#
小宇宙整理第663天早安快報,3月30日,星期五,農(nóng)歷二月十四!
1、交通部:全國190個城市實現(xiàn)交通一卡通互聯(lián)互通;
2、霍金墓地將與牛頓達爾文為鄰 葬禮只邀請家人朋友參加;
3、央行貨幣金銀工作會議:開展對各類虛擬貨幣的整頓清理;
4、三大運營商年報對比:賺錢方面,聯(lián)通+電信=0.18個移動;
5、愛奇藝 正式登陸納斯達克 成為目前國內視頻平臺中唯一的上市公司;
6、6秒42!國際田聯(lián)正式官宣:中國選手蘇炳添以6秒42的成績創(chuàng)造了新的亞洲紀錄!
7、WiFi萬能鑰匙回應“竊取用戶密碼”:原理是熱點共享 不是破解;
8、動車降價!28條城際鐵路動車票價最大折扣將提高至20%;
9、臉書丑聞發(fā)酵,劍橋分析母公司被指研究印度選民數(shù)據(jù),花花公子宣布刪除Facebook官方主頁;
10、提議樂視破產(chǎn)重整或退市,孫宏斌或涉嫌"操縱市場";
【早安微語】Time goes by so fast, people go in and out of your life. 如梭時光,生命中人來人往
然后呢,之前自己發(fā)到過幾個群里,都很喜歡看這個,然后天天早上@我發(fā),
然而我也是轉發(fā)別人的,別人沒發(fā)我怎么發(fā)?我跟你講我就是這個表情:

然后呢,每次我都要翻一堆聊天記錄,找到小宇宙日報,然后轉發(fā),
有時蘑菇云大佬有事,或者我開會忙之類的,往往早報變成了午報。

說有沒有公號之類的,就死了這條心吧,目前是沒有的,專門發(fā)新聞那個
群是要付費的,已經(jīng)問過小宇宙本人了,只是他偶爾會在一些群里發(fā)。
作為一個Py玩家,肯定要想辦法解放自己的雙手啊,讓自動來,套路也不復雜:
監(jiān)測到小宇宙或者蘑菇云發(fā)送的今天的小宇宙,就轉發(fā)到特定的群。
怎么監(jiān)測?
- 1.抓包?naive,微信用的自己的協(xié)議,研究有得你研究。
- 2.寫個xposed模塊,類似于自動搶紅包的套路?監(jiān)聽接收消息的函數(shù),
遇到是小宇宙的信息,直接把信息發(fā)送到特定的群?投入時間成本比較
高,有得整,最主要我知道些,并不熟悉... - 3.打開瀏覽器登錄微信網(wǎng)頁端,自己處理網(wǎng)頁結構之類的?放棄
最后想起之前star的:itchat:https://github.com/littlecodersh/ItChat

嘖嘖,有點意思,反正寫著基于微信網(wǎng)頁端,網(wǎng)頁端能干的,這個都能干。
1.用itchat寫個小宇宙早報轉發(fā)腳本
顯示命令行走一波pip裝下庫:
pip install itchat
接著分析下我們的流程:
- 1.監(jiān)聽群聊信息;
- 2.正則過濾當天的小宇宙早報;
- 3.如果過濾到小宇宙早報,判斷是否為小宇宙本人發(fā)的(避免有些人調戲機器人);
- 4.把新聞轉發(fā)到某些特定的群;
- 5.本地測試沒問題后,把腳本丟到騰訊云服務器上跑;
另外要注意:
移動端要保證微信號在線,不然網(wǎng)頁端會斷開鏈接,具體網(wǎng)頁端時效性有多久,
還不知道,另外感覺長時間不發(fā)信息會被下線,故加個定時器,每隔半個小時
往一個沒用的群里發(fā)送一條信息。
大概實現(xiàn)流程如上所述,接著開始擼代碼
過濾小宇宙早報的正則

對接收到的信息做正則,小宇宙的,而且是特定人發(fā)的,
遍歷群發(fā)的組,調用send方法發(fā)送信息。

接著main方法調用下,會彈出一個二維碼頁面讓你掃:

接著就可以試試發(fā)下早報了,復制了今天的小宇宙,另外建了三個群聊,
接著隨便往其中的一個發(fā)小宇宙~

到此相信就沒什么疑問了吧,非常簡單,接著Timer寫個定時器,
每個半個小時往探挽懶月群里發(fā)一條廣告詞

代碼如下:

先把時間改成10s看下結果:

可以,接下來就是把腳本丟服務器上執(zhí)行了。
2.把腳本丟到服務器上運行(利用Screen命令)
不知道你還記不記得ssh連服務器執(zhí)行py腳本,終端關閉后,腳本也會停止,
如果不記得可以看回之前寫的:8.爬蟲實戰(zhàn):刷某博客站點的訪問量
那里調用的是nohup命令,以后臺程序的方式執(zhí)行我們的腳本。
評論區(qū)那里有個掘金大佬評論說可以試試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
重新連接;

接著依舊復制下小宇宙發(fā)到群里,看是否能正常轉發(fā)~
到此就完了,腳本掛著,手機微信也需要登著,坐等明天小宇宙發(fā)早報
來檢驗效果啦~
小結
本節(jié)試了下itchat,寫了個監(jiān)控小宇宙發(fā)的日報,并轉發(fā)到某特定群
的小腳本,挺有意思的,當然你可以自行擴展做個機器人,比如每天
定時發(fā)車,每日一女優(yōu)介紹,每日一車牌號?或者一些其他的信息,
結合后臺玩起來更嗨,當然這就是后面的事了~
最后祝周末愉快~

附:最終代碼(都可以在: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)
# 發(fā)信息
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
# 每個半個小時發(fā)依次信息貌似能防止掉線
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。