python調(diào)用百度通用翻譯API的方法實(shí)現(xiàn)
1. 簡(jiǎn)介
前段時(shí)間在做視頻語音識(shí)別生成多語種字幕時(shí),使用了百度翻譯通用翻譯api進(jìn)行翻譯。百度翻譯平臺(tái)經(jīng)過個(gè)人認(rèn)證之后,每月有200萬字符的免費(fèi)翻譯額度。還是比較舒服的。
百度翻譯開放平臺(tái)是百度翻譯面向廣大開發(fā)者提供開放服務(wù)的平臺(tái)。服務(wù)涵蓋:通用翻譯API、定制化翻譯API、語音翻譯SDK、拍照翻譯SDK等。百度翻譯平臺(tái)地址
百度通用翻譯API支持28種語言實(shí)時(shí)互譯
,覆蓋中、英、日、韓、西、法、泰、阿、俄、葡、德、意、荷、芬、丹等;同時(shí)支持28種語言的語言檢測(cè)。
2. 使用步驟
如果你是初次使用百度翻譯開放平臺(tái),你需要先注冊(cè)一個(gè)百度賬號(hào)。登錄成功之后,點(diǎn)擊產(chǎn)品服務(wù),進(jìn)入到通用翻譯api界面。點(diǎn)擊底部立即使用,經(jīng)過認(rèn)證之后就可以使用了。個(gè)人能夠申請(qǐng)標(biāo)準(zhǔn)版和高級(jí)版認(rèn)證(推薦,支持并發(fā)數(shù)高)。
認(rèn)證完整之后,你就能獲取到對(duì)應(yīng)的appid
和secret
密鑰,這些在調(diào)用api的時(shí)候需要使用。
3. api調(diào)用實(shí)現(xiàn)
可以通過以上網(wǎng)址查看通用翻譯的API文檔。api文檔.我這里只展示幾個(gè)重要的內(nèi)容。
API調(diào)用網(wǎng)址
https://fanyi-api.baidu.com/api/trans/vip/translate
api調(diào)用參數(shù)
簽名生成方法:簽名對(duì)應(yīng)api參數(shù)中的sign。
api支持get和post請(qǐng)求,但我推薦使用post請(qǐng)求,因?yàn)間et請(qǐng)求存在url長(zhǎng)度限制(服務(wù)器或?yàn)g覽器限制),需要翻譯的文本過長(zhǎng)使用get請(qǐng)求就會(huì)出錯(cuò),而post請(qǐng)求就沒有這個(gè)限制。
api返回結(jié)果值
4. 編碼實(shí)現(xiàn)
基類,定義規(guī)范,后期可以定義其他平臺(tái)的翻譯實(shí)現(xiàn)類
# encoding:utf-8 __author__ = 'ObsessedCE' from abc import ABC, abstractmethod class Translation(ABC): @abstractmethod def translation(self, text, src_language = "auto", des_language = "zh"): pass
具體實(shí)現(xiàn)類,具體實(shí)現(xiàn)調(diào)用百度通用翻譯api的類
#coding=utf-8 __author__ = 'ObsessedCE' import requests import file_util import sys import hashlib import random import string import translation class BAIDUTranslation(translation.ABC): def __init__(self, profile): self.appid = profile.get("baidu_app_id") self.secret = profile.get("baidu_secret") self.url = profile.get("baidu_translation_url") self.session = requests.Session() self.session.trust_env = False def translation(self, text, src_language = "auto", des_language = "zh"): header = { "content-type":"application/x-www-form-urlencoded" } data = { "q" : text, "from" : src_language, "to" : des_language, "appid":self.appid, "salt":"", "sign":"" } if not text: print("Unspecified content") return None salt = BAIDUTranslation.generate_random_string(6) data["salt"] = salt data["sign"] = self.generate_sign(data) try: response = self.session.post(url= self.url, data = data, headers = header) if response.status_code != 200: print(f"調(diào)用百度翻譯出錯(cuò),狀態(tài)碼為: {str(response.status_code)}") return None response_data = response.json() if response_data.get("code") and response_data.get("code" )!= 52000: print(f"調(diào)用百度翻譯出錯(cuò),返回錯(cuò)誤代碼為: {response_data.get('code')}") return None translation_result = list() trans_result = response_data.get("trans_result") for result in trans_result: src = result.get("src") des = result.get("dst") translation_result.append(des) return translation_result except Exception as e: print(f"調(diào)用翻譯請(qǐng)求時(shí)出現(xiàn)錯(cuò)誤: {e}") def generate_sign(self, data): """ 生成簽名 :param data: :return: """ str = data.get("appid") str += data.get("q") str += data.get("salt") str += self.secret return self.generate_md5(str) def generate_md5(self, content): """ 進(jìn)行內(nèi)容md5加密,發(fā)揮全小寫的編碼 :param content: :return: """ if content: md5_hash = hashlib.md5() md5_hash.update(content.encode("utf-8")) return md5_hash.hexdigest().lower() @staticmethod def generate_random_string(length=6): # 可用字符:大寫字母、小寫字母和數(shù)字 chars = string.ascii_letters + string.digits # 隨機(jī)選擇字符并生成指定長(zhǎng)度的字符串 return ''.join(random.choices(chars, k=length)) if __name__ == "__main__": profile = file_util.read_file("./profile.yml") if not profile: print("no profile") sys.exit(0) baidu_transltion = BAIDUTranslation(profile) text = "You look so handsome today\nI think so, too" print(baidu_transltion.translation(text, ))
文件輔助類,讀取配置文件
# encoding:utf-8 __author__ = 'ObsessedCE' import yaml import sys def read_file(file_path): try: with open(file_path, "r", encoding="utf-8") as file: data = yaml.safe_load(file) return data except Exception as e: print(e) sys.exit(0)
配置文件定義格式,文件類型為yml,定義個(gè)人appid和密鑰
baidu_app_id: "個(gè)人信息查看" baidu_secret: "個(gè)人信息中查看" baidu_translation_url: "https://fanyi-api.baidu.com/api/trans/vip/translate"
最后看一下調(diào)用效果.
到此這篇關(guān)于python調(diào)用百度通用翻譯API的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python調(diào)用翻譯API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死)
這篇文章主要介紹了pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息
這篇文章主要介紹了在Python中使用cookielib和rllib2配合PyQuery抓取網(wǎng)頁信息的教程,主要是利用PyQuery解析HTML來實(shí)現(xiàn),需要的朋友可以參考下2015-04-04python3結(jié)合openpyxl庫實(shí)現(xiàn)excel操作的實(shí)例代碼
這篇文章主要介紹了python3結(jié)合openpyxl庫實(shí)現(xiàn)excel操作的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09如何用PyMongo在Python中操作MongoDB的超完整指南
本文詳細(xì)介紹了如何使用Python的PyMongo庫操作MongoDB,涵蓋了數(shù)據(jù)庫連接、文檔創(chuàng)建、數(shù)據(jù)操作和高級(jí)功能的使用,通過這些知識(shí)點(diǎn),開發(fā)者可以高效地管理和操作MongoDB數(shù)據(jù)庫,需要的朋友可以參考下2024-11-11Python手繪可視化工具cutecharts使用實(shí)例
這篇文章主要介紹了Python手繪可視化工具cutecharts使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12tensorflow實(shí)現(xiàn)從.ckpt文件中讀取任意變量
這篇文章主要介紹了tensorflow實(shí)現(xiàn)從.ckpt文件中讀取任意變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05