[Python]通过调用百度翻译API实现的翻译小程序
2016-09-25 19:59
926 查看
初学Python,想尝试写几个小程序。无意中发现百度翻译开放平台提供了API,可以为我们提供高质量的翻译服务。这个是我用Python写的第一个小程序,本文也是我的第一篇博客,想想也是好激动。现在介绍一下通过调用百度翻译API编写在线翻译程序的方法。
现在百度翻译开放平台每月提供200万字符的免费翻译服务,只要拥有百度账号并申请成为开发者就可以获得所需要的账号和密码。下面是开发者申请链接:
http://api.fanyi.baidu.com/api/trans/product/index
为方便使用,百度翻译开放平台提供了详细的接入文档,链接如下:
http://api.fanyi.baidu.com/api/trans/product/apidoc
程序演示:
在翻译文档中列出了详细的使用方法,以下是接入文档原文:
例:将apple从英文翻译成中文:
请求参数:
q=apple
from=en
to=zh
appid=2015063000000001
salt=1435660288
平台分配的密钥: 12345678
生成sign:
>拼接字符串1
拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678
得到字符串1 =2015063000000001apple143566028812345678
>计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码)
sign=md5(2015063000000001apple143566028812345678)
sign=f89f9594663708c1605f3d736d01d2d4
完整请求为:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
以接入文档中的字符串为例:
得到签名之后,按照接入文档中要求,生成URL请求,提交后可返回翻译结果。以下是接入文档提供的字段以及对应描述的截图:
至此,我们完成了有关API调用的所有关键步骤。
以下为全部代码:
现在百度翻译开放平台每月提供200万字符的免费翻译服务,只要拥有百度账号并申请成为开发者就可以获得所需要的账号和密码。下面是开发者申请链接:
http://api.fanyi.baidu.com/api/trans/product/index
为方便使用,百度翻译开放平台提供了详细的接入文档,链接如下:
http://api.fanyi.baidu.com/api/trans/product/apidoc
程序演示:
在翻译文档中列出了详细的使用方法,以下是接入文档原文:
例:将apple从英文翻译成中文:
请求参数:
q=apple
from=en
to=zh
appid=2015063000000001
salt=1435660288
平台分配的密钥: 12345678
生成sign:
>拼接字符串1
拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678
得到字符串1 =2015063000000001apple143566028812345678
>计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码)
sign=md5(2015063000000001apple143566028812345678)
sign=f89f9594663708c1605f3d736d01d2d4
完整请求为:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
签名sign的生成
通过Python提供的hashlib模块中的hashlib.md5()可以实现签名计算以接入文档中的字符串为例:
import hashlib m = '2015063000000001apple143566028812345678' m_MD5 = hashlib.md5(m) sign = m_MD5.hexdigest() print 'm = ',m print 'sign = ',sign
得到签名之后,按照接入文档中要求,生成URL请求,提交后可返回翻译结果。以下是接入文档提供的字段以及对应描述的截图:
解析返回结果
提交URL后的返回值为json格式,使用json模块可以对结果进行解析:{"from":"en","to":"zh","trans_result":[{"src":"apple","dst":"\u82f9\u679c"}]}
import json result = '{"from":"en","to":"zh","trans_result":[{"src":"apple","dst":"\u82f9\u679c"}]}' data = json.loads(result) print data['trans_result'][0]['dst']
至此,我们完成了有关API调用的所有关键步骤。
以下为全部代码:
# -*- coding: utf-8 -*- import urllib2 import hashlib import json import random class Baidu_Translation: def __init__(self): self._q = '' self._from = '' self._to = '' self._appid = 0 self._key = '' self._salt = 0 self._sign = '' self._dst = '' self._enable = True def GetResult(self): self._q.encode('utf8') m = str(Trans._appid)+Trans._q+str(Trans._salt)+Trans._key m_MD5 = hashlib.md5(m) Trans._sign = m_MD5.hexdigest() Url_1 = 'http://api.fanyi.baidu.com/api/trans/vip/translate?' Url_2 = 'q='+self._q+'&from='+self._from+'&to='+self._to+'&appid='+str(Trans._appid)+'&salt='+str(Trans._salt)+'&sign='+self._sign Url = Url_1+Url_2 PostUrl = Url.decode() TransRequest = urllib2.Request(PostUrl) TransResponse = urllib2.urlopen(TransRequest) TransResult = TransResponse.read() data = json.loads(TransResult) if 'error_code' in data: print 'Crash' print 'error:',data['error_code'] return data['error_msg'] else: self._dst = data['trans_result'][0]['dst'] return self._dst def ShowResult(self,result): print result def Welcome(self): self._q = 'Welcome to use icedaisy online translation tool' self._from = 'auto' self._to = 'zh' self._appid = 201609240000***** self._key = '******' self._salt = random.randint(10001,99999) welcome = self.GetResult() self.ShowResult(welcome) def StartTrans(self): while self._enable: self._q = raw_input() if cmp(self._q, '!quit') == 0: self._enable = False print 'Thanks for using!' break _q_len = len(self._q) if _q_len < 4096: result = self.GetResult() self.ShowResult(result) else: print 'Exceeds the maximum limit of 4096 characters' #----------- 程序的入口 ----------- print u""" --------------------------------------- 程序:icedaisy的在线翻译工具 版本:0.2 作者:icedaisy 日期:2016-09-25 语言:Python 2.7 功能:输入原文后得到翻译结果 原理:调用百度翻译API 退出:输入!quit --------------------------------------- """ Trans = Baidu_Translation() Trans.Welcome() Trans.StartTrans()
相关文章推荐
- Python通过调用有道翻译api实现翻译功能示例
- python3调用百度翻译API实现实时翻译
- 通过软链接实现同一文件夹被不同路径下程序调用
- C# 中通过程序调用命令行Ping 网络的实现
- 通过异步程序调用(APC)实现的定时功能
- Android开发 通过JNI实现JAVA与C/C++程序间的调用和回调
- Windows内核对象 - 通过异步程序调用(APC)实现的定时功能
- Python通过解析网页实现看报程序的方法
- python调用浏览器,实现刷网页小程序
- python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
- Android L版本中实现32bit userspace程序能通过ioctl()系统调用与64bit的kernel driver中的unlocked_ioctl()接口
- SetWaitableTimer 通过异步程序调用(APC)实现的定时功能
- GDI+实现的图片相互转换程序,可以通过命令行参数来调用
- Windows 注册自定义的协议 实现通过网页调用本地程序的功能例如QQ等
- 通过异步程序调用(APC)实现的定时功能
- python调用外部子进程,通过管道实现异步标准输入和输出的交互
- Python通过解析网页实现看报程序的方法
- python调用外部子进程,通过管道实现异步标准输入和输出
- win下实现Python通过rpy2调用R
- ARM汇编程序---通过ARM汇编调用C语言函数实现累加