中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
用Python做個(gè)微信自動(dòng)回復(fù)機(jī)器人



一個(gè)自動(dòng)回復(fù)的機(jī)器人


微信自上線以來,一直沒有自動(dòng)回復(fù)的功能,想必是有他們的理念。但是有些人群,確實(shí)對(duì)此功能有一定需求,我舉兩個(gè)栗子:

  • 不愿時(shí)刻被消息打擾的人

  • 消息需要批量處理的人們(比如微商)

功能列表:

  • 收到消息立即自動(dòng)回復(fù)

  • 收到消息延遲指定時(shí)間回復(fù)

  • 對(duì)不同好友定制不同的回復(fù)內(nèi)容

  • 在手機(jī)端隨時(shí)進(jìn)行控制


1.啟用itchat模塊

itchat的原理是通過掃碼進(jìn)行遠(yuǎn)程微信網(wǎng)頁端的登錄,然后通過在移動(dòng)端進(jìn)行操作,網(wǎng)頁端進(jìn)行響應(yīng),來實(shí)現(xiàn)一些功能,雖然似乎繞了個(gè)彎子,但是在微信的限制下,這似乎已經(jīng)是一種最佳的方式了。

首先我們需要考慮別的問題是:程序如何在微信端接收到你的指令。此時(shí)出現(xiàn)了一個(gè)非常重要的角色:文件管理器。(當(dāng)網(wǎng)頁端微信登陸后,消息列表會(huì)出現(xiàn))此時(shí),文件管理器充當(dāng)了移動(dòng)端和web端的橋梁。

我們可以先通過設(shè)定幾個(gè)全局變量來做作為功能的開關(guān)和保存數(shù)據(jù)的容器。

然后通過判斷web端在”文件管理器“中接收到的字符串指令來進(jìn)行不同操作,假如此時(shí)我們收到了朋友的消息,需要程序給出自動(dòng)回復(fù)。


收到朋友消息即時(shí)進(jìn)行自動(dòng)回復(fù)是很簡單的,但是如何去做延時(shí)發(fā)送回復(fù)消息呢?我先談一談我的想法,拋磚引玉:


  • 一般發(fā)送消息需要用到隊(duì)列,進(jìn)行入隊(duì)和出隊(duì),我在這里設(shè)置了一個(gè)字典來保存消息發(fā)送者的數(shù)據(jù)。

  • 鍵為消息發(fā)送者的昵稱,值是一個(gè)長度為2的數(shù)組,分別保存消息發(fā)送者的微信id和接收消息時(shí)的時(shí)間戳。

  • 這樣我將每條發(fā)送過來的朋友信息保存在這個(gè)字典中,再通過將設(shè)定延遲時(shí)間同消息時(shí)間戳求和與當(dāng)前時(shí)間戳進(jìn)行對(duì)比,若當(dāng)前時(shí)間戳較大,那么執(zhí)行發(fā)送消息的操作。

  • 此時(shí)再開啟一個(gè)線程作為定時(shí)任務(wù),定時(shí)去檢測字典中每條數(shù)據(jù)是否到達(dá)了發(fā)送的臨界要求(當(dāng)前時(shí)間戳>=消息時(shí)間戳+設(shè)定的延遲時(shí)間)。

  • Python中有個(gè)專門做定時(shí)任務(wù)的模塊叫sched,但是我嘗試了一下,sched會(huì)阻塞當(dāng)前主線程,也會(huì)阻塞itchat的線程,所以并不合適。

  • 這里我還是采用了threading的Timer來充當(dāng)定時(shí)器,不過要注意使用遞歸,否則將會(huì)出現(xiàn)運(yùn)行一次就結(jié)束的情況。


到此為止,主要的功能已經(jīng)實(shí)現(xiàn)了,我用一個(gè)測試賬號(hào)對(duì)我的微信進(jìn)行了各種測試,看一下以下截圖:




2.增強(qiáng)功能

這時(shí)功能基本已經(jīng)完成了,這就結(jié)束了嗎?別著急,再想想有沒有需要完善一下的地方?用過微信web端的同學(xué)應(yīng)該知道,當(dāng)web端長期處于未操作的狀態(tài)下會(huì)失去連接。


在我們這個(gè)情況下,假如你長時(shí)間未收到微信消息,后臺(tái)程序?qū)?huì)與微信失去連接,再次開啟需要登上服務(wù)器重啟程序,這顯然非常麻煩。有沒有什么簡單的解決辦法呢?


我想到一些應(yīng)用的后臺(tái)通常會(huì)做一道心跳檢測機(jī)制,那我就模仿這個(gè)思路,定時(shí)給我的”文件管理器“發(fā)一個(gè)字符串,來保持連接。

