python庫itchat介紹(自動登錄微信,自動回覆消息)

itchat

itchat是一個開源的微信個人號接口,使用python調用微信從未如此簡單。

使用不到三十行的代碼,你就可以完成一個能夠處理所有信息的微信機器人。

當然,該api的使用遠不止一個機器人,更多的功能等着你來發現,比如這些

該接口與公衆號接口itchatmp共享類似的操作方式,學習一次掌握兩個工具。

如今微信已經成爲了個人社交的很大一部分,希望這個項目能夠幫助你擴展你的個人的微信號、方便自己的生活。

安裝

可以通過本命令安裝itchat:

pip install itchat

簡單入門實例

有了itchat,如果你想要給文件傳輸助手發一條信息,只需要這樣:

import itchat

itchat.auto_login()

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

如果你想要回復發給自己的文本消息,只需要這樣:

import itchat

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

itchat.auto_login()
itchat.run()

一些進階應用可以在下面的開源機器人的源碼和進階應用中看到,或者你也可以閱覽文檔

進階應用

特殊的字典使用方式

通過打印itchat的用戶以及註冊消息的參數,可以發現這些值都是字典。

但實際上itchat精心構造了相應的消息、用戶、羣聊、公衆號類。

其所有的鍵值都可以通過這一方式訪問:

@itchat.msg_register(TEXT)
def _(msg):
    # equals to print(msg['FromUserName'])
    print(msg.fromUserName)

屬性名爲鍵值首字母小寫後的內容。

author = itchat.search_friends(nickName='LittleCoder')[0]
author.send('greeting, littlecoder!')

各類型消息的註冊

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

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 '@%s@%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(enableCmdQR=True)

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

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

默認控制檯背景色爲暗色(黑色),若背景色爲淺色(白色),可以將enableCmdQR賦值爲負值:

itchat.auto_login(enableCmdQR=-1)

退出程序後暫存登陸狀態

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

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('@%s@%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(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: 這是由於requests的編碼問題導致的。若需要支持中文文件傳輸,將fields.py(py3版本見這裏)文件放入requests包的packages/urllib3下即可

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

A: 有兩種方式:發送、接受自己UserName的消息;發送接收文件傳輸助手(filehelper)的消息

Q: 爲什麼我發送信息的時候部分信息沒有成功發出來?

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

作者

LittleCoder: 構架及維護Python2 Python3版本。

tempdban: 協議、構架及日常維護。

Chyroc: 完成第一版本的Python3構架。

類似項目

youfou/wxpy: 優秀的api包裝和配套插件,微信機器人/優雅的微信個人號API

liuwons/wxBot: 類似的基於Python的微信機器人

zixia/wechaty: 基於Javascript(ES6)的微信個人賬號機器人NodeJS框架/庫

sjdy521/Mojo-Weixin: 使用Perl語言編寫的微信客戶端框架,可通過插件提供基於HTTP協議的api接口供其他語言調用

HanSon/vbot: 基於PHP7的微信個人號機器人,通過實現匿名函數可以方便地實現各種自定義的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章