English version
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 u2005 I 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
方法可以搜尋用戶,有四種搜尋方式:
UserName
的使用者資訊name
鍵值的用戶其中三、四項可以一同使用,以下是範例程式:
# 获取自己的用户信息,返回自己的属性字典
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 ( 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
取代。
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的微信個人號機器人,透過實作匿名函數可以輕鬆實現各種自訂的功能
yaphone/itchat4j: 用Java擴展個人微訊號的能力
kanjielu/jeeves: 使用springboot開發的微信機器人
如果有什麼問題或建議都可以在這個Issue和我討論
或者也可以在gitter上交流:
當然也可以加入我們新建的QQ群討論:549762872, 205872856