Python如何通過百度翻譯API實(shí)現(xiàn)翻譯功能
本人英語不好,很多詞組不認(rèn)識(shí),只能借助工具;百度翻譯和谷歌翻譯都不錯(cuò),近期自學(xué)Python,就想能否自己設(shè)計(jì)一個(gè)百度翻譯軟件呢?
百度翻譯開放平臺(tái):http://api.fanyi.baidu.com/api/trans/product/index
百度翻譯開放平臺(tái)是百度翻譯面向廣大開發(fā)者提供開放服務(wù)的平臺(tái)。
服務(wù)涵蓋:通用翻譯API、定制化翻譯API、語音翻譯SDK、拍照翻譯SDK等,并持續(xù)更新中。自己用通用的即可。
通用翻譯API采用全流程自助申請(qǐng)的模式。點(diǎn)擊網(wǎng)站上方的“登錄”按鈕,以百度賬號(hào)登錄平臺(tái);在產(chǎn)品服務(wù)頁面點(diǎn)擊“立即使用”,按照頁面提示信息注冊(cè)成為開發(fā)者,即可獲得APPID和密鑰信息。同一百度賬號(hào)或手機(jī)號(hào)碼僅能申請(qǐng)一組APPID和密鑰信息,該APPID和密鑰信息可用于多項(xiàng)服務(wù)調(diào)用
已注冊(cè)開發(fā)者的用戶,可在產(chǎn)品服務(wù)頁面點(diǎn)擊“立即使用”或者在管理控制臺(tái)開通通用翻譯API服務(wù);如需開通更多服務(wù),可在管理控制臺(tái)-總覽頁面開通其他服務(wù)。
通用翻譯API技術(shù)文檔 http://api.fanyi.baidu.com/api/trans/product/apidoc
通用翻譯API通過HTTP接口對(duì)外提供多語種互譯服務(wù)。您只需要通過調(diào)用通用翻譯API,傳入待翻譯的內(nèi)容,并指定要翻譯的源語言(支持源語言語種自動(dòng)檢測(cè))和目標(biāo)語言種類,就可以得到相應(yīng)的翻譯結(jié)果。
通用翻譯API HTTP地址:http://api.fanyi.baidu.com/api/trans/vip/translate
通用翻譯API HTTPS地址:https://fanyi-api.baidu.com/api/trans/vip/translate
完整代碼:
import json import random import hashlib from urllib import parse import http.client class BaiduTranslate: def __init__(self,fromLang,toLang): self.url = "/api/trans/vip/translate" self.appid="xxxxx" #申請(qǐng)的賬號(hào) self.secretKey = 'xxxxx'#賬號(hào)密碼 self.fromLang = fromLang self.toLang = toLang self.salt = random.randint(32768, 65536) def BdTrans(self,text): sign = self.appid + text + str(self.salt) + self.secretKey md = hashlib.md5() md.update(sign.encode(encoding='utf-8')) sign = md.hexdigest() myurl = self.url + \ '?appid=' + self.appid + \ '&q=' + parse.quote(text) + \ '&from=' + self.fromLang + \ '&to=' + self.toLang + \ '&salt=' + str(self.salt) + \ '&sign=' + sign try: httpClient = http.client.HTTPConnection('api.fanyi.baidu.com') httpClient.request('GET', myurl) response = httpClient.getresponse() html = response.read().decode('utf-8') html = json.loads(html) dst = html["trans_result"][0]["dst"] return True , dst except Exception as e: return False , e if __name__=='__main__': BaiduTranslate_test = BaiduTranslate('en','zh') Results = BaiduTranslate_test.BdTrans("Hello, World!")#要翻譯的詞組 print(Results)
官方demo,應(yīng)該是在Python2中運(yùn)行的,Python3中可能無法運(yùn)行,原因應(yīng)該是沒有安裝對(duì)應(yīng)的庫(kù)和語法的問題,
查找各種資料發(fā)現(xiàn)原來Python 2.x中的"httplib"模塊在Python 3.x中變成了"http.client",
print語句輸出在3.x中要加(), MD5 要換成hashlib,
import hashlib str1 = "中國(guó)是一個(gè)偉大的國(guó)家,中華民族是一個(gè)偉大的民族" md5 = hashlib.md5() md5.update(str1.encode("utf-8")) # 注意這里必須要編碼,否則報(bào)錯(cuò) print(md5.hexdigest())
修改運(yùn)行后,結(jié)果還是亂碼:
增加轉(zhuǎn)碼后,顯示正常,完整代碼如下:
#/usr/bin/env python #coding=utf8 import json import http.client #修改引用的模塊 import hashlib #修改引用的模塊 from urllib import parse import random appid = 'xxxx' #你的appid secretKey = 'xxxx' #你的密鑰 httpClient = None myurl = '/api/trans/vip/translate' q = 'good' fromLang = 'en' toLang = 'zh' salt = random.randint(32768, 65536) sign = appid+q+str(salt)+secretKey m1 = hashlib.md5() m1.update(sign.encode("utf-8")) sign = m1.hexdigest() myurl = myurl+'?appid='+appid+'&q='+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 = httpClient.getresponse() #轉(zhuǎn)碼 html = response.read().decode('utf-8') html = json.loads(html) dst = html["trans_result"][0]["dst"] print(dst) except Exception as e: print(e) finally: if httpClient: httpClient.close()
以下是官方demo,大家可以對(duì)比下區(qū)別:
#/usr/bin/env python #coding=utf8 import httplib import md5 import urllib import random appid = '' #你的appid secretKey = '' #你的密鑰 httpClient = None myurl = '/api/trans/vip/translate' q = 'apple' fromLang = 'en' toLang = 'zh' salt = random.randint(32768, 65536) sign = appid+q+str(salt)+secretKey m1 = md5.new() m1.update(sign) sign = m1.hexdigest() myurl = myurl+'?appid='+appid+'&q='+urllib.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign try: httpClient = httplib.HTTPConnection('api.fanyi.baidu.com') httpClient.request('GET', myurl) #response是HTTPResponse對(duì)象 response = httpClient.getresponse() print response.read() except Exception, e: print e finally: if httpClient: httpClient.close()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python Hypothesis生成和執(zhí)行大量的測(cè)試用例
Hypothesis是一個(gè)基于屬性的測(cè)試(property-based testing)庫(kù),它能夠幫助我們生成和執(zhí)行大量的測(cè)試用例,與傳統(tǒng)的單元測(cè)試相比,屬性測(cè)試更加靈活和全面,能夠發(fā)現(xiàn)更多的邊界情況和潛在的錯(cuò)誤2024-01-01Pandas實(shí)現(xiàn)Dataframe的合并
我們知道,在使用pandas處理數(shù)據(jù)的時(shí)候,往往會(huì)需要合并兩個(gè)或者多個(gè)DataFrame的操作,那么本文就來介紹一下Pandas實(shí)現(xiàn)Dataframe的合并,感興趣的可以了解一下2021-06-06淺談sklearn中predict與predict_proba區(qū)別
這篇文章主要介紹了淺談sklearn中predict與predict_proba區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06使用Python的Django框架實(shí)現(xiàn)事務(wù)交易管理的教程
這篇文章主要介紹了使用Python的Django框架實(shí)現(xiàn)事務(wù)交易管理的教程,針對(duì)數(shù)據(jù)庫(kù)的事務(wù)行為進(jìn)行一系列操作,要的朋友可以參考下2015-04-04Python實(shí)現(xiàn)CNN的多通道輸入實(shí)例
今天小編就為大家分享一篇Python實(shí)現(xiàn)CNN的多通道輸入實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02Python OpenCV實(shí)現(xiàn)按照像素點(diǎn)圖片切割
本文將詳細(xì)介紹如何使用Python和OpenCV進(jìn)行基于像素點(diǎn)的圖像分割,包括閾值分割,自適應(yīng)閾值分割等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12Python實(shí)現(xiàn)兩款計(jì)算器功能示例
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)兩款計(jì)算器功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Python的基礎(chǔ)語法和輸入輸出函數(shù)你都了解嗎
這篇文章主要為大家詳細(xì)介紹了Python的基礎(chǔ)語法和輸入輸出函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02