一句話概括本文:
這篇非常簡單好玩,利用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:github.com/littlecoder…
嘖嘖,有點意思,反正寫著基於微信網頁端,網頁端能幹的,這個都能幹。
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,寫了個監控小宇宙發的日報,並轉發到某特定群 的小指令碼,挺有意思的,當然你可以自行擴充套件做個機器人,比如每天 定時發車,每日一女優介紹,每日一車牌號?或者一些其他的資訊, 結合後臺玩起來更嗨,當然這就是後面的事了~
最後祝週末愉快~
附:最終程式碼(都可以在:github.com/coder-pig/R… 找到):
# 微信小宇宙助手
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。