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/translateapi調(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)文章
Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)
這篇文章主要介紹了Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Python中查看變量的類型內(nèi)存地址所占字節(jié)的大小
這篇文章主要介紹了Python中查看變量的類型,內(nèi)存地址,所占字節(jié)的大小,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
使用Keras預(yù)訓(xùn)練模型ResNet50進(jìn)行圖像分類方式
這篇文章主要介紹了使用Keras預(yù)訓(xùn)練模型ResNet50進(jìn)行圖像分類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python更新數(shù)據(jù)庫(kù)中某個(gè)字段的數(shù)據(jù)(方法詳解)
這篇文章主要介紹了python更新數(shù)據(jù)庫(kù)中某個(gè)字段的數(shù)據(jù)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
十一個(gè)案例帶你吃透Python函數(shù)參數(shù)
這篇文章主要通過十一個(gè)案例帶大家一起了解一下Python中的函數(shù)參數(shù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-08-08
詳解Python用三種方式統(tǒng)計(jì)詞頻的方法
這篇文章主要介紹了Python用三種方式統(tǒng)計(jì)詞頻,每種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-07-07
Python讀取Nacos配置時(shí)設(shè)置命名空間的方法步驟
這篇文章主要介紹了Nacos配置管理的命名空間原理、Python端配置步驟、最佳實(shí)踐以及常見問題解決方案,強(qiáng)調(diào)通過合理命名空間與動(dòng)態(tài)配置機(jī)制,實(shí)現(xiàn)多環(huán)境隔離和高效運(yùn)維管理,需要的朋友可以參考下2025-10-10
python 19個(gè)值得學(xué)習(xí)的編程技巧
這篇文章主要介紹了python 19個(gè)值得學(xué)習(xí)的編程技巧,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-08-08
Python實(shí)現(xiàn)Word轉(zhuǎn)PDF全攻略(從入門到實(shí)戰(zhàn))
在數(shù)字化辦公場(chǎng)景中,Word文檔的跨平臺(tái)兼容性始終是個(gè)難題,而PDF格式憑借"所見即所得"的特性,已成為文檔分發(fā)和歸檔的標(biāo)準(zhǔn)格式,下面小編就來和大家講講如何使用Python實(shí)現(xiàn)Word轉(zhuǎn)PDF吧2025-08-08

