google API翻譯是收費(fèi)的,但翻譯比較準(zhǔn)確,正常google翻譯的收費(fèi)是100萬個(gè)字符20美元。我們第一次使用,當(dāng)然不想就開始付費(fèi),而是想先體驗(yàn)一下,好在google也提供了免費(fèi)試用的功能,會(huì)給新賬號(hào)300$的額度。
要使用google API翻譯,整個(gè)流程還挺長的。由于google的文檔對(duì)新手很不好友,所以在這個(gè)過程中我也走了不少彎路,現(xiàn)在總結(jié)一下并分享給大家,
其中關(guān)鍵的步驟是:
希望讓有需要的人少走點(diǎn)彎路。
一、申請(qǐng)google API
(一)進(jìn)入申請(qǐng)頁面
點(diǎn)擊鏈接進(jìn)行申請(qǐng)。
(二)申請(qǐng)API
可能是因?yàn)間oogle在中國被墻的原因,國家那里找了半天找不到中國的選項(xiàng),后來干脆用默認(rèn)選項(xiàng)“美國”。
由于選的是美國,所以信用卡地址那里也只能填美國的,我隨便填了一下紐約大學(xué)的地址:70 Washington Square South ,New York, NY。
300$的額度,90天內(nèi)用完。
二、新建項(xiàng)目
按google的說法,要使用Google Cloud提供的服務(wù),您必須創(chuàng)建一個(gè)項(xiàng)目。
一個(gè)項(xiàng)目可以組織您所有的Google Cloud資源。 一個(gè)項(xiàng)目由一組協(xié)作者,已啟用的API(和其他資源),監(jiān)視工具,計(jì)費(fèi)信息以及身份驗(yàn)證和訪問控制組成。 您可以創(chuàng)建一個(gè)項(xiàng)目,也可以創(chuàng)建多個(gè)項(xiàng)目,然后使用它們?cè)谫Y源層次結(jié)構(gòu)中組織Google Cloud資源。 創(chuàng)建項(xiàng)目時(shí),請(qǐng)記下項(xiàng)目ID。 您將需要此ID來進(jìn)行API調(diào)用。
建議您為實(shí)驗(yàn),測試和生產(chǎn)創(chuàng)建單獨(dú)的項(xiàng)目。 創(chuàng)建項(xiàng)目后,記錄項(xiàng)目編號(hào)或ID。 調(diào)用Cloud Translation API時(shí),必須提供項(xiàng)目編號(hào)(或ID)。
三、啟用記費(fèi)功能
您必須啟用計(jì)費(fèi)才能使用云翻譯。
如何確認(rèn)你的項(xiàng)目已經(jīng)開啟了計(jì)費(fèi)功能呢?
打開你的項(xiàng)目,點(diǎn)擊左邊導(dǎo)航欄的“結(jié)算”鏈接,如果看到下面的頁面,就表明你的項(xiàng)目已經(jīng)開啟了計(jì)費(fèi)的功能。
四、開啟API
(一)生成API密鑰
進(jìn)入你的項(xiàng)目里,點(diǎn)擊執(zhí)行“創(chuàng)建憑據(jù)->生成API密鑰”功能,就可以得到你的API密鑰.
(二)測試API密鑰
填上key進(jìn)行測試,測試代碼如下:
import requests import csv import sys reload(sys) sys.setdefaultencoding('utf-8')#python處理字符流改成utf-8形式 def translate_text(target, content): language_type = "" url = "https://translation.googleapis.com/language/translate/v2" data = { 'key':"AI*******mpI", 'source': language_type, 'target': target, 'q': content, 'format': "text" } #headers = {'X-HTTP-Method-Override': 'GET'} #response = requests.post(url, data=data, headers=headers) response = requests.post(url, data) # print(response.json()) print(response) res = response.json() print(res["data"]["translations"][0]["translatedText"]) result = res["data"]["translations"][0]["translatedText"] print(result) return result if __name__ == '__main__': content = "Teknoloji haberleri ve ürün incelemeleri" target = 'zh-cn' translate_text(target,content)
(三)啟用翻譯API報(bào)以下錯(cuò)誤:
{'error': {'code': 403, 'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'errors': [{'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'domain': 'usageLimits', 'reason': 'accessNotConfigured', 'extendedHelp': 'https://console.developers.google.com'}], 'status': 'PERMISSION_DENIED'}}
按上面的出錯(cuò)提示,進(jìn)入到這個(gè)頁面,點(diǎn)擊“啟用”翻譯API.
一些介紹:https://cloud.google.com/translate/docs/basic/quickstart?hl=zh_CN
(四)成果展示
再次運(yùn)行上面的測試代碼,可以發(fā)現(xiàn)翻譯成功了。運(yùn)行結(jié)果如下:
{'data': {'translations': [{'translatedText': '技術(shù)新聞和產(chǎn)品評(píng)論', 'detectedSourceLanguage': 'tr'}]}}
技術(shù)新聞和產(chǎn)品評(píng)論
參考:https://blog.csdn.net/javajiawei/article/details/90691108?spm=1001.2014.3001.5501
到了上面這一步就可以使用了,如果你只是進(jìn)行簡單的翻譯,那么到上一步就已經(jīng)大功告成了!
不過我還有一個(gè)需求,就是可以實(shí)現(xiàn)對(duì)html代碼的翻譯,即保留html代碼,但是翻譯代碼中的內(nèi)容。所以后來又折騰客戶端庫。
五、進(jìn)行配額管理
這一步是可選步驟,可以不做。
Cloud Translation具有配額管理系統(tǒng),可幫助您和Google管理該服務(wù)的使用情況。 默認(rèn)情況下,每天可以發(fā)送的字符數(shù)沒有限制。 如果您有固定的預(yù)算,建議您監(jiān)控日常使用情況,并根據(jù)計(jì)劃支出調(diào)整配額。
六、設(shè)立身份驗(yàn)證
如果您打算使用Cloud Translation API,則需要設(shè)置身份驗(yàn)證。 任何使用該API的客戶端應(yīng)用程序都必須經(jīng)過身份驗(yàn)證,并被授予對(duì)所請(qǐng)求資源的訪問權(quán)限。
其實(shí)官方也推薦使用客戶端庫來調(diào)用 Cloud Translation,因?yàn)樗鼈兛梢愿p松地訪問 API
(一)獲得api json文件
1.點(diǎn)擊進(jìn)入這個(gè)頁面
2.選擇一個(gè)項(xiàng)目
3.選擇“create service account”
4.建立賬號(hào)
輸入相關(guān)的信息,完成賬號(hào)的建立。
5.點(diǎn)擊左邊導(dǎo)航欄的“service account”,你會(huì)發(fā)現(xiàn)剛剛自己建立的賬號(hào)已經(jīng)出現(xiàn)在里面了,點(diǎn)擊這個(gè)賬號(hào)。
6.建立key
在出現(xiàn)的窗口中,點(diǎn)擊“key”,再點(diǎn)擊“add key-creat new key”
7.在出現(xiàn)的窗口中選擇"json"
點(diǎn)擊“創(chuàng)建”之后,會(huì)自動(dòng)將一個(gè)json文件下載到你的電腦上,請(qǐng)保存好這個(gè)json文件,里面有你的key.
(二)添加系統(tǒng)變量
將上一步下載的json文件保存到你的電腦中的某一個(gè)文件夾下面,比如我就將它存在C:\google\這個(gè)文件夾下面。
然后添加環(huán)境變量。
其中變量名為:GOOGLE_APPLICATION_CREDENTIALS
變量的值就是你的json文件路徑,比如:"C:\Users\username\Downloads\你的key.json"
(三)使用google translate的客戶端
1.先安裝
pip install google-cloud-translate==2.0.1 pip install --upgrade google-cloud-storage
2.運(yùn)行測試代碼
def implicit(): from google.cloud import storage # If you don't specify credentials when constructing the client, the # client library will look for credentials in the environment. storage_client = storage.Client() # Make an authenticated API request buckets = list(storage_client.list_buckets()) print(buckets)
只要運(yùn)行上面的代碼不報(bào)錯(cuò),那就表示你的google授權(quán)成功,以后可以通過from google.cloud import translate_v3beta1 來使用google翻譯了。
示例代碼:
def translate_text_with_model(target, text, model="nmt"): """Translates text into the target language. Make sure your project is allowlisted. Target must be an ISO 639-1 language code. See https://g.co/cloud/translate/v2/translate-reference#supported_languages """ import six from google.cloud import translate_v2 as translate translate_client = translate.Client() if isinstance(text, six.binary_type): text = text.decode("utf-8") # Text can also be a sequence of strings, in which case this method # will return a sequence of results for each text. result = translate_client.translate(text, target_language=target, model=model) print(u"Text: {}".format(result["input"])) print(u"Translation: {}".format(result["translatedText"])) print(u"Detected source language: {}".format(result["detectedSourceLanguage"])) translate_text_with_model('zh-cn',"i love you")
輸出結(jié)果:
Text: i love you
Translation: 我愛你
Detected source language: en
參考:https://cloud.google.com/docs/authentication/getting-started
https://cloud.google.com/translate/docs/setup
參考:https://cloud.google.com/translate/markup
附錄:
帶詞匯表(glossaries)的翻譯
google還支持帶glossaries的翻譯,詞匯表是一種定制詞典,Cloud Translation API使用該詞典來一致地翻譯客戶的特定于域的術(shù)語。 這通常涉及指定如何轉(zhuǎn)換命名實(shí)體。
詞匯表用例可能涉及:
詞匯表中的術(shù)語可以是單個(gè)標(biāo)記(單詞)或短短語(通常少于五個(gè)單詞)。 當(dāng)前,每個(gè)項(xiàng)目的詞匯表數(shù)量上限為1000。
使用詞匯表的主要步驟是:
1.創(chuàng)建詞匯表文件(比如文本文件,每一行都是“account\賬戶”這樣的形式。
2.使用Cloud Translation API創(chuàng)建詞匯表資源
3.指定請(qǐng)求翻譯時(shí)要使用的詞匯表
一個(gè)項(xiàng)目可以有多個(gè)詞匯表。 您可以獲得可用詞匯表的列表,并且可以刪除不再需要的詞匯表。
參考:https://cloud.google.com/translate/docs/advanced/glossary#format-glossary
參考:https://cloud.google.com/translate/docs/setup
小疑問:
Q:請(qǐng)問是否需要FQ才能使用google API 翻譯?
A:不需要。
七、翻譯效果
在對(duì)代碼進(jìn)行翻譯的時(shí)候,對(duì)code、a標(biāo)簽內(nèi)的代碼可以保留不翻譯。
但是對(duì)于blockquote標(biāo)簽內(nèi)的代碼,還是翻譯了,所以還是不符合我的要求。
解決方案:將blockquote替換為code。
八、如何在linux上運(yùn)行
加入以下代碼,并將json放到相同目錄就可以了。
1 | import os |
2 | os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'credentials.json' |
九、其他問題
(一)Updated on Sep-21
寫這文章的時(shí)候是3月份,半年過去了,要使用google 翻譯的時(shí)候,發(fā)錯(cuò)它又不能用了。
運(yùn)行implicit函數(shù)的時(shí)候,并不報(bào)錯(cuò),不過運(yùn)行最終的代碼報(bào)以下錯(cuò)誤:
File "C:\Users\Kevin\Anaconda3\lib\site-packages\google\auth\transport\request
s.py", line 189, in __call__
six.raise_from(new_exc, caught_exc)
File "", line 3, in raise_from
google.auth.exceptions.TransportError: HTTPSConnectionPool(host='oauth2.googleap
is.com', port=443): Max retries exceeded with url: /token (Caused by NewConnecti
onError(': Failed to establish a new connection: [WinError 10060] A connection attempt
failed because the connected party did not properly respond after a period of ti
me, or established connection failed because connected host has failed to respon
d'))
有人在這里問:https://pythonrepo.com/repo/googleapis-google-auth-library-python-python-implementing-authentications-schemes,可是看了之后還是沒有找到解決方案。
參考:https://www.youtube.com/watch?v=ocUZgSUO-4I,重新操作了一次,還是不行。
在西數(shù)服務(wù)器上運(yùn)行,還是不行。
在國外服務(wù)器上運(yùn)行,結(jié)果報(bào)以下的錯(cuò)誤:
google.api_core.exceptions.Forbidden: 403 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: User Rate Limit Exceeded
打開上面的網(wǎng)址,得到:
{
"error": {
"code": 403,
"message": "The request is missing a valid API key.",
"errors": [
{
"message": "The request is missing a valid API key.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}
然后我進(jìn)入到gcp console,搜索"translate",然后點(diǎn)那個(gè)translate模塊,提示我激活我的賬戶,點(diǎn)"active",然后google 翻譯就可以在國外服務(wù)器上用了。
可是本地還是不行,報(bào)之前同樣的錯(cuò)誤,應(yīng)該是富墻的原因。
(二)Sep-19-2022
運(yùn)行的時(shí)候報(bào)錯(cuò):
google.api_core.exceptions.BadRequest: 400 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: Required Text
訪問報(bào)錯(cuò)中出現(xiàn)的網(wǎng)站,同樣是顯示api key的問題:
然后登陸:https://console.cloud.google.com/apis/credentials?project=stately-furnace-307600
發(fā)現(xiàn)我的API key前面有一個(gè)感嘆號(hào),顯示:
This API key is unrestricted. To prevent unauthorized use and quota theft, restrict your key to limit how it can be used.