def keep_alive():
   text='保持登錄'
   itchat.send(text, toUserName='filehelper')
   global timer2
   timer2 = threading.Timer(60*60,keep_alive)
   timer2.start()


最后,我們需要將這個(gè)程序發(fā)布在服務(wù)器上,讓它全天候?yàn)槲业奈⑿欧?wù)。


這里需要注意,如果僅用python xxxx.py來運(yùn)行的話,關(guān)閉shell會(huì)導(dǎo)致進(jìn)程結(jié)束,所以我們需要使用nohup python xxxx.py &來全方位守護(hù)進(jìn)程,這里啰嗦一句,nohup和&的功能是不一樣的,很多人容易混淆,感興趣的話可以去查下資料區(qū)分一下。

    簡單分析微信好友信息


上文提到,既然我們能通過itchat來獲取好友的信息,那讓我們看看都有哪些好玩的信息。這是以json形式返回的我的信息,同理我的好友的這些公開信息我也能獲取到。


我們就來進(jìn)行一些簡單的的數(shù)據(jù)抓取,清洗與呈現(xiàn)。我看中的字段是:Sex、City、Province、Signature。我想做的是通過圖表來直觀地展示我微信好友中的性別比例,家鄉(xiāng)分布(當(dāng)然不一定準(zhǔn)確,很多人都是胡亂設(shè)置的),我的江蘇朋友的市級(jí)分布,以及好友個(gè)性簽名的詞云。


這部分內(nèi)容主要是需要熟悉諸如pyecharts、jieba、wordcloud模塊的API調(diào)取,難度不大,但需要細(xì)心調(diào)試。我這里就不詳細(xì)贅述了。


1).性別比例


用餅圖可視化一下:


2).好友省級(jí)分布

def get_data(type):
   result=[]
   my_friends = itchat.get_friends(update=True)[0:]
   for item in my_friends:
       result.append(item[type])
   return result

def friends_province():
   # 獲取好友省份
   province= get_data('Province')
   # 分類
   province_distribution = {}
   for item in province:
       #刪除英文省份,因?yàn)橹袊貓D表中沒有
       if bool(re.search('[a-z]',item)):
           continue
       elif not province_distribution.__contains__(item):
           province_distribution[item] = 1
       else:
           province_distribution[item] += 1
   #將省份名為空的刪除
   province_distribution.pop('')
   #提取地圖接口需要的數(shù)據(jù)格式
   province_keys=province_distribution.keys()
   province_values=province_distribution.values()

   return province_keys,province_values
   
if __name__ == '__main__':
   itchat.auto_login(True)

   微信好友省份分布
   attr,value=friends_province()
   map = Map('我的微信好友分布', '@寒食君',width=1200, height=600)
   map.add('', attr, value, maptype='china', is_visualmap=True,
           visual_text_color='#000')
   map.render()


用地圖來顯示一下:


3).個(gè)性簽名詞云

def friends_signature():
   signature = get_data('Signature')
   wash_signature=[]
   for item in signature:
       #去除emoji表情等非文字
       if 'emoji' in item:
           continue
       rep = re.compile('1f\d+\w*|[<>/=【】『』♂ω]')
       item=rep.sub('', item)
       wash_signature.append(item)

   words=''.join(wash_signature)
   wordlist = jieba.cut(words, cut_all=True)
   word_space_split = ' '.join(wordlist)
   coloring = np.array(Image.open('C:/Users/casua/Desktop/test1.JPG'))
   my_wordcloud = WordCloud(background_color='white', max_words=800,
                            mask=coloring, max_font_size=80, random_state=30, scale=2,font_path='C:/Windows/Fonts/STKAITI.ttf').generate(word_space_split)

   image_colors = ImageColorGenerator(coloring)
   plt.imshow(my_wordcloud.recolor(color_func=image_colors))
   plt.imshow(my_wordcloud)
   plt.axis('off')
   plt.show()


看一下詞云圖:



Python真的非常有趣,可以做很多事情,細(xì)心的發(fā)現(xiàn)生活里面的一些點(diǎn)點(diǎn)滴滴,用技術(shù)去改變生活。也許這個(gè)小腳本并不是很復(fù)雜,但是通過這樣的練習(xí),你會(huì)有極大的成就感。感謝寒食君的投稿,他是一個(gè)非常具有工匠精神的程序員,加油!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
微信大揭秘——用Python玩轉(zhuǎn)微信(一)
用python分析你的朋友圈,很好玩~
python 玩微信,超有趣
微信群發(fā)太簡單了!三秒通知到你的全部好友!Python牛逼!
當(dāng) python 遇到你的微信的時(shí)候,你才發(fā)現(xiàn)原來你的微信好友是這樣的
老婆最近不開心,發(fā)消息老撤回,我利用Python破解了撤回的消息!
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服