<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4566字,需瀏覽 10分鐘

           ·

          2021-11-14 11:26


          首先聲明,本文主要就是在試圖復(fù)現(xiàn)這篇文檔中所說(shuō)的:


          https://cloud.tencent.com/developer/article/1701130


          因此要是下文中有什么講的不清楚的地方,大家也可以參考上面這篇文檔。


          一、pip Install itchat

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

          ?? done!

          二、itchat.login()

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

          但沒(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+版微信登錄。


          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)聽一下好友發(fā)送的消息,嘗試在本機(jī)執(zhí)行參考文檔中的這段代碼:

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

          五、def reserver_info(msg)

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

          我本機(jī)上的情況(抄的我好開心啊[捂臉]):

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

          上面完成了對(duì)于文字內(nèi)容的監(jiān)聽,接下來(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)不通滴呀,再一次,手動(dòng)捂臉:[捂臉]

          八、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)寫死了,大家可以自行修改
          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)提示
          def?note_info(msg):
          ????#?監(jiān)聽到好友撤回了一條消息
          ????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é)果:

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新三级av| 操丝袜熟女骚逼 | 日bb免费视频 | 爆乳云宝宝 | 国内女人高潮免费视频 |