itchat初級用法整合
-
- 登入
- 保持運作狀态
- 登出
- 發送消息
- 監聽消息
- 接收消息
- 好友資訊相關
- 群聊相關
登入
itchat.auto_login(hotReload=True,enableCmdQR=True,loginCallback=after_login,exitCallback=after_logout)
使用這個指令可以通過掃描二維碼登陸微信,hotReload=True可以省略,不過這樣一來每次程式執行時都要掃一次碼,有了hotReload=True會生成一個itchat.pkl的檔案儲存登入狀态,可以讓後面的幾次登入不需要再掃碼。
enableCmdQR=True這個參數可以讓二維碼在指令行顯示,可能會由于二維碼過大,指令行顯示不完整,是以可以把後面的True改為顯示的倍數。可省略
loginCallback=函數名,exitCallback=函數名:這兩個參數是在微信登入和退出時分别執行其對應的函數。可省略。
保持運作狀态
itchat.run()
保持運作狀态,不會因為指令執行完畢就結束
登出
itchat,.logout()
強制性退出微信。
發送消息
send
send("Message", toUserName=“UserName”)
第一個參數可以發送文本消息,圖檔(img),視訊(vid)和檔案(fil)。文本消息隻要直接編寫文字内容在引号中就可以了,其他的要保證格式“@type@%s”%‘path’,具體示例如下
import itchat
itchat.auto_login()
itchat.send("HelloWorld!")
ithcat.send("@fil@%s" % '/tmp/test.text')
ithcat.send("@img@%s" % '/tmp/test.png')
ithcat.send("@vid@%s" % '/tmp/test.mkv')
第二個參數是用來确定發送的對象,如果省去或者是None就是發送給自己,如果是filehelper就是發送給檔案助手。
send_msg
除了上面這種方法,還有另一種方法可以完成同樣的效果,下面我們來看一下。
send_msg('Text Message', toUserName=None)
發送文字資訊的方法和上面那種幾乎沒什麼差異,不過一開始就确定了發送到資訊類型。傳回值為True或者False傳回值為True或者False.
import itchat
itchat.auto_login()
itchat.send_msg("helloworld.)
send_file
send_file(“fileDir”,
toUserName=None)
fileDir是檔案路徑, 當檔案不存在時, 将列印無此檔案的提醒,傳回值為True或者False。
import itchat
itchat.auto_login()
itchat.send_file("/tmp/test.txt")
send_image
send_image(“fileDir”,toUserName=None)
參數同上
import itchat
itchat.auto_login()itchat.send_img("/tmp/test.jpg")
send_video
send_video(fileDir,toUserName=None)
參數同上
import itchat
itchat.auto_login()
itchat.send_video("/tmp/test.mp4")
監聽消息
除了主動發送資訊外,還可以對資訊進行監控,支援對多種類型的資訊進行監控。
另外,有多個注冊資訊監聽,後注冊的資訊優先級高于先注冊資訊,帶參數資訊高于不帶參數資訊。
資訊類型 | 解釋 |
---|---|
itchat.content.TEXT | 文本内容 |
itchat.content.MAP | 位置文本 |
itchat.content.Card | 名片 |
itchat.content.Note | 通知文本 |
itchat.content.Sharing | 分享名稱 |
itchat.content.RECORDING | 錄音 |
itchat.PICTURE | 圖檔/表情 |
itchat.content.VOICE | 錄音 |
itchat.content.ATTACHMENT | 附件 |
itchat.content.VIDEO | 短視訊 |
itchat.content.FRIENDS | 好友邀請 |
itchat.content.SYSTEM | 系統資訊 |
接收消息
接收消息的方法一般用來作為一個函數的裝飾器,當接收到消息以後執行函數中的指令進行回應。
import itchat
@itchat.msg_register(itchat.content.TEXT)
def reply_msg(msg):
if msg['Content'] == u'你好':
itchat.send_msg(msg['User']['NickName'] + "你好啊!", msg['FromUserName'])
if __name__ == '__main__':
itchat.auto_login()
itchat.run()
好友資訊相關
search_friends
search_friends()
括号裡可以填屬性字典相關名稱來擷取指定好友的詳細資訊,如:名稱(name),微信号(wechatAcount),昵稱和微信号的查找可以同時使用。一般直接填寫名稱或者備注名,會優先查找NickName和RemarkName,可以直接查找到,這也是比較友善的方法
import itchat
itchat.auto_login(hotReload=True)
users = itchat.search_friends('大哥')
print(users)
userName=users[0]['UserName']
print(userName)
itchat.send_msg('你好啊',toUserName=userName)
群聊相關
監聽群聊資訊
@itchat.msg_register(itchat.content.TEXT,isGroupChat=True)
def reply_msg(msg):
print("收到一條群資訊:", msg['ActualNickName'], msg['Content'])
利用isGroupChat=True 來判定是否是群消息,ActualNickName是發送者昵稱,Content是發送的文本資訊内容。另外,群聊除了通過群名搜尋外還可以通過username來查找,或者兩者搭配使用; 在msg裡有一個isAt字段,可用于判斷是否被人@了。
查找群
def after_login():
print(itchat.get_chatrooms()) #獲得所有群資訊
time.sleep(10)
chat_rooms = itchat.search_chatrooms(name='群名')#根據群名查找群
if len(chat_rooms) > 0:
itchat.send_msg('測試', chat_rooms[0]['UserName'])
公衆号相關
大緻上和群聊差不多,搜尋公衆号方法search_mps,監聽公衆号資訊添加isMpChat=True元素
import itchat
@itchat.msg_register(itchat.content.TEXT,isMpChat=True)
def reply_msg(msg):
print("收到一條公衆号資訊:",msg['User']['NickName'], msg['Content'])
def login_after():
mps = itchat.search_mps(name='公衆号名')
if len(mps) > 0:
print(mps)
itchat.send_msg('人生苦短',toUserName=mps[0]['UserName'])
if __name__ == '__main__':
itchat.auto_login(loginCallback=login_after)
itchat.run()