1. 程式人生 > >python --itchat實現呼叫微信介面的方法

python --itchat實現呼叫微信介面的方法

1.在樹莓派中輸入sudo pip3 install itchat 安裝itchat。
2.登入微信 itchat.auto_login() 這種方法將會通過微信掃描二維碼登入,但是這種登入的方式確實短時間的登入,並不會保留登入的狀態,也就是下次登入時還是需要掃描二維碼,如果加上hotReload==True,那麼就會保留登入的狀態,至少在後面的幾次登入過程中不會再次掃描二維碼,該引數生成一個靜態檔案itchat.pkl用於儲存登入狀態

3.itchat.auto_login(enableCmdQR=True) 此方法為開啟命令列的二維碼登陸方法。

不過在這之前一定要安裝pillow,可以輸入

pip3 install pillow 進行安裝。

 

通過以下命令可以在登陸的時候使用命令列顯示二維碼:

itchat.auto_login(enableCmdQR=True)

部分系統可能字幅寬度有出入,可以通過將enableCmdQR賦值為特定的倍數進行調整:

# 如部分的linux系統,塊字元的寬度為一個字元(正常應為兩字元),故賦值為2
itchat.auto_login(enableCmdQR=2)

預設控制檯背景色為暗色(黑色),若背景色為淺色(白色),可以將enableCmdQR賦值為負值:

itchat.auto_login(enableCmdQR=-1)

 

簡單入門例項

有了itchat,如果你想要給檔案傳輸助手發一條資訊,只需要這樣:

import itchat

itchat.auto_login()

itchat.send('Hello, filehelper', toUserName='filehelper')

輸入 python3 test.py ,執行後,掃描二維碼登陸,微信就會收到檔案助手的訊息。

 

各型別訊息的註冊

通過如下程式碼,微信已經可以就日常的各種資訊進行獲取與回覆。

import itchat, time
from itchat.content import *

@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
    msg.user.send('%s: %s' % (msg.type, msg.text))

@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    msg.download(msg.fileName)
    typeSymbol = {
        PICTURE: 'img',
        VIDEO: 'vid', }.get(msg.type, 'fil')
    return '@%
[email protected]
%s' % (typeSymbol, msg.fileName) @itchat.msg_register(FRIENDS) def add_friend(msg): msg.user.verify() msg.user.send('Nice to meet you!') @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): if msg.isAt: msg.user.send(u'@%s\u2005I received: %s' % ( msg.actualNickName, msg.text)) itchat.auto_login(True) itchat.run(True)

退出程式後暫存登陸狀態

通過如下命令登陸,即使程式關閉,一定時間內重新開啟也可以不用重新掃碼。

itchat.auto_login(hotReload=True)

使用者搜尋

使用search_friends方法可以搜尋使用者,有四種搜尋方式:

  1. 僅獲取自己的使用者資訊
  2. 獲取特定UserName的使用者資訊
  3. 獲取備註、微訊號、暱稱中的任何一項等於name鍵值的使用者
  4. 獲取備註、微訊號、暱稱分別等於相應鍵值的使用者

其中三、四項可以一同使用,下面是示例程式:

# 獲取自己的使用者資訊,返回自己的屬性字典
itchat.search_friends()
# 獲取特定UserName的使用者資訊
itchat.search_friends(userName='@abcdefg1234567')
# 獲取任何一項等於name鍵值的使用者
itchat.search_friends(name='littlecodersh')
# 獲取分別對應相應鍵值的使用者
itchat.search_friends(wechatAccount='littlecodersh')
# 三、四項功能可以一同使用
itchat.search_friends(name='LittleCoder機器人', wechatAccount='littlecodersh')

關於公眾號、群聊的獲取與搜尋在文件中有更加詳細的介紹。

附件的下載與傳送

itchat的附件下載方法儲存在msg的Text鍵中。

傳送的檔案的檔名(圖片給出的預設檔名)都儲存在msg的FileName鍵中。

下載方法接受一個可用的位置引數(包括檔名),並將檔案相應的儲存。

@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    msg.download(msg.fileName)
    itchat.send('@%[email protected]%s' % (
        'img' if msg['Type'] == 'Picture' else 'fil', msg['FileName']),
        msg['FromUserName'])
    return '%s received' % msg['Type']

如果你不需要下載到本地,僅想要讀取二進位制串進行進一步處理可以不傳入引數,方法將會返回圖片的二進位制串。

@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    with open(msg.fileName, 'wb') as f:
        f.write(msg.download())

使用者多開

使用如下命令可以完成多開的操作:

import itchat

newInstance = itchat.new_instance()
newInstance.auto_login(hotReload=True, statusStorageDir='newInstance.pkl')

@newInstance.msg_register(itchat.content.TEXT)
def reply(msg):
    return msg.text

newInstance.run()

退出及登陸完成後呼叫特定方法

登陸完成後的方法需要賦值在loginCallback中。

而退出後的方法需要賦值在exitCallback中。

import time

import itchat

def lc():
    print('finish login')
def ec():
    print('exit')

itchat.auto_login(loginCallback=lc, exitCallback=ec)
time.sleep(3)
itchat.logout()

若不設定loginCallback的值,則將會自動刪除二維碼圖片並清空命令列顯示。

常見問題與解答

Q: 如何通過這個包將自己的微訊號變為控制器?

A: 有兩種方式:傳送、接受自己UserName的訊息;傳送接收檔案傳輸助手(filehelper)的訊息

Q: 為什麼我傳送資訊的時候部分資訊沒有成功發出來?

A: 有些賬號是天生無法給自己的賬號傳送資訊的,建議使用filehelper代替。