小豬的Python學習之旅 —— 18.Python微信轉發小宇宙早報

coder-pig發表於2018-03-30

一句話概括本文

這篇非常簡單好玩,利用itchat,監控特定資訊,轉發到特定微信群~

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報


引言

上一篇 小豬的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. 如梭時光,生命中人來人往

然後呢,之前自己發到過幾個群裡,都很喜歡看這個,然後天天早上@我發, 然而我也是轉發別人的,別人沒發我怎麼發?我跟你講我就是這個表情:

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

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

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

說有沒有公號之類的,就死了這條心吧,目前是沒有的,專門發新聞那個 群是要付費的,已經問過小宇宙本人了,只是他偶爾會在一些群裡發。

作為一個Py玩家,肯定要想辦法解放自己的雙手啊,讓自動來,套路也不復雜:

監測到小宇宙或者蘑菇雲傳送的今天的小宇宙,就轉發到特定的群。

怎麼監測?

  • 1.抓包?naive,微信用的自己的協議,研究有得你研究。
  • 2.寫個xposed模組,類似於自動搶紅包的套路?監聽接收訊息的函式, 遇到是小宇宙的資訊,直接把資訊傳送到特定的群?投入時間成本比較 高,有得整,最主要我知道些,並不熟悉...
  • 3.開啟瀏覽器登入微信網頁端,自己處理網頁結構之類的?放棄

最後想起之前star的:itchatgithub.com/littlecoder…

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

嘖嘖,有點意思,反正寫著基於微信網頁端,網頁端能幹的,這個都能幹。


1.用itchat寫個小宇宙早報轉發指令碼

顯示命令列走一波pip裝下庫:

pip install itchat
複製程式碼

接著分析下我們的流程:

  • 1.監聽群聊資訊
  • 2.正則過濾當天的小宇宙早報
  • 3.如果過濾到小宇宙早報,判斷是否為小宇宙本人發的(避免有些人調戲機器人)
  • 4.把新聞轉發到某些特定的群
  • 5.本地測試沒問題後,把指令碼丟到騰訊雲伺服器上跑

另外要注意:

移動端要保證微訊號線上,不然網頁端會斷開連結,具體網頁端時效性有多久, 還不知道,另外感覺長時間不發資訊會被下線,故加個定時器,每隔半個小時 往一個沒用的群裡傳送一條資訊。

大概實現流程如上所述,接著開始擼程式碼

過濾小宇宙早報的正則

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

對接收到的資訊做正則,小宇宙的,而且是特定人發的, 遍歷群發的組,呼叫send方法傳送資訊。

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

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

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

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

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

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

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

程式碼如下

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

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

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

可以,接下來就是把指令碼丟伺服器上執行了。


2.把指令碼丟到伺服器上執行(利用Screen命令)

不知道你還記不記得ssh連伺服器執行py指令碼,終端關閉後,指令碼也會停止, 如果不記得可以看回之前寫的:8.爬蟲實戰:刷某部落格站點的訪問量 那裡呼叫的是nohup命令,以後臺程式的方式執行我們的指令碼。

評論區那裡有個掘金大佬評論說可以試試screen(虛擬終端),這裡就來試試~

基本用法如下

  • 1.新建Screenscreen -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**重新連線;

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

接著依舊複製下小宇宙發到群裡,看是否能正常轉發~

到此就完了,指令碼掛著,手機微信也需要登著,坐等明天小宇宙發早報 來檢驗效果啦~


小結

本節試了下itchat,寫了個監控小宇宙發的日報,並轉發到某特定群 的小指令碼,挺有意思的,當然你可以自行擴充套件做個機器人,比如每天 定時發車,每日一女優介紹,每日一車牌號?或者一些其他的資訊, 結合後臺玩起來更嗨,當然這就是後面的事了~

最後祝週末愉快~

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報


附:最終程式碼(都可以在:github.com/coder-pig/R… 找到):

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

# 微信小宇宙助手
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,驗證資訊裡包含: PythonpythonpyPy加群交易屁眼 中的一個關鍵詞即可通過;

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報

驗證通過後回覆 加群 即可獲得加群連結(不要把機器人玩壞了!!!)~~~ 歡迎各種像我一樣的Py初學者,Py大神加入,一起愉快地交流學♂習,van♂轉py。

小豬的Python學習之旅 ——  18.Python微信轉發小宇宙早報


相關文章