今天寫個(gè)好玩的~圖靈機(jī)器人
這個(gè)參考了http://www.lxweimin.com/p/5d4de51f5375
這篇文章
用的庫(kù)是之前爬取微信好友頭像的那個(gè)庫(kù)itchat,這個(gè)庫(kù)可以很方便的獲取微信里的一些信息
首先要到圖靈機(jī)器人網(wǎng)站去注冊(cè)開(kāi)通一個(gè)機(jī)器人,圖靈機(jī)器人也是可以直接接入微信公眾號(hào)的
圖靈機(jī)器人接入微信其實(shí)就是我們發(fā)送一個(gè)請(qǐng)求到圖靈機(jī)器人,然后返回給我們一個(gè)信息給我,調(diào)用接口地址是它官網(wǎng)的API
http://doc.tuling123.com/openapi2/263611
就是發(fā)送一個(gè)post請(qǐng)求而已,這個(gè)是2.0版本的接口,1.0是get請(qǐng)求的
參考API可以知道請(qǐng)求數(shù)據(jù)格式:
{
"reqType":1,
"perception": {
"inputText": {
"text": "附近的酒店"
},
"inputImage": {
"url": "imageUrl"
},
"selfInfo": {
"location": {
"city": "北京",
"latitude": "39.45492",
"longitude": "119.239293",
"nearest_poi_name": "上地環(huán)島南",
"province": "北京",
"street": "信息路"
}
}
},
"userInfo": {
"apiKey": "",
"userId": ""
}
}
如果只要發(fā)送文字,只要perception中的inputText和 userInfo就歐科了
apikey是在圖靈機(jī)器人官網(wǎng)獲取,userId自己定義一個(gè)即可
userId = '123456'
inputText = {'text': text}
key = 'your apiKey'
userInfo = {'apiKey': key, 'userId': userId}
perception = {'inputText': inputText}
data = {'perception': perception, 'userInfo': userInfo}
然后用requests發(fā)送一個(gè)post請(qǐng)求
url = 'http://openapi.tuling123.com/openapi/api/v2'
response = requests.post(url=url, data=json.dumps(data))
response.encoding = 'utf-8'
result = response.json()
answer = result['results'][0]['values']['text']
這個(gè)answer就是機(jī)器人返回給我們的
然后我們用itchat發(fā)送到微信好友,就可以實(shí)現(xiàn)和機(jī)器人聊天了
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
myself = itchat.get_friends(update=True)[0]['NickName']
content = msg['Content']
friend = msg['User']['NickName']
answer = get_answer(msg['Text'])
itchat.send(answer, msg['FromUserName'])
如果發(fā)送群里,也差不多,這需要換成小組的ID
@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def group_text_reply(msg):
group_name = msg['User']['NickName'] # 獲取群聊名稱
group = ['群聊測(cè)試', 'itchat'] # 設(shè)置聊天的群
group_info = itchat.search_chatrooms(name=name)
item = group_info[0]['UserName']
if group_name in group:
itchat.send(get_answer(msg['Text']), item)
如下是兩個(gè)機(jī)器人間的對(duì)話 哈哈哈
image.png
最后慣例,貼下完整代碼
#!usr/bin/env python3
# -*- coding:utf-8-*-
import itchat
import json
import requests
def get_data(text):
userId = '123456'
inputText = {'text': text}
key = 'your apiKey'
userInfo = {'apiKey': key, 'userId': userId}
perception = {'inputText': inputText}
data = {'perception': perception, 'userInfo': userInfo}
return data
def get_answer(text):
data = get_data(text)
url = 'http://openapi.tuling123.com/openapi/api/v2'
response = requests.post(url=url, data=json.dumps(data))
response.encoding = 'utf-8'
result = response.json()
answer = result['results'][0]['values']['text']
return answer
# 回復(fù)好友
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
myself = itchat.get_friends(update=True)[0]['NickName']
content = msg['Content']
friend = msg['User']['NickName']
# 給特定的人的回復(fù),并且自己發(fā)的 不回復(fù)
if friend != myself and friend!= 'FRIEND':
print('%s: %s' % (friend, content))
answer = get_answer(msg['Text'])
itchat.send(answer, msg['FromUserName'])
print('我:%s' % answer)
else:
itchat.send('你是豬', msg['FromUserName'])
# 獲得群聊ID
def group_id(name):
df = itchat.search_chatrooms(name=name)
return df[0]['UserName']
# 發(fā)送群聊
@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def group_text_reply(msg):
group_name = msg['User']['NickName']
group = ['群聊測(cè)試', 'itchat']
igroup_info = itchat.search_chatrooms(name=name)
item = group_info[0]['UserName']
if group_name in group:
itchat.send(get_answer(msg['Text']), item)
itchat.auto_login(hotReload=True)
itchat.run()