Pepper/Nao中级教程:第五章 Pepper/Nao机器人如何调用百度翻译API

时间:2024-03-22 14:16:01

关于Naoqi之家

欢迎访问Naoqi之家,一个提供Pepper/Nao机器人中文开发手册的站点。
http://www.naoqi.net

5.1 目标

我希望让机器人做翻译,但是Naoqi自身是没有翻译API的。
那么我可以调用百度翻译API来实现翻译功能。

5.2 原理

5.2.1 百度翻译API

从百度翻译官方手册,可以查到百度API的调用方式。
http://api.fanyi.baidu.com/api/trans/product/apidoc#languageList

百度API是RESTfulAPI,直接向百度API的URL发出请求,
返回值中就有翻译结果。

例如
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4

返回结果为

{
	"from": "en",
	"to": "zh",
	"trans_result": [{
		"src": "apple",
		"dst": "苹果"
	}]
}

我们在Choregraphe中创建一个Python指令盒子,来调用百度API即可。

5.2.2 举一反三

百度云/阿里云/科大讯飞还有其它很多人工智能API。
调用的原理都是类似的。

5.3 动手实践

5.3.1 申请百度开发者,获取百度翻译APPID和**。

打开http://api.fanyi.baidu.com/api/trans/product/desktop,注册百度开发者。
申请一个通用翻译权限。
Pepper/Nao中级教程:第五章 Pepper/Nao机器人如何调用百度翻译API

5.3.2 在Choregraphe中做出如下指令盒

下面TextEdit盒子中是等待被翻译的英文,Translate是翻译Python指令盒。
Translate指令盒上有两个参数,一个是APPID一个是**。
把你的百度APPID和**填写到这两个参数中。

Pepper/Nao中级教程:第五章 Pepper/Nao机器人如何调用百度翻译API

5.3.3 编写Python代码

在Translate指令盒子中填写以下代码。

Pepper/Nao中级教程:第五章 Pepper/Nao机器人如何调用百度翻译API

代码在页面最后。

5.3.4 见证奇迹

我把翻译结果打印到了日志上。
Pepper/Nao中级教程:第五章 Pepper/Nao机器人如何调用百度翻译API

本章代码

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

import httplib
import md5
import urllib
import random
import json

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        #put initialization code here
        pass

    def onUnload(self):
        #put clean-up code here
        pass

    def onInput_onStart(self, text):
    
        # 从指令盒面板获取appid和secretKey
        appid = self.getParameter("appid")
        secretKey = self.getParameter("password")
        
        # 填写BAIDU翻译API的参数
        httpClient = None
        myurl = '/api/trans/vip/translate'
        q = text
        fromLang = 'en'
        toLang = 'zh'
        salt = random.randint(32768, 65536)
        
        sign = appid+q+str(salt)+secretKey
        m1 = md5.new()
        m1.update(sign)
        sign = m1.hexdigest()
        myurl = myurl+'?appid='+appid+'&q='+urllib.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
         
        try:
            # 访问BAIDU翻译API的URL
            httpClient = httplib.HTTPConnection('api.fanyi.baidu.com')
            httpClient.request('GET', myurl)         
            response = httpClient.getresponse()
         
            # 从返回中获取翻译结果
            translated = response.read()
            obj = json.loads(translated)
            results = obj.get('trans_result')

            if results and len(results) > 0:
                words = results[0].get('dst').encode("utf-8")
                
            # 输出翻译结果
            self.logger.info(words)
            self.onStopped(words)
            
        except Exception, e:
            print e
        finally:
            if httpClient:
                httpClient.close()


    def onInput_onStop(self):
        self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
        self.onStopped() #activate the output of the box

本章全部源程序

https://download.csdn.net/download/weixin_43509791/10772064