[Python]通过调用百度翻译API实现的翻译小程序

初学Python,想尝试写几个小程序。无意中发现百度翻译开放平台提供了API,可以为我们提供高质量的翻译服务。这个是我用Python写的第一个小程序,本文也是我的第一篇博客,想想也是好激动。现在介绍一下通过调用百度翻译API编写在线翻译程序的方法。

现在百度翻译开放平台每月提供200万字符的免费翻译服务,只要拥有百度账号并申请成为开发者就可以获得所需要的账号和密码。下面是开发者申请链接:

http://api.fanyi.baidu.com/api/trans/product/index

为方便使用,百度翻译开放平台提供了详细的接入文档,链接如下:

http://api.fanyi.baidu.com/api/trans/product/apidoc

程序演示:

[Python]通过调用百度翻译API实现的翻译小程序_第1张图片


在翻译文档中列出了详细的使用方法,以下是接入文档原文:

例:将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请求,提交后可返回翻译结果。以下是接入文档提供的字段以及对应描述的截图:

[Python]通过调用百度翻译API实现的翻译小程序_第2张图片

解析返回结果

提交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实现的翻译小程序)