使用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) 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进行翻译操作
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,推荐几篇文章
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
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也会给你返回个相同的内容,内容过长的话,有道和微信的定义貌似不一样,有道可以翻译,但是微信不一定可以返回内容,另外一个问题是有引号“'”会转码'望网友大神共同讨论解决
使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译的更多相关文章
- 【网站开发】在新浪SAE上搭建一个博客
概述 在新浪SAE上搭建一个博客 1.访问新浪SAE站点 http://sae.sina.com.cn/ 2.注册新浪SAE 3.选择应用仓库 4.选择WordPress 5.安装WordPress ...
- 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务
目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/ 可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...
- 如何在以太坊上搭建一个Dapp?
原创: 前哨小兵甲 区块链前哨 昨天 策划|Tina作者|Mahesh Murthy俗话说,实践出真知!对于开发人员来说,最好的学习办法就是亲自动手做一个小项目.所以,接下来我们将会以一个投票程序为例 ...
- 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker
如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...
- 利用socket编程在ESP32上搭建一个TCP客户端
通过之前http://www.cnblogs.com/noticeable/p/7636582.html中对socket的编程,已经可以知道如何通过socket编程搭建服务器和客户端了,现在,就在ES ...
- 记录一个奇葩的问题:k8s集群中master节点上部署一个单节点的nacos,导致master节点状态不在线
情况详细描述; k8s集群,一台master,两台worker 在master节点上部署一个单节点的nacos,导致master节点状态不在线(不论是否修改nacos的默认端口号都会导致master节 ...
- 在新浪SAE上搭建微信公众号的python应用
微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...
- Web开发从零单排之一:在新浪云平台SAE上开发一个html5电子喜帖
需求描述: 本人大婚将至,女朋友说“现在都流行在微信上发电子请帖了,你不是技(cheng)术(xu)宅(yuan)嘛,不会连这个都搞不定吧” 本人嘴上说这等小事何足挂齿,但心里还是七上八下的,虽然自认 ...
- 用Python手把手教你搭建一个web框架-flask微框架!
在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...
随机推荐
- GCC:条件判断中赋值语句和函数结尾时无返回值的警告
有下面非常经典的一个字符串复制程序. test1.c #include <stdio.h> int main() { char str_t[]="This String come ...
- ArcGIS中的北京54和西安80投影坐标系详解
ArcGIS中的北京54和西安80投影坐标系详解 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理 ...
- 第四十一课:CSS3 animation详解
animation是css3的另一个重要的模块,它成型比transition晚,吸取了Flash的关键帧的理念,实用性高. animation是一个复合样式,它可以细分为8个更细的样式. (1)ani ...
- 第二十三课:jQuery.event.add的原理以及源码解读
本课主要来讲解一下jQuery是如何实现它的事件系统的. 我们先来看一个问题: 如果有一个表格有100个tr元素,每个都要绑定mouseover/mouseout事件,改成事件代理的方式,可以节省99 ...
- web前端开发教程系列-2 - 前端开发书籍分享
目录: 前言 一. CSS 二. JavaScript 三. jQuery 四. 后记 前言 前端书籍在每个商城或书架上面都是琳琅满目,很多初学者又不能很好的判断书的质量或层次.因为今天给同学们分 ...
- Javascript基础系列之(一)JavaScript语法
javascript的语法 1.区分大小写 javascript中,变量.函数.运算符都区分大小写. 2.弱类型变量 定义变量只用 "var"关键字 var age = 25; v ...
- WebForm之FileUpload控件(文件上传)
FileUpload控件要与Button.LinkButton.ImageButton配合使用 FileUpload控件的方法及属性: 1.SaveAs("要上传到服务器的绝对路径" ...
- JS所谓的享元模式-->
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- Android Launcher分析和修改9——Launcher启动APP流程
本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...
- 【poj2234】 Matches Game
http://poj.org/problem?id=2234 (题目链接) 题意 经典取火柴游戏 Solution 裸的Nim游戏,也就是取石子. 整个游戏的sg值为每一堆火柴(子游戏)的异或和. 代 ...