Python3调用百度翻译API进行英文翻译

一.API的概念

      API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作   机制的细节。

二.百度翻译开放平台

    由API的概念可以知道,很多大型的平台都提供API接口。这里使用的是百度翻译的API接口。下面提供百度翻译开放平台的

网址:http://api.fanyi.baidu.com/api/trans/product/index。进入平台后,点击【立即使用】,申请ID和SECRECT KEY,申请到了就可以通过ID和密钥调用API接口实现相应功能了。

下图是我的开发者信息里面的ID和密钥。

在开发平台上有【文件支持】栏,通过该栏目,可以找到各种API接口的技术文档,可以根据技术文档的要求设置,设置接入方式。

三.程序编写

1.地址设置

首先设置url地址,和申请到的ID和密钥。

# set baidu develop parameter
apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = '你的ID'
secretKey = '你的密钥'

因为翻译代码要频繁调用,这里单独列为一个函数:

# 翻译内容 源语言 翻译后的语言
def translateBaidu(content, fromLang='en', toLang='zh'):
    salt = str(random.randint(32768, 65536))
    sign = appid + content + salt + secretKey  #appid+q+salt+密钥 的MD5值
    sign = hashlib.md5(sign.encode("utf-8")).hexdigest() #对sign做md5,得到32位小写的sign

    try:
        #根据技术手册中的接入方式进行设定
        paramas = {
            'appid': appid,
            'q': content,
            'from': fromLang,
            'to': toLang,
            'salt': salt,
            'sign': sign
        }
        response = requests.get(apiurl, paramas)
        jsonResponse = response.json()  # 获得返回的结果,结果为json格式
        dst = str(jsonResponse["trans_result"][0]["dst"])  # 取得翻译后的文本结果
        return dst
    except Exception as e:
        print(e)

这里使用的源文件是英文语句存在【name.xlsx】文件中,翻译后的文档也会存入到【name1.xlsx】中。其中,【openpyxl】模块包是功能强大的excel处理包,这里用该模块对文件进行处理。

def excelTrans(
        srcFilename=r'F:\日常··练习\api\Python3 调用百度翻译Excel文件\source.xlsx',
        desFilename=r'F:\日常··练习\api\Python3 调用百度翻译Excel文件\result.xlsx',
        srcSheet='Sheet1',    
        numColumn = 2,
        srcRowBegin=1,
        srcRowEnd=44,
        desColumn=1,
        desSheet='result2'):
    wb = openpyxl.load_workbook(srcFilename)
    ws = wb[srcSheet]
    wb2 = Workbook()
    #ws2 = wb2.create_sheet(title=desSheet)    
    #ws2 = wb2.create_sheet(title=desSheet,index = 1)
    for j in range(numColumn ):        
        ws2 = wb2.create_sheet(title=desSheet,index = j)        
        for i in range(srcRowBegin, srcRowEnd, 1):
            result = ws.cell(row=i, column=j+1).value
            if not (result is None):
                ws2.cell(row=i-srcRowBegin+1, column=desColumn).value = translateBaidu(result)
                print(11, result)
        wb2.save(desFilename)

该函数实现了将目标excel中的英文句子翻译为中文,并按列分别存储在不同sheet中:

使用的包和完整代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib
import random
import openpyxl
from openpyxl import Workbook
import requests

# set baidu develop parameter
apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = '你的ID'
secretKey = '你的密钥'

# 翻译内容 源语言 翻译后的语言
def translateBaidu(content, fromLang='en', toLang='zh'):
    salt = str(random.randint(32768, 65536))
    sign = appid + content + salt + secretKey
    sign = hashlib.md5(sign.encode("utf-8")).hexdigest()
    try:
        paramas = {
            'appid': appid,
            'q': content,
            'from': fromLang,
            'to': toLang,
            'salt': salt,
            'sign': sign
        }
        response = requests.get(apiurl, paramas)
        jsonResponse = response.json()  # 获得返回的结果,结果为json格式
        dst = str(jsonResponse["trans_result"][0]["dst"])  # 取得翻译后的文本结果
        return dst
    except Exception as e:
        print(e)
def excelTrans(
        srcFilename=r'F:\日常··练习\api\Python3 调用百度翻译Excel文件\source.xlsx',
        desFilename=r'F:\日常··练习\api\Python3 调用百度翻译Excel文件\result.xlsx',
        srcSheet='Sheet1',        
        num = 2,
        #srcColumn=2,
        srcRowBegin=1,
        srcRowEnd=44,
        desColumn=1,
        desSheet='result2'):
    wb = openpyxl.load_workbook(srcFilename)
    ws = wb[srcSheet]
    wb2 = Workbook()
    #ws2 = wb2.create_sheet(title=desSheet)    
    #ws2 = wb2.create_sheet(title=desSheet,index = 1)
    for j in range(num):        
        ws2 = wb2.create_sheet(title=desSheet,index = j)        
        for i in range(srcRowBegin, srcRowEnd, 1):
            result = ws.cell(row=i, column=j+1).value
            if not (result is None):
                ws2.cell(row=i-srcRowBegin+1, column=desColumn).value = translateBaidu(result)
                print(11, result)
        wb2.save(desFilename)
if __name__ == '__main__':
    print('translate begin...')
    excelTrans()
    print('ending...')

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值