使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具

距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,但是因为英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,可是一直搞不定,因而就先搁浅了,今天又搞了搞,终于搞定了,在这里也说下,同时也说下json格式的应用python

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

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

数据接口
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的基本格式sql

QQ截图20140118234719

成功返回翻译结果都会有一个叫basic的key的,因而咱们接下来写一个fanyi的函数,以前在头部记得import jsonjson

def youdao(word):
    qword = urllib2.quote(word)
    baseurl = r'http://fanyi.youdao.com/openapi.do?keyfrom=yourAppName&key=yourAppKey&type=data&doctype=json&version=1.1&q='
    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进行翻译操做api

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

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

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

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

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;望网友大神共同讨论解决


接下来:

使用python一步一步搭建微信公众平台(一)----基本的验证与鹦鹉学舌功能

使用python一步一步搭建微信公众平台(三)----添加用户关注后的欢迎信息与听音乐功能

使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复

使用python一步一步搭建微信公众平台(五)----使用mysql服务来记录用户的反馈

相关文章
相关标签/搜索