摘要:行代碼實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人一寫(xiě)在前面今天下午又學(xué)到了另一種有趣的玩法微信自動(dòng)回復(fù)機(jī)器人。將返回消息返回給微信消息的發(fā)送人。以此實(shí)現(xiàn)將微信個(gè)人號(hào)變身為聊天機(jī)器人。
30行代碼實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人 一、寫(xiě)在前面
今天下午又學(xué)到了itchat另一種有趣的玩法---微信自動(dòng)回復(fù)機(jī)器人。
程序很簡(jiǎn)單僅僅三十行代碼左右,實(shí)現(xiàn)了機(jī)器人自動(dòng)與你的微信好友聊天,下面是我的機(jī)器人小籠包跟自己微信好友聊天的截圖。
二、程序介紹本程序通過(guò)itchat獲取微信的相關(guān)消息,將微信消息傳輸?shù)綑C(jī)器人接口(本程序使用的是圖靈),獲取機(jī)器人的返回消息。將返回消息返回給微信消息的發(fā)送人。以此實(shí)現(xiàn)將微信個(gè)人號(hào)變身為聊天機(jī)器人。
三、具體實(shí)現(xiàn)安裝
itchat的安裝可以通過(guò)下面這行代碼
pip install itchat
登錄
itchat.auto_login() 這種方法將會(huì)通過(guò)微信掃描二維碼登錄,但是這種登錄的方式確實(shí)短時(shí)間的登錄,并不會(huì)保留登錄的狀態(tài),也就是下次登錄時(shí)還是需要掃描二維碼。
# 掃描二維碼登陸微信,實(shí)際上就是通過(guò)網(wǎng)頁(yè)版微信登陸 itchat.auto_login()
如果加上hotReload==True,那么就會(huì)保留登錄的狀態(tài),至少在后面的幾次登錄過(guò)程中不會(huì)再次掃描二維碼,該參數(shù)生成一個(gè)靜態(tài)文件itchat.pkl用于存儲(chǔ)登錄狀態(tài)
itchat.auto_login(hotReload=True)
微信信息的發(fā)送
微信可以發(fā)送各類(lèi)消息,文本、圖片、文件等,下面是具體的方法的介紹。
itchat.send("Message Content", "toUserName")
該發(fā)送消息的函數(shù)需要兩個(gè)參數(shù),消息的內(nèi)容與接受者的UserName,即標(biāo)識(shí)符。
用下面的代碼舉一個(gè)小栗子,實(shí)現(xiàn)向文件助手發(fā)送信息。
import itchat itchat.auto_login(hotReload=True) itchat.send(u"測(cè)試消息發(fā)送", "filehelper")微信消息的獲取
itchat 將根據(jù)接受到的消息類(lèi)型尋找對(duì)應(yīng)的已注冊(cè)的方法。如果一個(gè)消息類(lèi)型沒(méi)有對(duì)應(yīng)的注冊(cè)方法, 該消息將會(huì)被舍棄。在運(yùn)行過(guò)程中也可以動(dòng)態(tài)注冊(cè)方法, 注冊(cè)方式與結(jié)果不變。注冊(cè)方法不帶具體對(duì)象注冊(cè), 將注冊(cè)為普通消息的回復(fù)方法.
import itchat from itchat.content import * @itchat.msg_register(TEXT) #這里的TEXT表示如果有人發(fā)送文本消息,那么就會(huì)調(diào)用下面的方法 def simple_reply(msg): #這個(gè)是向發(fā)送者發(fā)送消息 itchat.send_msg("已經(jīng)收到了文本消息,消息內(nèi)容為%s"%msg["Text"],toUserName=msg["FromUserName"]) return "T reveived: %s" % msg["Text"] #返回的給對(duì)方的消息,msg["Text"]表示消息的內(nèi)容
帶對(duì)象參數(shù)注冊(cè), 對(duì)應(yīng)消息對(duì)象將調(diào)用該方法,其中isFriendChat表示好友之間,isGroupChat表示群聊,isMapChat表示公眾號(hào)。
import itchat from itchat.content import * @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True) def text_reply(msg): msg.user.send("%s : %s" % (mst.type, msg.text))
消息類(lèi)型
向注冊(cè)方法傳入的 msg 包含微信返回的字典的所有內(nèi)容.itchat 增加 Text, Type(也就是參數(shù)) 鍵值, 方便操作。
itcaht.content 中包含所有的消息類(lèi)型參數(shù)。例如圖片、語(yǔ)音、名片、分享等,也對(duì)應(yīng)不同的注冊(cè)參數(shù):
圖片對(duì)應(yīng)
itchat.content.PICTURE
語(yǔ)音對(duì)應(yīng)
itchat.content.RECORDING
名片對(duì)應(yīng)
itchat.content.CARD
其余的可以參考官方API
https://pypi.org/project/itchat/
import itchat @itchat.msg_register(itchat.content.TEXT) def print_content(msg): print(msg["Text"]) itchat.auto_login() itchat.run()
通過(guò)運(yùn)行上面的代碼,實(shí)現(xiàn)基礎(chǔ)的文本信息的接收。
實(shí)現(xiàn)與圖靈機(jī)器人的交互實(shí)現(xiàn)機(jī)器人有很多種方法,最簡(jiǎn)單的就是使用他人提供的接口。這里以圖靈機(jī)器人為例,演示這一功能。圖靈機(jī)器人簡(jiǎn)單而言就是以一定的規(guī)則給圖靈的服務(wù)器發(fā)送數(shù)據(jù)包(包含你對(duì)他說(shuō)的話)圖靈的服務(wù)器會(huì)以一定的規(guī)則給你返回?cái)?shù)據(jù)包(包含他回復(fù)你的話)
你需要一個(gè)Tuling Key來(lái)告訴圖靈服務(wù)器你有權(quán)和他對(duì)話。
18edce3ce905a4c1dbb965e6b35c3834d 2eb720a8970964f3f855d863d24406576 31107d5601866433dba9599fac1bc0083 471f28bf79c820df10d39b4074345ef8c
接下來(lái)需配置圖靈機(jī)器人
{ "key" : "TULING_KEY", "info" : "YOUR_MSG", "userid" : "USERID", }
下面使用圖靈機(jī)器人向好友發(fā)送了hello
#coding=utf8 import requests apiUrl = "http://www.tuling123.com/openapi/api" data = { "key" : "8edce3ce905a4c1dbb965e6b35c3834d", # 如果這個(gè)Tuling Key不能用,那就換一個(gè) "info" : "hello", # 這是我們發(fā)出去的消息 "userid" : "wechat-robot", # 這里你想改什么都可以 } # 我們通過(guò)如下命令發(fā)送一個(gè)post請(qǐng)求 r = requests.post(apiUrl, data=data).json() # 讓我們打印一下返回的值,看一下我們拿到了什么 print(r)
完整代碼:
import requests import itchat KEY = "8edce3ce905a4c1dbb965e6b35c3834d" def get_response(msg): # 這里實(shí)現(xiàn)與圖靈機(jī)器人的交互 # 構(gòu)造了要發(fā)送給服務(wù)器的數(shù)據(jù) apiUrl = "http://www.tuling123.com/openapi/api" data = { "key" : KEY, "info" : msg, "userid" : "wechat-robot", } try: r = requests.post(apiUrl, data=data).json() # 字典的get方法在字典沒(méi)有"text"值的時(shí)候會(huì)返回None而不會(huì)拋出異常 return r.get("text") # 為了防止服務(wù)器沒(méi)有正常響應(yīng)導(dǎo)致程序異常退出,這里用try-except捕獲了異常 # 如果服務(wù)器沒(méi)能正常交互(返回非json或無(wú)法連接),那么就會(huì)進(jìn)入下面的return except: # 將會(huì)返回一個(gè)None return # 這里實(shí)現(xiàn)微信消息的獲取 @itchat.msg_register(itchat.content.TEXT) def tuling_reply(msg): # 為了保證在圖靈Key出現(xiàn)問(wèn)題的時(shí)候仍舊可以回復(fù),這里設(shè)置一個(gè)默認(rèn)回復(fù) defaultReply = "I received: " + msg["Text"] # 如果圖靈Key出現(xiàn)問(wèn)題,那么reply將會(huì)是None reply = get_response(msg["Text"]) # a or b的意思是,如果a有內(nèi)容,那么返回a,否則返回b # 有內(nèi)容一般就是指非空或者非None,你可以用`if a: print("True")`來(lái)測(cè)試 return reply or defaultReply # 為了讓實(shí)驗(yàn)過(guò)程更加方便(修改程序不用多次掃碼),我們使用熱啟動(dòng) itchat.auto_login(hotReload=True) itchat.run()
itchat不僅僅能夠?qū)崿F(xiàn)自動(dòng)回復(fù),還有其他的相關(guān)功能比如群發(fā)助手,好友單刪檢測(cè),獲取微信好友信息等功能,后續(xù)會(huì)慢慢去體驗(yàn)各種玩法。
小提示:不要頻繁操作,否則會(huì)禁止登錄web微信。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43109.html
摘要:是一款開(kāi)源的微信個(gè)人號(hào),進(jìn)行了一系列的封裝,提供簡(jiǎn)單好用的接口,然后開(kāi)發(fā)者可以在其之上進(jìn)行微信機(jī)器人的開(kāi)發(fā)。注意這行代碼實(shí)現(xiàn)了登錄微信個(gè)人號(hào)并打印出所收到的消息。大家可以根據(jù)自己的需要定制出強(qiáng)大的個(gè)人微信號(hào)機(jī)器人。 現(xiàn)在,日常生活已經(jīng)離不開(kāi)微信,本文將會(huì)拋磚引玉演示如何使用wechaty操作微信個(gè)人號(hào)做一些有意思的東西,可以實(shí)現(xiàn)自動(dòng)通過(guò)好友請(qǐng)求、關(guān)鍵詞回復(fù)、自動(dòng)拉群等功能。大大提高了社...
摘要:是一個(gè)開(kāi)源低代碼的機(jī)器學(xué)習(xí)庫(kù),可自動(dòng)執(zhí)行機(jī)器學(xué)習(xí)工作流。它是一種端到端的機(jī)器學(xué)習(xí)和模型管理工具,可以以指數(shù)方式加快實(shí)驗(yàn)周期并提高您的工作效率。與其他開(kāi)源機(jī)器學(xué)習(xí)庫(kù)相比,是一個(gè)替代的低代碼庫(kù),可用于僅用幾行代碼替換數(shù)百行代碼。 ...
摘要:上一篇接入指南這部分是實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)回復(fù),當(dāng)然也是很大一部分功能的實(shí)現(xiàn)基礎(chǔ),這里使用了圖靈機(jī)器人的接口。的微信一年沒(méi)更新了如上圖,發(fā)送消息則會(huì)回復(fù)一個(gè)內(nèi)容一樣的消息,一個(gè)簡(jiǎn)單的自動(dòng)回復(fù)就實(shí)現(xiàn)了。 上一篇:接入指南這部分是實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)回復(fù),當(dāng)然也是很大一部分功能的實(shí)現(xiàn)基礎(chǔ),這里使用了圖靈機(jī)器人的接口。效果圖如下: showImg(https://segmentfault.com/img...
閱讀 1526·2023-04-25 17:41
閱讀 3047·2021-11-22 15:08
閱讀 849·2021-09-29 09:35
閱讀 1612·2021-09-27 13:35
閱讀 3331·2021-08-31 09:44
閱讀 2722·2019-08-30 13:20
閱讀 1944·2019-08-30 13:00
閱讀 2564·2019-08-26 12:12