1. 程式人生 > >Python3 呼叫百度翻譯

Python3 呼叫百度翻譯

OS: win 7 + python 3.7

適用於翻譯多條英文短句。

使用

  1. 下載並安裝 Python3.7
  2. 安裝引用包
    1. pip install urllib3 & openpyxl
      1. 官網使用的包http.client返回的是整個頁面的原始碼,改為urllib,3.7版本中包名改為urllib3
      2. openpyxl是python操作excel的包
  3. 引數調整
    1. 見原始碼: Git hub
  4. 百度翻譯官方API文件
  5. 申請翻譯API服務
    1. 已登入百度賬號的使用者,點選“立即使用”,註冊成為開發者,即可獲得APPID和金鑰資訊;同一個賬戶或手機號碼僅能申請一組APPID和金鑰資訊,該APPID和金鑰資訊可用於多項服務呼叫。

原始碼

#/usr/bin/env python
#coding=utf8
 
import hashlib 
import random
import openpyxl
from openpyxl import Workbook
import json
import urllib.request

print('translate begin...')

#set parameter
appid = '2015063000000001'
secretKey = '12345678'
fromLang = 'en' # 源語言
toLang = 'zh'   # 翻譯後的語言
srcFilename = 'c:\_Work\chinesetranslation.xlsx'
srcColumn=3
srcRowBegin=121
srcRowEnd=207
srcSheet = 'Sheet1'
desFilename = 'c:\_Work\chinesetranslation_result.xlsx'
desColumn=1
desSheet = 'result'


def translateBaidu(content): 
    apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
    q = content 
    salt = random.randint(32768, 65536)
    sign = str(appid) + q + str(salt) + secretKey 
    sign = hashlib.md5(sign.encode("utf-8")).hexdigest()
    myurl = apiurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
 
    try: 
        paramas = {
            'q':q,
            'from':'zh',
            'to':'en',
            'appid':'%s'%appid,
            'salt':'%s'%salt,
            'sign':'%s'%sign
            } 
        response = urllib.request.urlopen(myurl)
        jsonResponse = response.read()# 獲得返回的結果,結果為json格式
        js = json.loads(jsonResponse)  # 將json格式的結果轉換字典結構
        dst = str(js["trans_result"][0]["dst"])  # 取得翻譯後的文字結果 
        return dst
    except Exception as e:
        print(e) 


wb = openpyxl.load_workbook(srcFilename)
ws = wb[srcSheet]
wb2 = Workbook()
ws2 = wb2.create_sheet(title=desSheet)

for i in range (srcRowBegin,srcRowEnd,1):
    result=ws.cell(row=i, column=srcColumn).value
    if not (result is None):
        ws2.cell(row=i-srcRowBegin+1,column=desColumn).value = translateBaidu(result)

wb2.save(desFilename)
print('ending...')