白嫖Google翻譯API並套殼Cloudflare免代理使用

互聯架構唠唠嗑 2024-06-29 18:00:39

翻譯 API 接口很多,既有免費的也有付費的。如果從簡單好用、無需申請和免費用量這幾個維度來看,Google翻譯無疑是最好的選擇,唯一的不足是國內使用時需要魔法。

本文簡要介紹如何在代碼中使用 Google 翻譯 API,並提供一個無需魔法的使用方法。

翻譯 API 信息

Google 翻譯 API 的請求地址爲 https://translate.googleapis.com,該接口通過 GET 請求方式傳遞參數。具體參數如下:

client:固定值 gtxdt:固定值 tsl:源語言代碼,可以設爲 auto 將自動檢測源語言tl:目標語言代碼q:URL 編碼後的待翻譯文字

組織一個簡單請求:

// API 請求示例https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,親愛的朋友

在這個示例中,將 sl 設置爲了 auto,即自動檢測源語言;將 tl 設置爲 en,即翻譯成英文。

將該 URL 複制到浏覽器中打開,會自動下載一個 json.txt 文件,打開文件後的內容如下:

res=[ [ [ "Hello, dear friend", "你好啊,親愛的朋友", null, null, 3, null, null, [[]], [ [ ["af64405095a399ceb1e05c7abb7cda66","zh_en_2023q1.md"] ] ] ] ], null, "zh-CN", null, null, null, 1, [], [["zh-CN"],null,[1],["zh-CN"]]]

可以看到,返回的數據結構較爲複雜,其他可以忽略,只需關注翻譯結果 "Hello, dear friend",它位于返回數組 res 的第一個元素 res[0][0][0] 中。

如果發送一長串文本進行翻譯,可能會返回多個結果項,所有結果項都以數組形式位于 res[0] 中。遍曆 res[0] 即可獲取所有翻譯結果。

例如:

// API 請求示例https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,親愛的朋友.今天天氣不錯哦。我有肉吃,你有嗎

返回結果如下:

res=[ [ ['Hello, dear friend. The weather is nice today. ', '你好啊,親愛的朋友.今天天氣不錯哦。', None, None, 3, None, None, [[]], [[['af64405095a399ceb1e05c7abb7cda66', 'zh_en_2023q1.md']]]], ['I have meat to eat, do you?', '我有肉吃,你有嗎', None, None, 3, None, None, [[]], [[['af64405095a399ceb1e05c7abb7cda66', 'zh_en_2023q1.md']]]] ], None, 'zh-CN', None, None, None, 1, [], [['zh-CN'], None, [1], ['zh-CN']]]

在此示例中,只需遍曆 res[0] 即可拿到所有翻譯結果。Python 代碼如下:

# 遍曆獲取所有翻譯結果的 Python 示例代碼text = [t[0] for t in res[0]]print(text)# 輸出:['Hello, dear friend. The weather is nice today. ', 'I have meat to eat, do you?']Python 代碼實現

翻譯 API 通常由代碼調用。在 Python 代碼中,可以十分簡單地實現 Google 翻譯 API 調用:

基本實現

import requestsfrom urllib.parse import quote# 定義接口 URLurl = f'https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q={quote("你好啊,親愛的朋友.今天天氣不錯哦。我有肉吃,你有嗎")}'# 發送 GET 請求res = requests.get(url)# 提取翻譯結果text = [te[0] for te in res.json()[0]]print(text)# 輸出:['Hello, dear friend. The weather is nice today. ', 'I have meat to eat, do you?']

添加代理

然而,直接執行上述代碼大概率會報 timeout 或 Connection 錯誤,這是因爲國內無法訪問 Google 服務。在 requests 請求中可以通過 proxies 參數設置代理,如下:

import requestsfrom urllib.parse import quote# 設置代理proxies = { "http": "http://127.0.0.1:10809", "https": "http://127.0.0.1:10809"}# 定義接口 URLurl = f'https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q={quote("你好啊,親愛的朋友.今天天氣不錯哦。我有肉吃,你有嗎")}'# 發送 GET 請求res = requests.get(url, proxies=proxies)# 提取翻譯結果text = [te[0] for te in res.json()[0]]print(text)# 輸出:['Hello, dear friend. The weather is nice today. ', 'I have meat to eat, do you?']

只要你的代理配置正確,便可以看到翻譯結果。

小技巧:

其實 clients5.google.com 也可以完全替代 translate.googleapis.com 來進行翻譯,參數一致,但返回數據結構更簡單清晰

{ "sentences": [ { "trans":"Hello, dear friend", "orig":"你好啊親愛的朋友", "backend":3,"model_specification": [{"label":"offline"}],"translation_engine_debug_info": [{"model_tracking":{"checkpoint_md5":"b5157301915684a380dbc61ec02b829f","launch_doc":"efficient_models_2022q2.md"}}] } ], "src":"zh-CN","confidence":1.0,"spell":{},"ld_result":{"srclangs":["zh-CN"],"srclangs_confidences":[1.0],"extended_srclangs":["zh-CN"]}}沒有魔法怎麽辦?使用 Cloudflare

自備一個域名,然後使用 Cloudflare 提供的 Worker 服務來反向代理 Google 翻譯 API,可以免魔法使用Google翻譯API。

在 Cloudflare 中創建一個 Worker 來反代該 API

以下是詳細步驟:

打開 Cloudflare 控制台:訪問 dash.cloudflare.com/創建一個 Worker:

登錄後,在左側面板中選擇 "Workers",然後點擊 "創建", 創建一個新的 Worker 服務。

爲你的 Worker 起個名稱,然後點擊 保存。

保存後,繼續右下角點擊完成

編輯代碼:

完成上述步驟後,右上方點擊 "編輯代碼" 進入代碼編輯頁。刪除默認代碼,並用以下代碼替換,然後點擊右上角的 “部署”按鈕進行部署。

export default { async fetch(request, env, ctx) { let url = new URL(request.url); if (url.pathname.startsWith('/')) { url.hostname = "translate.googleapis.com"; let new_request = new Request(url, request); return await fetch(new_request); } return await env.ASSETS.fetch(request); },};獲取路由 URL 地址:

部署成功後,點擊左側返回,然後依次點擊“設置”--“觸發器”

你會看到路由地址,用該地址替換 translate.googleapis.com 即可使用。

res=requests.get(f'https://g3.pyvideotrans.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q={quote("你好啊,親愛的朋友.今天天氣不錯哦。我有肉吃,你有嗎")}',proxies=proxies)

你也可以點擊上方的 "添加自定義域" 綁定自己的域名。強烈建議這樣做,因爲 workers.dev 域名在國內已被牆,無法直接使用。通過綁定自定義域名,便可以免去使用科學上網工具。

作者:mortimer鏈接:https://juejin.cn/post/7384632027230519330

0 阅读:4

互聯架構唠唠嗑

簡介:感謝大家的關注