itchat 是一個開源的微信個人號接口。
近期完成了 py3 與文檔的完善,歡迎各位使用與測試。
使用不到三十行的代碼,你就可以完成一個能夠處理所有信息的微信機器人。
當然,該 api 的使用遠不止一個機器人,更多的功能等着你來發現。
如今微信已經成為了個人社交的很大一部分,希望這個項目能夠幫助你擴展你的個人的微信號、方便自己的生活。
Installation
可以通過本命令安裝 itchat :
pip install itchat
Simple uses
有了 itchat ,如果你想要回復發給自己的文本消息,只需要這樣:
import itchat @itcaht.msg_register(itchat.content.TEXT) def text_reply(msg): itchat.send(msg['Text'], msg['FromUserName']) itchat.auto_login() itchat.run()
一些進階應用可以在 Advanced uses 中看到,或者你也可以閱覽文檔。
Have a try
這是一個基於這一項目的開源小機器人,百聞不如一見,有興趣可以嘗試一下。
Advanced uses
各類型消息的注冊
通過如下代碼,微信已經可以就日常的各種信息進行獲取與回復。
#coding=utf8 import itchat, time from itchat.content import * @itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING]) def text_reply(msg): itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName']) @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg['Text'](msg['FileName']) return '@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName']) @itchat.msg_register(FRIENDS) def add_friend(msg): itchat.add_friend(**msg['Text']) # 該操作會自動將新好友的消息錄入,不需要重載通訊錄 itchat.send_msg('Nice to meet you!', msg['RecommendInfo']['UserName']) @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): if msg['isAt']: itchat.send(u'@%s\u2005I received: %s' % (msg['ActualNickName'], msg['Content']), msg['FromUserName']) itchat.auto_login(True) itchat.run()
命令行二維碼
通過以下命令可以在登陸的時候使用命令行顯示二維碼:
itchat.auto_login(enableCmdQR=True)
部分系統可能字幅寬度有出入,可以通過將 enableCmdQR 賦值為特定的倍數進行調整:
# 如部分的 linux 系統,塊字符的寬度為一個字符(正常應為兩字符),故賦值為 2 itchat.auto_login(enableCmdQR=2)
默認控制台背景色為暗色(黑色),若背景色為淺色(白色),可以將 enableCmdQR 賦值為負值:
itchat.auto_login(enableCmdQR=-1)
退出程序后暫存登陸狀態
通過如下命令登陸,即使程序關閉,一定時間內重新開啟也可以不用重新掃碼。
itchat.auto_login(hotReload=True)
用戶搜索
使用get_friends
方法可以搜索用戶,有四種搜索方式:
- 僅獲取自己的用戶信息
- 獲取特定
UserName
的用戶信息 - 獲取備注、微信號、昵稱中的任何一項等於
name
鍵值的用戶 - 獲取備注、微信號、昵稱分別等於相應鍵值的用戶
其中三、四項可以一同使用,下面是示例程序:
# 獲取自己的用戶信息,返回自己的屬性字典 itchat.get_friends() # 獲取特定 UserName 的用戶信息 itchat.get_friends(userName='@abcdefg1234567') # 獲取任何一項等於 name 鍵值的用戶 itchat.get_friends(name='littlecodersh') # 獲取分別對應相應鍵值的用戶 itchat.get_friends(wechatAccount='littlecodersh') # 三、四項功能可以一同使用 itchat.get_friends(name='LittleCoder 機器人', wechatAccount='littlecodersh')
附件的下載與發送
itchat 的附件下載方法存儲在 msg 的 Text 鍵中。
發送的文件的文件名(圖片給出的默認文件名)都存儲在 msg 的 FileName 鍵中。
下載方法接受一個可用的位置參數(包括文件名),並將文件相應的存儲。
@itchat.msg_register(['Picture', 'Recording', 'Attachment', 'Video']) def download_files(msg): msg['Text'](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['Text']())