google API翻譯(yi)是收費(fei)的(de)(de),但翻譯(yi)比較準確,正常google翻譯(yi)的(de)(de)收費(fei)是100萬個字符20美元。我們第一(yi)(yi)次使用,當然不(bu)想就開始(shi)付費(fei),而是想先體驗一(yi)(yi)下,好在google也提供了免費(fei)試用的(de)(de)功能,會(hui)給新賬(zhang)號300$的(de)(de)額度。
要使用google API翻譯,整個流程還挺長的。由于google的文檔對新手很不好友,所以在這個過程中我也走了不少彎路,現在總結一下并分享給大家,
其中關鍵的步驟是:
希望(wang)讓有需要的人少走點彎路。
一、申請google API
(一)進入申請頁面
點擊鏈接進行申請。
(二)申請API
可能是因為google在中國被墻的原因,國家那里找了半天找不到中國的選項,后來干脆用默認選項“美國”。
由于選的是美國,所以(yi)信用卡地址那里也只能填(tian)美國的,我隨便(bian)填(tian)了一下紐約大學的地址:70 Washington Square South ,New York, NY。
300$的額度,90天內用完。
二、新建項目
按google的說法,要使用Google Cloud提供的服務(wu),您必(bi)須創建一(yi)個項(xiang)目。
一個(ge)項(xiang)(xiang)目(mu)(mu)可以組(zu)(zu)織您(nin)(nin)所有的(de)Google Cloud資源(yuan)。 一個(ge)項(xiang)(xiang)目(mu)(mu)由一組(zu)(zu)協作者,已啟(qi)用(yong)的(de)API(和(he)其他(ta)資源(yuan)),監視工具,計費信息以及(ji)身份驗證和(he)訪問控(kong)制組(zu)(zu)成。 您(nin)(nin)可以創(chuang)建(jian)(jian)一個(ge)項(xiang)(xiang)目(mu)(mu),也(ye)可以創(chuang)建(jian)(jian)多個(ge)項(xiang)(xiang)目(mu)(mu),然(ran)后使用(yong)它們在資源(yuan)層次結(jie)構中組(zu)(zu)織Google Cloud資源(yuan)。 創(chuang)建(jian)(jian)項(xiang)(xiang)目(mu)(mu)時,請記下(xia)項(xiang)(xiang)目(mu)(mu)ID。 您(nin)(nin)將需(xu)要此ID來進(jin)行API調用(yong)。
建(jian)議您為實驗,測試和生(sheng)產創(chuang)建(jian)單獨的項目。 創(chuang)建(jian)項目后,記錄項目編號(hao)或ID。 調(diao)用Cloud Translation API時,必須(xu)提供(gong)項目編號(hao)(或ID)。
三、啟用記費功能
您必須啟用計費才能使用云翻譯。
如何確認你的項目已經開啟了計費功能呢?
打開你的項目,點擊左邊導航欄的“結算”鏈接,如果看到下面的頁面,就表明你的項目已經開啟了計費的功能。
四、開啟API
(一)生成API密鑰
進入你的(de)項(xiang)目里(li),點(dian)擊執行(xing)“創建憑據->生成API密鑰(yao)”功能,就可以(yi)得到你的(de)API密鑰(yao).
(二)測試API密鑰
填上(shang)key進行測試(shi),測試(shi)代(dai)碼如下:
import requests
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf-8')#python處理字符流改成utf-8形式
def translate_text(target, content):
language_type = ""
url = "//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報以下錯誤:
{'error': {'code': 403, 'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting //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 //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': '//console.developers.google.com'}], 'status': 'PERMISSION_DENIED'}}
按上面的出錯提示,進入到這個頁面,點擊“啟用”翻譯API.
一些介紹://cloud.google.com/translate/docs/basic/quickstart?hl=zh_CN
(四)成果展示
再次運(yun)行(xing)(xing)上面的測試(shi)代碼,可以發現翻譯成功了(le)。運(yun)行(xing)(xing)結(jie)果如下(xia):
{'data': {'translations': [{'translatedText': '技術新聞和產品評論', 'detectedSourceLanguage': 'tr'}]}}
技術新聞和產品評論
參考://blog.csdn.net/javajiawei/article/details/90691108?spm=1001.2014.3001.5501
到(dao)了上面這一(yi)步就可以使(shi)用了,如果你只(zhi)是進行簡(jian)單的翻(fan)譯,那么到(dao)上一(yi)步就已經大功告成了!
不過我還有一(yi)個(ge)需求,就是可以實現對html代碼的翻譯(yi),即保留html代碼,但是翻譯(yi)代碼中的內(nei)容。所以后來又折(zhe)騰客戶端庫。
五、進行配額管理
這一步是可選步驟(zou),可以不做。
Cloud Translation具有(you)配額管理系統(tong),可(ke)幫助您(nin)(nin)和Google管理該(gai)服務的使用(yong)(yong)情(qing)(qing)況(kuang)。 默認情(qing)(qing)況(kuang)下,每(mei)天(tian)可(ke)以發送的字符數沒有(you)限制。 如果(guo)您(nin)(nin)有(you)固定的預算,建議您(nin)(nin)監控日常使用(yong)(yong)情(qing)(qing)況(kuang),并根據計劃支出調整配額。
六、設立身份驗證
如(ru)果您打算使(shi)用Cloud Translation API,則需要(yao)設(she)置身(shen)份(fen)驗(yan)證。 任何使(shi)用該API的(de)客戶端應用程序(xu)都必須經過身(shen)份(fen)驗(yan)證,并被授予對所(suo)請求資源的(de)訪(fang)問權限。
其實官方也推薦使用(yong)客戶端庫來(lai)調用(yong) Cloud Translation,因為它們可以(yi)更(geng)輕松地訪問 API
(一)獲得api json文件
1.點擊進入這個頁面(mian)
2.選擇一個項目
3.選擇“create service account”
4.建立賬號
輸入相關的信息,完成賬號的建立。
5.點擊左邊導航欄的“service account”,你會發現剛剛自己建立的賬號已經出現在里面了,點擊這個賬號。
6.建立key
在出現的窗口中,點擊“key”,再點擊“add key-creat new key”
7.在出現的窗口中選擇"json"
點(dian)擊“創建(jian)”之后,會自動將一個json文(wen)件下載到(dao)你的(de)電腦上,請保存(cun)好這(zhe)個json文(wen)件,里面有你的(de)key.
(二)添加系統變量
將上一步下載的json文件保存到你的電腦中的某一個文件夾下面,比如我就將它存在C:\google\這個文件夾下面。
然后添加環境變量。
其中變量名為:GOOGLE_APPLICATION_CREDENTIALS
變量的(de)值就(jiu)是你的(de)json文件路徑,比如:"C:\Users\username\Downloads\你的(de)key.json"
(三)使用google translate的客戶端
1.先安裝
pip install google-cloud-translate==2.0.1 pip install --upgrade google-cloud-storage
2.運行測試代碼
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)
只要運行上面的代碼(ma)不(bu)報錯,那就表示你的google授權成(cheng)功,以后可以通過(guo)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 //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")輸出結果:
Text: i love you
Translation: 我愛你
Detected source language: en
參考://cloud.google.com/docs/authentication/getting-started
//cloud.google.com/translate/docs/setup
參考(kao)://cloud.google.com/translate/markup
附錄:
帶詞匯表(glossaries)的翻譯
google還支持帶(dai)glossaries的(de)翻(fan)譯(yi),詞(ci)匯表是一(yi)種(zhong)定制詞(ci)典,Cloud Translation API使用該詞(ci)典來一(yi)致地翻(fan)譯(yi)客戶的(de)特定于域(yu)的(de)術語。 這通常涉及指定如何轉換命名實(shi)體。
詞(ci)匯(hui)表用例可能涉及:
詞匯表中(zhong)的術語(yu)可(ke)以是單(dan)(dan)個標記(單(dan)(dan)詞)或(huo)短(duan)短(duan)語(yu)(通(tong)常少(shao)于五個單(dan)(dan)詞)。 當前,每個項目的詞匯表數量上(shang)限為(wei)1000。
使用詞匯(hui)表的(de)主要(yao)步驟是:
1.創建詞匯表文件(比如文本文件,每一行都是“account\賬戶”這樣的形式。
2.使用Cloud Translation API創建詞匯表資源
3.指定請求翻譯時要使用的詞匯表
一個(ge)項(xiang)目可(ke)以(yi)有多個(ge)詞匯(hui)表(biao)。 您可(ke)以(yi)獲得可(ke)用詞匯(hui)表(biao)的列表(biao),并且可(ke)以(yi)刪(shan)除不(bu)再(zai)需要的詞匯(hui)表(biao)。
參考://cloud.google.com/translate/docs/advanced/glossary#format-glossary
參(can)考://cloud.google.com/translate/docs/setup
小疑問:
Q:請問是否需要FQ才能使用google API 翻譯?
A:不需要。
七、翻譯效果
在對代碼進行翻譯的時候,對code、a標簽內的代碼可以保留不翻譯。
但是對于blockquote標簽內的代碼,還是翻譯了,所以還是不符合我的要求。
解(jie)決方(fang)案:將blockquote替(ti)換為code。
八、如何在linux上運行
加入以下(xia)代碼,并將json放(fang)到相(xiang)同目錄就(jiu)可以了。
| 1 | import os |
| 2 | os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'credentials.json' |
九、其他問題
(一)Updated on Sep-21
寫這文章的時候是3月份,半年過去了,要使用google 翻譯的時候,發錯它又不能用了。
運行implicit函數的(de)時候(hou),并不報錯,不過運行最(zui)終的(de)代(dai)碼報以下錯誤:
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'))
有(you)人在這里問://pythonrepo.com/repo/googleapis-google-auth-library-python-python-implementing-authentications-schemes,可是(shi)(shi)看了之后(hou)還是(shi)(shi)沒有(you)找到(dao)解決方案。
參考://www.youtube.com/watch?v=ocUZgSUO-4I,重新操作(zuo)了一次,還是不行。
在西數(shu)服務(wu)器上運(yun)行,還是不(bu)行。
在(zai)國(guo)外(wai)服(fu)務(wu)器上運行,結果報以下的錯誤:
google.api_core.exceptions.Forbidden: 403 POST //translation.googleapis.com/language/translate/v2?prettyPrint=false: User Rate Limit Exceeded
打開上面的網址,得到:
{
"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"
}
}
然后我(wo)進入到gcp console,搜索(suo)"translate",然后點那個translate模塊,提(ti)示我(wo)激活我(wo)的賬(zhang)戶,點"active",然后google 翻譯(yi)就(jiu)可以在國(guo)外服務器上用(yong)了。
可是本地還(huan)是不行,報之前同樣的(de)錯(cuo)誤(wu),應該是富(fu)墻的(de)原因。
(二)Sep-19-2022
運行的時候報錯:
google.api_core.exceptions.BadRequest: 400 POST //translation.googleapis.com/language/translate/v2?prettyPrint=false: Required Text
訪問報錯中出現的網站,同樣是顯示api key的問題:
然后登陸://console.cloud.google.com/apis/credentials?project=stately-furnace-307600
發現我的API key前面有一個感嘆號,顯示:
This API key is unrestricted. To prevent unauthorized use and quota theft, restrict your key to limit how it can be used.