使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译

1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=data-mode

2.根据有道的api使用说明

数据接口
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  -  要翻译的文本,不能超过 200 个字符,需要使用utf - 8 编码
errorCode:
  0  -  正常
  20  -  要翻译的文本过长
  30  -  无法进行有效的翻译
  40  -  不支持的语言类型
  50  -  无效的key

 

3.知道怎么调用后后面的就简单了,加上你的要查询的词,可以是中文,也可以是英文,我建议返回格式doctype是json的,因为和xml相比使用更简单,更容易理解,关于如何使用json解析,可以看我以前写的博文,python解析json,我们来查看一下有道翻译返回的json的基本格式

成功返回翻译结果都会有一个叫basic的key的,于是我们接下来写一个fanyi的函数,之前在头部记得import json

1
2
3
4
5
6
7
8
9
10
11
12
13
def  youdao(word):
     qword  =  urllib2.quote(word)
     url  =  baseurl + qword
     resp  =  urllib2.urlopen(url)
     fanyi  =  json.loads(resp.read())
     ##根据json是否返回一个叫“basic”的key来判断是否翻译成功
     if  'basic'  in  fanyi.keys():
         ##下面是你自已来组织格式
         trans  =  u '%s:\n%s\n%s\n网络释义:\n%s' % (fanyi[ 'query' ],' '.join(fanyi[' translation ']),' '.join(fanyi[' basic '][' explains ']),' '.join(fanyi[' web '][0][' value']))
         return  trans
     else :
         return  u '对不起,您输入的单词%s无法翻译,请检查拼写' %  word

 


4.我们将之前得到的content进行翻译操作

1
2
Nword  =  youdao(content)        
return  self .render.reply_text(fromUser,toUser, int (time.time()),Nword)

 

5.将之前的鹦鹉学舌的return删除掉,下面在微信给你的公众账号发几个词看看能不能得到翻译结果

6.兴奋了一把之后,发现只有英文可以翻译成中文,但中文却不能翻译成英文,初步推测是破编码搞的,因为这个我搁浅了一段时间,今天终于搞定了,将得到的content进行一下是否是unicode的判断,如果是unicode则对其进行utf-8转码

1
2
3
4
5
if  type (content).__name__  = =  "unicode" :
             content  =  content.encode( 'UTF-8' )
             
         Nword  =  youdao(content)        
         return  self .render.reply_text(fromUser,toUser, int (time.time()),Nword)

 

关于python中的各种编码的头疼问题可以google,推荐几篇文章

python 编码转换

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

Python Unicode与中文处理

7.以后继续更加好玩的功能

 

 

1月23日更新,有网友反馈,说只判断basic是否在key中,会导致很多有道本来是翻译成功了,但我的程序没有返回值,其实查看有道翻译的api,它是根据errorCode来判断是否返回成功的,如果是0则是返回正常,还有一些返回值,那么我将我的程序进行改进,选判断errorCode,然后再判断translation

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def  youdao(word):
     qword  =  urllib2.quote(word)
     baseurl  = r 'http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q='
     url  =  baseurl + qword
     resp  =  urllib2.urlopen(url)
     fanyi  =  json.loads(resp.read())
     if  fanyi[ 'errorCode' = =  0 :        
         if  'basic'  in  fanyi.keys():
             trans  =  u '%s:\n%s\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基本翻译:%s\n' % (fanyi[ 'query' ],' '.join(fanyi[' translation']))        
             return  trans
     elif  fanyi[ 'errorCode' = =  20 :
         return  u '对不起,要翻译的文本过长'
     elif  fanyi[ 'errorCode' = =  30 :
         return  u '对不起,无法进行有效的翻译'
     elif  fanyi[ 'errorCode' = =  40 :
         return  u '对不起,不支持的语言类型'
     else :
         return  u '对不起,您输入的单词%s无法翻译,请检查拼写' %  word

 

这样可以翻译一些不长的句子,而且还可以翻译韩语,日语等,但问题也出来了,即使输入乱七八糟的内容lkajfladfaldfladkf也会给你返回个相同的内容,内容过长的话,有道和微信的定义貌似不一样,有道可以翻译,但是微信不一定可以返回内容,另外一个问题是有引号“'”会转码&#39;望网友大神共同讨论解决

转载于:https://www.cnblogs.com/AmilyWilly/p/5237352.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值