1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何用Python查看微信好友撤回的消息?

        共 4547字,需瀏覽 10分鐘

         ·

        2022-03-17 02:13

        ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

        后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

        一、pip Install itchat

        既然都用python解決問(wèn)題了,第一步當(dāng)然是明確用什么庫(kù)啦,直接執(zhí)行pip install itchat:

        done!?

        二、itchat.login()

        下完了庫(kù),就得試下庫(kù)的最入門(mén)用法啦,啦啦啦:

        但沒(méi)想到,復(fù)現(xiàn)到這一步時(shí)就出問(wèn)題了。直接用itchat庫(kù)像上面這樣操作,登陸的會(huì)是微信的網(wǎng)頁(yè)版,而騰訊之前為了防止大家用計(jì)算機(jī)自動(dòng)化操作微信從而可能會(huì)導(dǎo)致一些安全問(wèn)題,封停了網(wǎng)頁(yè)版微信API,如果只是像上面這樣做的話,控制臺(tái)會(huì)提醒說(shuō)“由于安全原因,此微信號(hào)不能使用網(wǎng)頁(yè)版微信。你可以使用+Windows+版微信或+Mac+版微信登錄?!?/span>

        ok,男人要有耐心,遇事心平氣和,google+知乎,若沒(méi)試過(guò)七七四十九種解決方案,萬(wàn)不可直接考慮砸電腦。

        很好,經(jīng)過(guò)幾次試錯(cuò)以后,找到一種簡(jiǎn)單便捷的解決方案:

        很好,如上操作完,登陸成功!

        三、itchat.search_friends() + send()

        很好,登陸成功,來(lái)試著給好友發(fā)條消息?

        我大概執(zhí)行了下面這樣的代碼:

        執(zhí)行結(jié)果:

        很好,發(fā)送成功!

        四、@itchat.msg_register()

        接下來(lái)我們要監(jiān)聽(tīng)一下好友發(fā)送的消息,嘗試在本機(jī)執(zhí)行參考文檔中的這段代碼:

        在我本機(jī)復(fù)現(xiàn)的效果,沒(méi)毛病,效果杠杠的,發(fā)啥我都能在控制臺(tái)監(jiān)聽(tīng)到了,嘿嘿嘿:

        五、def reserver_info(msg)

        接下來(lái)我們來(lái)復(fù)現(xiàn)下面這一段:

        我本機(jī)上的情況

        六、@itchat.msg_register([TEXT, PICTURE, RECORDING])

        上面完成了對(duì)于文字內(nèi)容的監(jiān)聽(tīng),接下來(lái)要感受一下圖片、語(yǔ)音什么的如何處理了。

        嘗試復(fù)現(xiàn)下面的代碼:

        本機(jī)復(fù)現(xiàn)成功,結(jié)果我就先不放了,不然又得打碼,好麻煩[捂臉] 原文中對(duì)于圖片格式和音頻格式的講解:

        七、os.mkdir() + info()

        我們現(xiàn)在牽扯到應(yīng)該怎么存儲(chǔ)圖片和語(yǔ)音信息了。

        而我接下來(lái)繼續(xù)的行為,低情商的說(shuō)法叫:繼續(xù)抄;高情商的說(shuō)法:人家代碼的可復(fù)用性好高。

        在本機(jī)復(fù)現(xiàn)這段代碼:

        執(zhí)行結(jié)果:

        是python就是這么容易順利執(zhí)行,讓人感覺(jué)枯燥且乏味嗎?Hhh,當(dāng)年勞資要是想用別人的C++的代碼,沒(méi)個(gè)取經(jīng)的精神,過(guò)上那么九九八十一難是絕對(duì)調(diào)不通滴呀。

        八、note_info(msg)

        現(xiàn)在我們能夠存儲(chǔ)聊天信息了,就是既然是要做防撤回軟件,我們應(yīng)該只需要存那些撤回了的信息,那么靠什么來(lái)判別哪些信息是撤回消息呢?Content模塊為我們提供了NOTE類型,該類型指的是系統(tǒng)消息:

        好,我們繼續(xù)在本地復(fù)現(xiàn)上面的程序:

        復(fù)現(xiàn)成功,枯燥。

        九、完整程序代碼

        最后就是完整程序的代碼:

        import?itchat
        from?itchat.content?import?*
        import?os
        import?time
        import?xml.dom.minidom????#?解析xml模塊

        #?這是保存撤回消息的文件目錄(如:圖片、語(yǔ)音等),這里已經(jīng)寫(xiě)死了,大家可以自行修改
        temp?=?'/Users/yourname/Documents/itchat'?+?'/'?+?'撤回的消息'
        if?not?os.path.exists(temp):
        ????os.mkdir(temp)

        itchat.auto_login(True)????#?自動(dòng)登錄

        dict?=?{}????#?定義一個(gè)字典


        #?這是一個(gè)裝飾器,給下面的函數(shù)添加新功能
        #?能夠捕獲好友發(fā)送的消息,并傳遞給函數(shù)參數(shù)msg
        @itchat.msg_register([TEXT,?PICTURE,?FRIENDS,?CARD,?MAP,?SHARING,?RECORDING,?ATTACHMENT,?VIDEO])??#?文本,語(yǔ)音,圖片
        def?resever_info(msg):
        ????global?dict????#?聲明全局變量

        ????info?=?msg['Text']??#?取出消息內(nèi)容
        ????msgId?=?msg['MsgId']??#?取出消息標(biāo)識(shí)
        ????info_type?=?msg['Type']??#?取出消息類型
        ????name?=?msg['FileName']??#?取出消息文件名
        ????#?取出消息發(fā)送者標(biāo)識(shí)并從好友列表中檢索
        ????fromUser?=?itchat.search_friends(userName=msg['FromUserName'])['NickName']
        ????ticks?=?msg['CreateTime']??#?獲取信息發(fā)送的時(shí)間
        ????time_local?=?time.localtime(ticks)
        ????dt?=?time.strftime("%Y-%m-%d?%H:%M:%S",?time_local)??#?格式化日期
        ????#?將消息標(biāo)識(shí)和消息內(nèi)容添加到字典
        ????#?每一條消息的唯一標(biāo)識(shí)作為鍵,消息的具體信息作為值,也是一個(gè)字典
        ????dict[msgId]?=?{"info":?info,?"info_type":?info_type,?"name":?name,?"fromUser":?fromUser,?"dt":?dt}


        @itchat.msg_register(NOTE)??#?監(jiān)聽(tīng)系統(tǒng)提示
        def?note_info(msg):
        ????#?監(jiān)聽(tīng)到好友撤回了一條消息
        ????if?'撤回了一條消息'?in?msg['Text']:
        ????????#?獲取系統(tǒng)消息中的Content結(jié)點(diǎn)值
        ????????content?=?msg['Content']
        ????????#?Content值為xml,解析xml
        ????????doc?=?xml.dom.minidom.parseString(content)
        ????????#?取出msgid標(biāo)簽的值
        ????????result?=?doc.getElementsByTagName("msgid")
        ????????#?該msgId就是撤回的消息標(biāo)識(shí),通過(guò)它可以在字典中找到撤回的消息信息
        ????????msgId?=?result[0].childNodes[0].nodeValue
        ????????#?從字典中取出對(duì)應(yīng)消息標(biāo)識(shí)的消息類型
        ????????msg_type?=?dict[msgId]['info_type']
        ????????if?msg_type?==?'Recording':????#?撤回的消息為語(yǔ)音
        ????????????recording_info?=?dict[msgId]['info']??#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
        ????????????info_name?=?dict[msgId]['name']?#?取出消息文件名
        ????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
        ????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
        ????????????recording_info(temp?+?'/'?+?info_name)?#?保存語(yǔ)音
        ????????????#?拼接提示消息
        ????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回了一條語(yǔ)音'
        ????????????itchat.send(send_msg,?'filehelper')?#?將提示消息發(fā)送給文件助手
        ????????????#?發(fā)送保存的語(yǔ)音
        ????????????itchat.send_file(temp?+?'/'?+?info_name,?'filehelper')
        ????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息
        ????????????print("保存語(yǔ)音")
        ????????elif?msg_type?==?'Text':
        ????????????text_info?=?dict[msgId]['info']?#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
        ????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
        ????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
        ????????????#?拼接提示消息
        ????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回內(nèi)容:'?+?text_info
        ????????????#?將提示消息發(fā)送給文件助手
        ????????????itchat.send(send_msg,?'filehelper')
        ????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息
        ????????????print("保存文本")
        ????????elif?msg_type?==?'Picture':
        ????????????picture_info?=?dict[msgId]['info']?#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
        ????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
        ????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
        ????????????info_name?=?dict[msgId]['name']?#?取出文件名
        ????????????picture_info(temp?+?'/'?+?info_name)?#?保存圖片
        ????????????#?拼接提示消息
        ????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回了一張圖片'
        ????????????itchat.send(send_msg,?'filehelper')?#?將圖片發(fā)送給文件助手
        ????????????#?發(fā)送保存的語(yǔ)音
        ????????????itchat.send_file(temp?+?'/'?+?info_name,?'filehelper')
        ????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息?
        ????????????print("保存圖片")


        itchat.run()

        運(yùn)行結(jié)果:

        推薦閱讀

        1. 用Python制作可視化報(bào)表,這也太快了!

        2. 別去外包

        3. 再見(jiàn)!MySQL!

        4. 數(shù)據(jù)分析,YYDS


        您看此文用???分??秒,轉(zhuǎn)發(fā)只需1秒

        瀏覽 46
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无码内射视频 | 公啊~嗯去厨房里做h辣文小说 | 国产白浆一区二区三区 | 日本一区二区三区在线观看 | 美女18免费看 | 91嫩草国产露脸精品国产 | 黑人肏逼网 | 性视频日韩 | 亚洲操逼电影 | 成人毛片片视频 |