Python微信操控itchat的方法
itchat是一個(gè)開(kāi)源的微信個(gè)人號(hào)接口,使用python調(diào)用微信從未如此簡(jiǎn)單。
開(kāi)源地址
https://github.com/littlecodersh/ItChat
文檔:
https://itchat.readthedocs.io/zh/latest/
安裝:
pip3 install itchat
登入與登出
登入并向文件助手發(fā)送一句話,登入時(shí)會(huì)經(jīng)過(guò)掃碼操作,類(lèi)似于電腦微信登入
import itchat #登入并保存登入狀態(tài),實(shí)現(xiàn)第一次運(yùn)行時(shí)掃碼,一定時(shí)間內(nèi)再次運(yùn)行就不用掃碼了,手機(jī)微信上將顯示:網(wǎng)頁(yè)微信已登入..... itchat.auto_login(hotReload=True) #發(fā)送文本數(shù)據(jù)到文件助手 itchat.send("東小東你好123",toUserName="filehelper")
登出:
itchat.logout()
注冊(cè)登入登出的回調(diào)方法
def ldong(): print('微信登入') def edong(): print('微信登出') #登入 itchat.auto_login(hotReload=True,loginCallback=ldong, exitCallback=edong)
命令行二維碼
通過(guò)以下命令可以在登陸的時(shí)候使用命令行顯示二維碼:
itchat.auto_login(enableCmdQR=True)
部分系統(tǒng)可能字幅寬度有出入,可以通過(guò)將enableCmdQR賦值為特定的倍數(shù)進(jìn)行調(diào)整:
#如部分的linux系統(tǒng),塊字符的寬度為一個(gè)字符(正常應(yīng)為兩字符),故賦值為2 itchat.auto_login(enableCmdQR=2)
默認(rèn)控制臺(tái)背景色為暗色(黑色),若背景色為淺色(白色),可以將enableCmdQR賦值為負(fù)值:
itchat.auto_login(enableCmdQR=-1)
可接受監(jiān)聽(tīng)的數(shù)據(jù)類(lèi)型
消息分類(lèi):
圖片或表情(PICTURE)、錄制(RECORDING)、附件(ATTACHMENT)、小視頻(VIDEO)、文本(TEXT),地圖(MAP),名片(CARD),通知(NOTE),分享(SHARING),好友邀請(qǐng)(FRIENDS)、語(yǔ)音(RECORDING)、系統(tǒng)消息(SYSTEM)
獲取消息內(nèi)容:
可以通過(guò)print(msg)方法查看消息里的所有數(shù)據(jù),然后進(jìn)行提取
@itchat.msg_register(itchat.content.TEXT) def text_reply(msg): print(msg)
消息捕獲
針對(duì)朋友的消息捕獲
登入時(shí)不適用于hotReload=True,因?yàn)槎啻芜\(yùn)行會(huì)多次注冊(cè)自動(dòng)回復(fù),比如在沒(méi)有登出的情況下運(yùn)行3次程序,就會(huì)出現(xiàn)1次接受3次發(fā)送的效果
監(jiān)聽(tīng)函數(shù)只有在對(duì)方發(fā)送數(shù)據(jù)時(shí)進(jìn)入
文本
import itchat #自動(dòng)回復(fù) @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): return "東小東回復(fù)數(shù)據(jù):"+msg["Text"] #登入 itchat.auto_login() #保持運(yùn)行 itchat.run()
文件下載
import itchat #PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT # 圖片、錄制、附件、視頻、文本 from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): filedpx="./filex/"+msg["FileName"] #得到文件路徑,目錄需要手動(dòng)創(chuàng)建 msg.download(filedpx) #下載 return "你發(fā)送的文件類(lèi)型"+msg['Type']+" 保存地址為:filex/"+msg.fileName
針對(duì)群聊的自動(dòng)監(jiān)測(cè)
如果想添加針對(duì)群聊的監(jiān)測(cè),則在監(jiān)聽(tīng)函數(shù)加入isGroupChat=True
監(jiān)聽(tīng)函數(shù)只要有數(shù)據(jù)發(fā)送就會(huì)進(jìn)入,包括自己發(fā)送的數(shù)據(jù)
import itchat #只對(duì)群消息有效 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True) def text_reply(msg): if(msg["Text"]=="11"): return "東小東回復(fù)數(shù)據(jù)xx:"+msg["Text"] #只對(duì)個(gè)人用戶有效 @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): return "東小東回復(fù)數(shù)據(jù):"+msg["Text"] #登入 itchat.auto_login() #保持運(yùn)行 itchat.run()
@我信息監(jiān)測(cè)
import itchat #只對(duì)群消息有效 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True) def text_reply(msg): #判斷是否是@本人 if msg["Text"].find("@"+usermsgx["NickName"])==0: return "@"+msg.actualNickName+" 東你發(fā)的信息為:"+msg.text itchat.auto_login()#登入 usermsgx=itchat.search_friends()#得到當(dāng)前用戶的信息 itchat.run()#保持運(yùn)行
針對(duì)所有信息來(lái)源信息監(jiān)聽(tīng)
朋友、群聊、公眾號(hào)
@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=True) def simple_reply(msg): return 'I received: %s' % msg.text 數(shù)據(jù)發(fā)送 return
在接收數(shù)據(jù)函數(shù)里的return “數(shù)據(jù)” 則是自動(dòng)確認(rèn)為回復(fù)當(dāng)前發(fā)送用戶數(shù)據(jù),可以刪除該句,則不進(jìn)行數(shù)據(jù)回復(fù)
itchat.send,可以一次性發(fā)送多條
參數(shù):(內(nèi)容,用戶)
返回值:發(fā)送結(jié)果,是否發(fā)送成功,json數(shù)據(jù)
注意:文件地址不可為中文
內(nèi)容:可為單獨(dú)的字符串內(nèi)容,其他有【@類(lèi)型@地址】,類(lèi)型有圖片(img)、文件(fil)、視頻(vid)
用戶:省略則發(fā)個(gè)自己,不穩(wěn)定,msg['FromUserName']表示指定用戶為觸發(fā)用戶
res=itchat.send('文本信息的發(fā)送......!', toUserName=msg['FromUserName']) res=itchat.send('@img@%s' % './filex/zcy.gif', toUserName=msg['FromUserName']) res=itchat.send('@fil@%s' % './filex/tt.txt', toUserName=msg['FromUserName']) res=itchat.send('@vid@%s' % './filex/videox.mp4', toUserName=msg['FromUserName'])
指定類(lèi)型發(fā)送2
參數(shù):(地址,用戶)
返回值:發(fā)送結(jié)果,是否發(fā)送成功,json數(shù)據(jù)
注意:文件地址不可為中文
bb = itchat.send_msg('文字信息2', toUserName=msg['FromUserName']) bb = itchat.send_image('./filex/zcy.gif', toUserName=msg['FromUserName']) bb = itchat.send_file('./filex/tt.txt', toUserName=msg['FromUserName']) bb = itchat.send_video('./filex/videox.mp4', toUserName=msg['FromUserName']) print("返回值:",bb) msg.user.send()
使用與itchat.send()相同,但是可以已經(jīng)確定toUserName=msg['FromUserName'],不可更換
指定用戶(toUserName):
文件助手(發(fā)送給自己,必備):toUserName="filehelper"
發(fā)送者:toUserName=msg['FromUserName']
例子:
通過(guò)群名向群里發(fā)送內(nèi)容,該微信群需要在運(yùn)行代碼前進(jìn)行手動(dòng)添加到通訊錄
import itchat #登入 itchat.auto_login() chatroomName='傻逼群'#群名 itchat.get_chatrooms(update=True) chatrooms = itchat.search_chatrooms(name=chatroomName) if len(chatrooms)==0 : print('沒(méi)有找到群聊:' + chatroomName) exit(0) else: print(chatrooms[0]['UserName'])#輸出群聊標(biāo)識(shí)符 itchat.send_msg('大家好,這是發(fā)送的內(nèi)容', toUserName=chatrooms[0]['UserName'])#發(fā)送消息 #保持運(yùn)行 itchat.run()
個(gè)人的基本信息
獲取本人信息
usermsgx=itchat.search_friends() print(usermsgx) print(usermsgx["NickName"]) #得到昵稱
獲取所有朋友信息
friendx=itchat.get_friends() print(friendx)
條件獲取朋友或者自己信息
# 獲取特定UserName的用戶信息 itchat.search_friends(userName='@abcdefg1234567') # 獲取任何一項(xiàng)等于name鍵值的用戶 itchat.search_friends(name='littlecodersh') # 獲取分別對(duì)應(yīng)相應(yīng)鍵值的用戶 itchat.search_friends(wechatAccount='littlecodersh') # 三、四項(xiàng)功能可以一同使用 itchat.search_friends(name='LittleCoder機(jī)器人', wechatAccount='littlecodersh')
得到用戶序號(hào)
@itchat.msg_register([TEXT,MAP]) def text_reply(msg): print(msg) print(msg["User"]["Uin"])
更新用戶數(shù)據(jù),通過(guò) UserName ,或者 UserName 列表
memberList = itchat.update_friend('@abcdefg1234567')
注意:
中文文件名文件上傳
Q: 為什么中文的文件沒(méi)有辦法上傳?
A: 這是因?yàn)槭褂胷equests包會(huì)自動(dòng)將中文文件名編碼為服務(wù)器端無(wú)法識(shí)別的格式,所以需要修改requests包或者使用別的方法上傳文件。
最簡(jiǎn)單的方法即將requests包的packages/urlib3中的fields.py中的format_header_param方法改為如下內(nèi)容:
def format_header_param(name, value): if not any(ch in value for ch in '"\\\r\n'): result = '%s="%s"' % (name, value) try: result.encode('ascii') except UnicodeEncodeError: pass else: return result if not six.PY3: # Python 2: value = value.encode('utf-8') value = email.utils.encode_rfc2231(value, 'utf-8') value = '%s="%s"' % (name, value.decode('utf8')) return value
命令行顯示二維碼
Q: 為什么我在設(shè)定了itchat.auto_login()的enableCmdQR
為T(mén)rue后還是沒(méi)有辦法在命令行顯示二維碼?
A: 這是由于沒(méi)有安裝可選的包pillow,可以使用右邊的命令安裝:pip install pillow
綜合:
實(shí)現(xiàn)文本信息的關(guān)聯(lián),及可以實(shí)時(shí)看到所關(guān)聯(lián)的賬號(hào)的聊天信息,當(dāng)發(fā)生聊天數(shù)據(jù)時(shí)會(huì)主動(dòng)將聊天數(shù)據(jù)發(fā)送到主賬號(hào)上
import itchat from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP #只對(duì)個(gè)人用戶有效 @itchat.msg_register([TEXT]) def text_reply(msg): # 查詢數(shù)據(jù)的接收者 touserx="filehelper"#默認(rèn)為文件助手發(fā)送信息 if msg["ToUserName"]!="filehelper":#如果非文件助手信息 touserx=itchat.search_friends(userName=msg["ToUserName"])["NickName"] inuserx = itchat.search_friends(userName=msg["FromUserName"])["NickName"]#查詢數(shù)據(jù)的發(fā)送者 totouserx=itchat.search_friends(name='東里個(gè)咚')[0]["UserName"] #通過(guò)昵稱查詢到username texts=msg.text #得到接收的數(shù)據(jù) itchat.send_msg("【"+thisuserx+"】\n"+inuserx+"-->"+touserx+" :\n"+texts,toUserName=totouserx) #發(fā)送給目標(biāo) #登入 itchat.auto_login() thisuserx=itchat.search_friends()["NickName"] #得到當(dāng)前用戶昵稱 #保持運(yùn)行 itchat.run()
總結(jié)
以上所述是小編給大家介紹的Python微信操控itchat的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- Python使用itchat模塊實(shí)現(xiàn)簡(jiǎn)單的微信控制電腦功能示例
- python基于itchat模塊實(shí)現(xiàn)微信防撤回
- Python微信庫(kù):itchat的用法詳解
- python實(shí)現(xiàn)微信接口(itchat)詳細(xì)介紹
- python3操作微信itchat實(shí)現(xiàn)發(fā)送圖片
- 利用python微信庫(kù)itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
- python使用itchat庫(kù)實(shí)現(xiàn)微信機(jī)器人(好友聊天、群聊天)
- python itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)的示例代碼
- python-itchat 獲取微信群用戶信息的實(shí)例
- python itchat實(shí)現(xiàn)微信好友頭像拼接圖的示例代碼
- Python3 itchat實(shí)現(xiàn)微信定時(shí)發(fā)送群消息的實(shí)例代碼
- Python分析微信好友性別比例和省份城市分布比例的方法示例【基于itchat模塊】
相關(guān)文章
Python Django框架url反向解析實(shí)現(xiàn)動(dòng)態(tài)生成對(duì)應(yīng)的url鏈接示例
這篇文章主要介紹了Python Django框架url反向解析實(shí)現(xiàn)動(dòng)態(tài)生成對(duì)應(yīng)的url鏈接,結(jié)合實(shí)例形式分析了Django框架URL反向解析具體原理與應(yīng)用操作技巧,需要的朋友可以參考下2019-10-10Python開(kāi)發(fā)企業(yè)微信機(jī)器人每天定時(shí)發(fā)消息實(shí)例
這篇文章主要介紹了Python開(kāi)發(fā)企業(yè)微信機(jī)器人每天定時(shí)發(fā)消息實(shí)例,需要的朋友可以參考下2020-03-03關(guān)于Python dict存中文字符dumps()的問(wèn)題
這篇文章主要介紹了關(guān)于Python dict存中文字符dumps()的問(wèn)題,本文給大家分享問(wèn)題及解決方案,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10Python簡(jiǎn)單實(shí)現(xiàn)控制電腦的方法
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)控制電腦的方法,涉及Python基于os及win32api等模塊調(diào)用系統(tǒng)命令操作電腦的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01