引言
先上效果图。读者可以关注公众号zakic2015体验该功能,操作示例及效果图如下:
有道翻译API
详细参见官方文档(http://fanyi.youdao.com/openapi?path=data-mode)
数据接口
版本:1.1,请求方式:get,编码方式:utf-8
主要功能:中英互译,同时获得有道翻译结果和有道词典结果(可能没有)
参数说明:
type - 返回结果的类型,固定为data
doctype - 返回结果的数据格式,xml或json或jsonp
version - 版本,当前最新版本为1.1
q - 要翻译的文本,必须是UTF-8编码,字符长度不能超过200个字符,需要进行urlencode编码
only - 可选参数,dict表示只获取词典数据,translate表示只获取翻译数据,默认为都获取
注: 词典结果只支持中英互译,翻译结果支持英日韩法俄西到中文的翻译以及中文到英语的翻译
errorCode:
0 - 正常
20 - 要翻译的文本过长
30 - 无法进行有效的翻译
40 - 不支持的语言类型
50 - 无效的key
60 - 无词典结果,仅在获取词典结果生效
搜索返回json数据结果如下:
<span style="font-size:18px;"># -*- coding: utf-8 -*-
import urllib2
import json
class YouDao:
def trans(self,word):
baseurl = r'http://fanyi.youdao.com/openapi.do?keyfrom=yourAppName&key=yourAppKey&type=data&doctype=json&version=1.1&q='
qword = urllib2.quote(word)
url = baseurl + qword
resp = urllib2.urlopen(url)
fanyi = json.loads(resp.read())
if fanyi['errorCode'] == 0:
if 'basic' in fanyi.keys():
trans = u'%s: %s\n【基本释义】\n%s\n【网络释义】\n%s'%(fanyi['query'],''.join(fanyi['translation']),' '.join(fanyi['basic']['explains']),' '.join(fanyi['web'][0]['value']))
return trans
else:
trans = u'%s:\n【基本释义】\n%s'%(fanyi['query'],''.join(fanyi['translation']))
return trans
elif fanyi['errorCode'] == 20:
return u'Sorry,要翻译的文本过长/::~'
elif fanyi['errorCode'] == 30:
return u'Sorry,无法进行有效的翻译/::~'
elif fanyi['errorCode'] == 40:
return u'Sorry,不支持的语言类型/::~'
elif fanyi['errorCode'] == 60:
return u'Sorry,无词典结果,仅在获取词典结果生效/::~'
elif fanyi['errorCode'] == 50:
return u'Sorry,无效的key/::~'
else:
return u'Sorry,您输入的单词【%s】有误/::~'% word</span>
微信公众平台回复文本信息的reply_text.xml如下:
$def with (toUser,fromUser,createTime,content)
<xml>
<ToUserName><![CDATA[$toUser]]></ToUserName>
<FromUserName><![CDATA[$fromUser]]></FromUserName>
<CreateTime>$createTime</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content>$content</Content>
</xml>
从上面的json数据中提取并返回最终文本信息,结果如下:
</pre><pre>
if content.startswith(u'翻译'):
content = content[2:].encode('UTF-8')
Trans = YouDao()
Nword = Trans.trans(content)
return self.render.reply_text(fromUser,toUser,int(time.time()),Nword)
测试用例
{"query":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","errorCode":20}
{"query":"【】","errorCode":60}
http://my.oschina.net/yangyanxing/blog/194136
关注体验