小白学Python——用 百度翻译API 实现 翻译功能

时间:2024-03-02 10:19:51

本人英语不好,很多词组不认识,只能借助工具;百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢?

百度翻译开放平台: http://api.fanyi.baidu.com/api/trans/product/index

 

 

百度翻译开放平台是百度翻译面向广大开发者提供开放服务的平台。

服务涵盖:通用翻译API、定制化翻译API、语音翻译SDK、拍照翻译SDK等,并持续更新中。自己用通用的即可。

通用翻译API采用全流程自助申请的模式。点击网站上方的“登录”按钮,以百度账号登录平台;在产品服务页面点击“立即使用”,按照页面提示信息注册成为开发者,即可获得APPID和密钥信息。同一百度账号或手机号码仅能申请一组APPID和密钥信息,该APPID和密钥信息可用于多项服务调用

已注册开发者的用户,可在产品服务页面点击“立即使用”或者在管理控制台开通通用翻译API服务;如需开通更多服务,可在管理控制台-总览页面开通其他服务。

 

 

通用翻译API技术文档   http://api.fanyi.baidu.com/api/trans/product/apidoc

通用翻译API通过HTTP接口对外提供多语种互译服务。您只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。

通用翻译API HTTP地址:http://api.fanyi.baidu.com/api/trans/vip/translate

通用翻译API HTTPS地址:https://fanyi-api.baidu.com/api/trans/vip/translate

 

  完整代码:

import json
import random
import hashlib
from urllib import parse
import http.client

class BaiduTranslate:
    def __init__(self,fromLang,toLang):
        self.url = "/api/trans/vip/translate"
        self.appid="xxxxx" #申请的账号
        self.secretKey = \'xxxxx\'#账号密码
        self.fromLang = fromLang
        self.toLang = toLang
        self.salt = random.randint(32768, 65536)

    def BdTrans(self,text):
        sign = self.appid + text + str(self.salt) + self.secretKey
        md = hashlib.md5()
        md.update(sign.encode(encoding=\'utf-8\'))
        sign = md.hexdigest()
        myurl = self.url + \
                \'?appid=\' + self.appid + \
                \'&q=\' + parse.quote(text) + \
                \'&from=\' + self.fromLang + \
                \'&to=\' + self.toLang + \
                \'&salt=\' + str(self.salt) + \
                \'&sign=\' + sign
        try:
            httpClient = http.client.HTTPConnection(\'api.fanyi.baidu.com\')
            httpClient.request(\'GET\', myurl)
            response = httpClient.getresponse()
            html = response.read().decode(\'utf-8\')
            html = json.loads(html)
            dst = html["trans_result"][0]["dst"]
            return  True , dst
        except Exception as e:
            return False , e
if __name__==\'__main__\':
    BaiduTranslate_test = BaiduTranslate(\'en\',\'zh\')
    Results = BaiduTranslate_test.BdTrans("Hello, World!")#要翻译的词组
    print(Results)

官方demo,应该是在Python2中运行的,Python3中可能无法运行,原因应该是没有安装对应的库和语法的问题,

查找各种资料发现原来Python 2.x中的"httplib"模块在Python 3.x中变成了"http.client"

print语句输出在3.x中要加(),  MD5 要换成 hashlib,

import hashlib
str1 = "中国是一个伟大的国家,中华民族是一个伟大的民族"
md5 = hashlib.md5()
md5.update(str1.encode("utf-8"))    # 注意这里必须要编码,否则报错
print(md5.hexdigest())

 

修改运行后,结果还是乱码:

 

增加转码后,显示正常,完整代码如下:

#/usr/bin/env python
#coding=utf8

import json
import http.client    #修改引用的模块
import hashlib        #修改引用的模块
from urllib import parse
import random

appid = \'xxxx\' #你的appid
secretKey = \'xxxx\' #你的密钥
 
httpClient = None
myurl = \'/api/trans/vip/translate\'
q = \'good\'
fromLang = \'en\'
toLang = \'zh\'
salt = random.randint(32768, 65536)

sign = appid+q+str(salt)+secretKey
m1 = hashlib.md5()
m1.update(sign.encode("utf-8"))
sign = m1.hexdigest()
myurl = myurl+\'?appid=\'+appid+\'&q=\'+parse.quote(q)+\'&from=\'+fromLang+\'&to=\'+toLang+\'&salt=\'+str(salt)+\'&sign=\'+sign

try:
    httpClient = http.client.HTTPConnection(\'api.fanyi.baidu.com\')
    httpClient.request(\'GET\', myurl)
    response = httpClient.getresponse()

    #转码
    html = response.read().decode(\'utf-8\')
    html = json.loads(html)
    dst = html["trans_result"][0]["dst"]
    print(dst)
except Exception as e:
    print(e)
finally:
    if httpClient:
        httpClient.close()

 

 以下是官方demo,大家可以对比下区别:

#/usr/bin/env python
#coding=utf8

import httplib
import md5
import urllib
import random

appid = \'\' #你的appid
secretKey = \'\' #你的密钥

 
httpClient = None
myurl = \'/api/trans/vip/translate\'
q = \'apple\'
fromLang = \'en\'
toLang = \'zh\'
salt = random.randint(32768, 65536)

sign = appid+q+str(salt)+secretKey
m1 = md5.new()
m1.update(sign)
sign = m1.hexdigest()
myurl = myurl+\'?appid=\'+appid+\'&q=\'+urllib.quote(q)+\'&from=\'+fromLang+\'&to=\'+toLang+\'&salt=\'+str(salt)+\'&sign=\'+sign
 
try:
    httpClient = httplib.HTTPConnection(\'api.fanyi.baidu.com\')
    httpClient.request(\'GET\', myurl)
 
    #response是HTTPResponse对象
    response = httpClient.getresponse()
    print response.read()
except Exception, e:
    print e
finally:
    if httpClient:
        httpClient.close()