基于调用百度翻译API的简易翻译器(python)

基于调用百度翻译API的简易翻译器

一.使用自己的百度账号登录百度翻译开放平台获取百度翻译API

使用您的百度账号登录百度翻译开放平台(http://api.fanyi.baidu.com);
注册成为开发者,获得APPID;
进行开发者认证(如仅需标准版可跳过);
开通通用翻译API服务:http://api.fanyi.baidu.com/api/trans/product/apichoose
基于调用百度翻译API的简易翻译器(python)_第1张图片

基于调用百度翻译API的简易翻译器(python)_第2张图片
基于调用百度翻译API的简易翻译器(python)_第3张图片

二.参考技术文档和Demo(百度翻译开放平台提供)

输入参数
基于调用百度翻译API的简易翻译器(python)_第4张图片
请求方式: 可使用GET或POST方式,如使用POST方式,Content-Type请指定为:application/x-www-form-urlencoded
字符编码:统一采用UTF-8编码格式
query长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内。(汉字约为2000个)
签名生成方法
签名是为了保证调用安全,使用MD5算法生成的一段字符串,生成的签名长度为 32位,签名中的英文字符均为小写格式
生成方法:
Step1. 将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥 的顺序拼接得到字符串1。
Step2. 对字符串1做md5,得到32位小写的sign。
注:

  1. 待翻译文本(q)需为UTF-8编码
  2. 在生成签名拼接 appid+q+salt+密钥 字符串时,q不需要做URL encode,在生成签名之后,发送HTTP请求之前才需要对要发送的待翻译文本字段q做URL encode
    输出参数
    返回的结果是json格式,包含以下字段:
    基于调用百度翻译API的简易翻译器(python)_第5张图片
    接入举例
    例如:将英文单词apple翻译成中文:
    请求参数:
    q=apple
    from=en
    to=zh
    appid=2015063000000001(请替换为您的appid)
    salt=1435660288(随机码)
    平台分配的密钥: 12345678
    生成签名sign:
    Step1. 拼接字符串1:
    拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678得到字符串1:“2015063000000001apple143566028812345678”
    Step2. 计算签名:(对字符串1做md5加密)
    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
    注:也可使用POST方式,如POST方式传送,Content-Type请指定为:application/x-www-form-urlencoded
    语种列表:
    通用翻译API支持语种数已达211种,完整列表如下。其中,对于常见语种列表内的语种,所有用户均可调用。对于非常见语种,仅企业已认证用户可调用,未认证用户调用将返回错误。
    源语言语种不确定时可设置为 auto,目标语言语种不可设置为 auto。但对于非常用语种,语种自动检测可能存在误差。
    常见语种列表
    基于调用百度翻译API的简易翻译器(python)_第6张图片
    Python语言Demo(python3版)//其他版本的demo可在百度翻译开放平台下载
#百度通用翻译API,不包含词典、tts语音合成等资源,如有相关需求请联系translate_api@baidu.com
# coding=utf-8

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

appid = ''  # 填写你的appid
secretKey = ''  # 填写你的密钥

httpClient = None
myurl = '/api/trans/vip/translate'

fromLang = 'auto'   #原文语种
toLang = 'zh'   #译文语种
salt = random.randint(32768, 65536)
q= 'apple'
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.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是HTTPResponse对象
    response = httpClient.getresponse()
    result_all = response.read().decode("utf-8")
    result = json.loads(result_all)

    print (result)

except Exception as e:
    print (e)
finally:
    if httpClient:
        httpClient.close()

三.python编写代码制作简单的百度翻译器

1.代码实现的功能

(1)使用GUI界面实现翻译功能
(2)使用百度翻译平台开放API
(3)输入想翻译的内容,输出翻译的结果
(4)支持多种语言翻译

2.具体代码及流程图

from tkinter import *
from urllib import request
from urllib import parse
import json
import hashlib
def translate_Word(en_str):
    URL='http://api.fanyi.baidu.com/api/trans/vip/translate'
    From_Data={}                     #创建From_Data字典,存储向服务器发送的data
    From_Data['from']='auto'         #这里默认自动识别输入语言
    From_Data['to']='jp'             #可以在上面的语种列表中选择合适的语言
    From_Data['q']=en_str            #要翻译的数据
    From_Data['appid']=''            #申请的APPID
    From_Data['salt']='1435660288'   #随机数
    Key=''                           #平台分配的密匙
    m=From_Data['appid']+en_str+From_Data['salt']+Key
    m_MD5=hashlib.md5(m.encode('utf8'))
    From_Data['sign']=m_MD5.hexdigest()

    data=parse.urlencode(From_Data).encode('utf-8')
                                                  #使用urlencode()方法转换标准格式
    response=request.urlopen(URL,data)            #传递request对象和转换完格式的数据
    html=response.read().decode('utf-8')          #读取信息并解码
    translate_results=json.loads(html)            #使用JSON
    print(translate_results)                      #打印出JSON数据
    translate_results=translate_results['trans_result'][0]['dst']   #找到翻译结果

    print('翻译的结果是: %s'%translate_results)               #打印翻译信息
    return translate_results
def leftClick(event):   
    en_str=Entry1.get()
    print(en_str)
    vText=translate_Word(en_str)
    Entry2.config(Entry2,text=vText)
    s.set("")
    Entry2.insert(0,vText)
def leftClick2(event):
    s.set("")
    Entry2.insert(0,"")
if __name__=='__main__':
    root=Tk()
    root.title('百度翻译器')
    root.geometry('300x130')
    Label(root,text='输入要翻译的内容:',width=15).place(x=1,y=1)#绝对坐标1,1
    Entry1=Entry(root,width=20)
    Entry1.place(x=120,y=1)
    Label(root,text='翻译结果:',width=22).place(x=1,y=20)
    s=StringVar()
    s.set('')
    Entry2=Entry(root,width=20,textvariable=s)
    Entry2.place(x=120,y=20)

    Button1 = Button(root,text='翻译',width=8)  #设置Button1按钮名称,宽度及位置坐标
    Button1.place(x=80,y=80)
    Button2 = Button(root, text='清空', width=8)#设置Button2按钮名称,宽度及位置坐标
    Button2.place(x=180, y=80)

    #给button设置监听事件
    Button1.bind('',leftClick)     #翻译按钮
    Button2.bind('',leftClick2)    #清空按钮
    root.mainloop()
导入数据包
定义实现翻译的事件
定义左键点击实现翻译的按钮事件
定义左键点击实现清空的按钮事件
设计GUI界面以及设置按钮

3.实验结果展示

(1)打开python运行代码,出现百度翻译器的GU界面,选择合适的输出语言,在“输入要翻译的内容”的输入框中输入要翻译的内容,就可以在“翻译结果”的输出框中得到翻译的结果
基于调用百度翻译API的简易翻译器(python)_第7张图片
(2)也可以在电脑直接打开百度翻译器的python程序,按照上列的步骤,同样可以得到正确结果。
基于调用百度翻译API的简易翻译器(python)_第8张图片

4.注意事项及不足

(1)由于百度翻译开放平台的某些要求限制以及运行环境的不稳定等因素,导致服务器地址偶尔会改变,所以当出现输出框无法输出翻译结果时,需要按照错误提示在开发者信息修改client_ip的值。
基于调用百度翻译API的简易翻译器(python)_第9张图片
(2)由于使用的免费的标准版通用翻译,所以对一些比较生僻的词以及较为复杂的语法结构无法做到正确的翻译。
由于百度翻译器程序是在调用百度翻译开放平台的百度翻译API制作的,所以在运行程序以及在输入框输入翻译内容时,都必须保证电脑处于与外网连接的状态下,否则无法运行或得出翻译结果。

你可能感兴趣的:(python语言程序设计,数据挖掘,http,数据挖掘,python,小程序)