基于微信公众平台的Python开发——有道翻译

引言

先上效果图。读者可以关注公众号zakic2015体验该功能,操作示例及效果图如下:


有道翻译API

详细参见官方文档(http://fanyi.youdao.com/openapi?path=data-mode)

数据接口

http://fanyi.youdao.com/openapi.do? keyfrom=<keyfrom>&key=<key> &type=data&doctype=<doctype>&version=1.1 &q=要翻译的文本

版本: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数据结果如下:


Python调用有道翻译API

<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


关注体验


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值