Python3调用百度unit的机器人API(适合菜鸡参考)顺便求指导

本人菜鸟,如有错误或不当,欢迎指正。

看大伙做聊天机器都用图灵或者聚合数据的机器,看着确实方便,不过这2个开始收费了。。。

发现百度也有相关的功能,而且可编辑性非常强,重点是完全免费的。就自己做着玩耍下。

我在CSDN上搜到的大部分是直接调用单独的技能,没有直接对机器的人的调用

 上代码

# -*- coding: utf-8 -*-

import requests
from liaotian import read_token
import random
import json


acs_token = read_token()  #这里是百度的access_token,请参考百度的技术文档,没啥难的,照示例抄就行

url = 'https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=' + str(acs_token) #需要进行类型转换下,我读文件读出来的是二进制数据。不然会报错。
    #下面的log_id在真实应用中要自己生成,可是递增的数字
log_id ='7758521'
    #下面的user_id在真实应用中要是自己业务中的真实用户id、设备号、ip地址等,方便在日志分析中分析定位问题
user_id='222333'
    #下面要替换成自己的service_id,是你的机器人ID!!不是技能ID!!!
s_id='xxxx'
#post_data = '{\"bot_session\":\"\",\"log_id\":\"'+log_id+'\",\"request\":{\"bernard_level\":1,\"client_session\":\"{\\\"client_results\\\":\\\"\\\", \\\"candidate_options\\\":[]}\",\"query\":\"' + query + '\",\"query_info\":{\"asr_candidates\":[],\"source\":\"KEYBOARD\",\"type\":\"TEXT\"},\"updates\":\"\",\"user_id\":\"'+user_id+'\"},\"bot_id\":'+bot_id+',\"version\":\"2.0\"}'
#post_data = "{\"version\":\"2.0\",\"service_id\":\""+s_id+"\",\"log_id\":\""+log_id+"\",\"session_id\":\"\",\"request\":{\"user_id\":\""+user_id+"\",\"query\":\"你好\"}}"
post_data = "{\"log_id\":\""+log_id+"\",\"version\":\"2.0\",\"service_id\":\""+s_id+"\",\"session_id\":\"\",\"request\":{\"query\":\"你几岁了\",\"user_id\":\""+user_id+"\"},\"dialog_state\":{\"contexts\":{\"SYS_REMEMBERED_SKILLS\":[\"1057\"]}}}"
#test_data  = json.dumps(post_data)   #这里踩坑,不需要根据headers进行json的转换,直接传就行。不然百度会返回282008错误,也就是说,不能给百度传一个str
#print(type(test_data))
#print(test_data)


headers = {'Content-Type':'application/json'}
r = requests.post(url, data=post_data.encode('utf-8'), headers=headers)
#print(r.content)
if r:
    #print (r.json())                  #用来查看原始的返回数据
    back = r.json()
    #以下是思维过程,根据返回的数据,有三个回答可以选择,做个随机选择。
    #b = back['result']['response_list'][0]['action_list']
    #print(len(b))
    #print(b)
    #c = random.randint(0,len(b))
    #d = len(back['result']['response_list'][0]['action_list'])
    #print(d)
    #print(c)
    #c = random.randint(0,len(['result']['response_list'][0]['action_list']))
    huida = back['result']['response_list'][0]['action_list'][random.randint(0,len(back['result']['response_list'][0]['action_list']))]['say']
    print(huida)

需要注意的是在post_data中,使用+xxx+来引用变量时需要写成"+xxx+"。至于为什么,求大佬指导下。

向大佬请教,在post_data中,使用\"xxx\"的格式,这个是啥意思?

 

重要参考https://www.cnblogs.com/xuyong437/p/11365895.html

你可能感兴趣的:(Python)