ItChat與圖靈機器人的結合


  • 前景:

我在知乎關注一位大佬 名字叫 LittleCoder

 

我是在他開發ItChat包時關注的

 

ItChat已經完成了微信的個人賬號的API接口

已經實現了實時獲取用戶的即時信息並自動化進行回應

 

后來又看到了國內的人工智能機器人團隊TURING ROBOT研發的智能機器人

並提供了給開發者的詳盡的API調用文檔

既是說

個人賬號可以通過ItChat獲取即時消息 並實時通過圖靈機器人的API得到反饋發送出去

再簡單點就是說 使用這兩者 構建了一個微信端的智能機器人

 

  • 環境搭建

  0.首先需要一個個人的微信號、有網的電腦、手機

  1.下載安裝Python

    這里推薦一個發行版的Python 並且全平台支持

    下載地址:https://www.anaconda.com/download

    截至目前 該發行版已經支持了Python3.7 同時也提供2.7版本

    在終端中輸入 python 查看當前python是否安裝成功 有圖下反饋 即是成功安裝(版本號無所謂)

    

 

    2.下載安裝pip

    pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能

    在終端中輸入如下命令來判斷是否有安裝pip 

    若有安裝 則會反饋版本號

    

pip --version

    若沒有安裝 則運行如下命令

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   # 下載安裝腳本
$ sudo python get-pip.py    # 運行安裝腳本

    

    3.下載安裝ItChat

pip install itchat

    若pip與Python安裝沒有錯誤 itchat應該很順利的就下載安裝完畢了

 

    4.獲取圖靈機器人

    在圖靈機器人官網 http://www.tuling123.com 注冊賬號

    

 

     隨便填寫就好了

 

    在如下界面 得到每一個機器人的專屬Key 類似於機器人的身份證

    如圖:
    

    在人物設置中 根據個人情況設置機器人的屬性

 

  • 配置機器人

    在圖靈機器人的接入API文檔中得到相關信息

    https://www.kancloud.cn/turing/www-tuling123-com/718227

    通過分析 得到他的使用方法:

    首先向API發送你的三個信息:你的機器人KEY、向機器人發送的信息、用戶標識。

    將這三個信息打包成一個Post請求發送

    就可以得到機器人的回復

 

    測試代碼:

    text1.py

    

from importlib import reload
import sys
reload(sys)

import requests
import itchat
 

apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
    'key'    : 'key請手動替換', 
    'info'   : 'hello',          # 這是我們發出去的消息
    'userid' : 'wechat-robot',      # 這里你想改什么都可以
}
# 我們通過如下命令發送一個post請求
r = requests.post(apiUrl, data=data).json()

# 讓我們打印一下返回的值,看一下我們拿到了什么
print(r)

    

    在idle中運行:
    

    我們向機器人機器人發送了 hello

    機器人向我們回復了 你好

    證明我們成功實現了與機器人的交流

    下一步 只需要從微信讀取與發送數據就行了

 

    優化部分內容

    text2.py

 1 # coding=utf8
 2 import requests
 3 import itchat
 4 
 5 KEY = '填寫你的key'
 6 
 7 
 8 # 請求圖靈機器人並得到返回消息
 9 def get_response(msg):
10     apiUrl = 'http://www.tuling123.com/openapi/api'
11 
12     data = {
13         'key': KEY,
14         'info': msg,
15         'userid': 'Joeric07'
16     }
17 
18     try:
19         r = requests.post(apiUrl, data=data).json()
20         return r.get('text')
21     except:
22         return

    提供了一個外部接口 用戶輸入的信息保存為msg 一次請求將key、msg、id一同發送 得到文本回復

 

  • 配置微信接口

    微信有一個文件助手 用來給自己收發文件 也可以輸入文字

    嘗試1:我們嘗試使用python來登陸自己的微信 並通過itchat來給自己的文件助手發送一條信息

    text1_send_to_filehelper.py

import itchat

itchat.auto_login()

itchat.send('Hello, filehelper', toUserName='filehelper')

    第二行代碼執行時 會生成一個二維碼 使用手機登錄微信掃描二維碼 即可登錄

    文件助手的id是 filehelper

    運行后 可以在手機查看到 自己已經給文件助手發送了一條消息"Hello,filehelper"

 

    嘗試2:在微信中回復收到的消息

    text2_relpy_msg.py

import itchat

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    return msg.text

itchat.auto_login()
itchat.run()

    以上代碼將登錄者的微信收到的私聊消息原封不動的返回發送回去

    使用修飾器將text_reply(msg)作為參數給itchat.msg_register(itchat.content.TEXT)

    即相當於itchat.msg_register(itchat.content.TEXT(text_reply(msg)))

 

    嘗試3:在微信群聊中回復被@的信息

    text3_reply_@msg.py

import itchat

@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def text_reply(msg):
if msg['isAt']:
reply = msg['Text']
itchat.send(u'@%s\u2005 %s' % (msg['ActualNickName'], reply), msg['FromUserName'])

itchat.auto_login()
itchat.run()

    以上代碼將在微信群聊中 當檢測到登錄者被@ 且@后有信息時 返回信息

    返回信息為 @發送者 信息

    信息為發送者@登錄者后的信息

 

  • 結合
 1 # coding=utf8
 2 import requests
 3 import itchat
 4 
 5 KEY = '在此填入key'
 6 
 7 
 8 # 請求圖靈機器人並得到返回消息
 9 def get_response(msg):
10     apiUrl = 'http://www.tuling123.com/openapi/api'
11 
12     data = {
13         'key': KEY,
14         'info': msg,
15         'userid': 'Joeric07'
16     }
17 
18     try:
19         r = requests.post(apiUrl, data=data).json()
20         return r.get('text')
21     except:
22         return
23 # 微信私聊回復
24 @itchat.msg_register(itchat.content.TEXT)
25 def tuling_reply(msg):
26     default_reply = 'I received: ' + msg['Text']
27     #調用圖靈機器人
28     reply = get_response(msg['Text'])
29     return reply or default_reply
30 
31 # 微信群聊回復
32 @itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
33 def text_reply(msg):
34     if msg['isAt']:
35         # 調用機器人
36         reply = get_response(msg['Text'])
37         itchat.send(u'@%s\u2005: %s' % (msg['ActualNickName'], reply), msg['FromUserName'])
38 
39 itchat.auto_login(hotReload=True)
40 itchat.run()    

    

    ok好了能跑了 而且響應速度還挺快 基本上秒回了

    不過現階段的缺點是 不支持表情 emoj表情會被解讀成無法識別的字典形式的英文

    itchat可以自動根據文件類別做出回復 應該可以本地建立一個萬金油式的表情包庫

    在遇到無法解讀的情況時 隨機發送一個即可

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM