zoukankan      html  css  js  c++  java
  • 使用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: %s %s 网络释义: %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: %s %s 网络释义: %s'%(fanyi['query'],''.join(fanyi['translation']),' '.join(fanyi['basic']['explains']),''.join(fanyi['web'][0]['value']))
                return trans
            else:
                trans =u'%s: 基本翻译:%s '%(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;望网友大神共同讨论解决

  • 相关阅读:
    eclipse中集成python开发环境
    取消eclipse英文单词拼写验证
    exe所在路径
    [转]关于Megatops BinCalc RPN计算器的说明
    WinDbg 蓝屏dump分析教程
    Delphi与Windows 7下的用户账户控制(UAC)机制 及 禁用兼容性助手
    【Delphi7】 解决“程序第一次可以正常编译,但再次编译的时候会报错,必须重新打开Delphi”的问题
    解决xftp远程连接中文乱码
    创建用资源管理器打开FTP位置
    收藏夹里的js
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/5237352.html
Copyright © 2011-2022 走看看