<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>

          當(dāng) Python 遇到微信,會(huì)碰撞出什么?

          共 3271字,需瀏覽 7分鐘

           ·

          2021-01-13 00:56


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

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

          自從微信禁止網(wǎng)頁版登陸之后,itchat 庫實(shí)現(xiàn)的功能也就都不能用了,那現(xiàn)在 Python 還能操作微信嗎?答案是還可以。

          目前有一個(gè)項(xiàng)目?WechatPCAPI 可以對微信進(jìn)行操作,簡單來說它是直接操作 PC 版微信客戶端的,當(dāng)然它有一定不足之處就是:PC 版微信客戶端和 Python 都需要使用指定版本的,本文我們使用的 Python 版本為 3.7.6,微信客戶端使用版本為?2.6.8.52,WechatPCAPI?的 GitHub 地址為:https://github.com/Mocha-L/WechatPCAPI。

          獲取好友列表

          WechatPCAPI 提供了方法 get_friends(),該方法返回信息包括:好友、群和公眾號的列表信息,信息內(nèi)容主要包括:微信號、昵稱和自己設(shè)置的備注。

          我們使用獲取的昵稱做個(gè)簡單的詞云展示,代碼實(shí)現(xiàn)如下所示:

          logging.basicConfig(level=logging.INFO)

          def?on_message(message):
          ?pass

          def?get_friends():
          ?#?初始化微信實(shí)例
          ?wx_inst?=?WechatPCAPI(on_message=on_message,?log=logging)
          ?#?啟動(dòng)微信
          ?wx_inst.start_wechat(block=True)
          ?#?等待登陸成功,此時(shí)需要人為掃碼登錄微信
          ?while?not?wx_inst.get_myself():
          ??time.sleep(5)
          ?print('登陸成功')
          ?nicknames?=?[]
          ?#?排除的詞
          ?remove?=?['還是',?'不會(huì)',?'一些',?'所以',?'果然',
          ?????'起來',?'東西',?'為什么',?'真的',?'這么',
          ?????'但是',?'怎么',?'還是',?'時(shí)候',?'一個(gè)',
          ?????'什么',?'自己',?'一切',?'樣子',?'一樣',
          ?????'沒有',?'不是',?'一種',?'這個(gè)',?'為了'
          ???]
          ?for?key,?value?in?wx_inst.get_friends().items():
          ??if?key?in?['fmessage',?'floatbottle',?'filehelper']?or?'chatroom'?in?key:
          ???continue
          ??nicknames.append(value['wx_nickname'])
          ?words?=?[]
          ?for?text?in?nicknames:
          ??if?not?text:
          ???continue
          ??for?t?in?jieba.cut(text):
          ???if?t?in?remove:
          ????continue
          ???words.append(t)
          ?global?word_cloud
          ?#?用逗號隔開詞語
          ?word_cloud?=?','.join(words)

          def?nk_cloud():
          ????#?打開詞云背景圖
          ????cloud_mask?=?np.array(Image.open('bg.png'))
          ????#?定義詞云的一些屬性
          ????wc?=?WordCloud(
          ????????#?背景圖分割顏色為白色
          ????????background_color='white',
          ????????#?背景圖樣
          ????????mask=cloud_mask,
          ????????#?顯示最大詞數(shù)
          ????????max_words=300,
          ????????#?顯示中文
          ????????font_path='./fonts/simkai.ttf',
          ????????#?最大尺寸
          ????????max_font_size=70
          ????)
          ????global?word_cloud
          ????#?詞云函數(shù)
          ????x?=?wc.generate(word_cloud)
          ????#?生成詞云圖片
          ????image?=?x.to_image()
          ????#?展示詞云圖片
          ????image.show()
          ????#?保存詞云圖片
          ????wc.to_file('nk.png')

          看一下效果:

          消息防撤回

          我們在使用微信和好友聊天時(shí),對方有時(shí)會(huì)有撤回消息的情況,正常情況下,我們是不知道好友撤回的消息是什么的,通過 WechatPCAPI 就可以實(shí)現(xiàn)消息防撤回的功能。

          我們知道通常撤回的消息是點(diǎn)擊撤回操作前一步發(fā)送的內(nèi)容,當(dāng)然也可能撤回的是前兩步、三步 ... 的消息,這里我們只對撤回前一步的消息做處理,基本思路是:我們將撤回前一步發(fā)送的消息存一下,當(dāng)對方點(diǎn)擊撤回操作時(shí),我們再將前一步的消息再次返回給自己。

          下面看一下實(shí)現(xiàn)代碼:

          logging.basicConfig(level=logging.INFO)
          queue_recved_event?=?Queue()

          def?on_message(msg):
          ????queue_recved_event.put(msg)

          def?login():
          ????pre_msg?=?''
          ????#?初始化微信實(shí)例
          ????wx_inst?=?WechatPCAPI(on_message=on_message,?log=logging)
          ????#?啟動(dòng)微信
          ????wx_inst.start_wechat(block=True)
          ????#?等待登陸成功,此時(shí)需要人為掃碼登錄微信
          ????while?not?wx_inst.get_myself():
          ????????time.sleep(5)
          ????print('登陸成功')
          ????while?True:
          ????????msg?=?queue_recved_event.get()
          ????????data?=?msg.get('data')
          ????????sendinfo?=?data.get('sendinfo')
          ????????data_type?=?str(data.get('data_type'))
          ????????msgcontent?=?str(data.get('msgcontent'))
          ????????is_recv?=?data.get('is_recv')
          ????????print(msg)
          ????????if?data_type?==?'1'?and?'revokemsg'?not?in?msgcontent:
          ????????????pre_msg?=?msgcontent
          ????????if?sendinfo?is?not?None?and?'revokemsg'?in?msgcontent:
          ????????????user?=?str(sendinfo.get('wx_id_search'))
          ????????????recall?=?'撤回的消息:'?+?pre_msg
          ????????????wx_inst.send_text(to_user=user,?msg=recall)

          看一下操作效果:

          源碼和微信安裝包獲取

          鏈接:https://pan.baidu.com/s/19VGuEqByiK0V0tuE-jQPZQ

          提取碼:lad2

          見面禮


          碼加我微信備注「三劍客」送你上圖三本Python入門電子書

          推薦閱讀


          1. 【微信紅包封面領(lǐng)取】VIVO劉雯、金典~速度!

          2. 外賣小哥凌晨送餐被小區(qū)保安打死,都是底層為什么下手這么狠!

          3. 又一起“刪庫”:鏈家程序員怒刪公司 9TB 數(shù)據(jù),被判 7 年!

          4. 中國編程第一人,一人抵一城!


          5. 點(diǎn)分享
            點(diǎn)收藏
            點(diǎn)點(diǎn)贊
            點(diǎn)在看

          瀏覽 49
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  日韩人妻一区二区三区 | 91三级在线 | 天天色av | 日韩视频中文字幕在线 | 超碰在线手机 |