白嫖Google翻译API并套壳Cloudflare免代理使用

翻译 API 接口很多,既有免费的也有付费的。如果从简单好用、无需申请和免费用量这几个维度来看,Google翻译无疑是最好的选择,唯一的不足是国内使用时需要魔法。

本文简要介绍如何在代码中使用 Google 翻译 API,并提供一个无需魔法的使用方法。

翻译 API 信息

Google 翻译 API 的请求地址为 https://translate.googleapis.com,该接口通过 GET 请求方式传递参数。具体参数如下:

  • client:固定值 gtx
  • dt:固定值 t
  • sl:源语言代码,可以设为 auto 将自动检测源语言
  • tl:目标语言代码
  • q:URL 编码后的待翻译文字

组织一个简单请求:

vbnet 复制代码
// API 请求示例
https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,亲爱的朋友

在这个示例中,将 sl 设置为了 auto,即自动检测源语言;将 tl 设置为 en,即翻译成英文。

将该 URL 复制到浏览器中打开,会自动下载一个 json.txt 文件,打开文件后的内容如下:

lua 复制代码
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] 即可获取所有翻译结果。

例如:

vbnet 复制代码
// API 请求示例
https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,亲爱的朋友.今天天气不错哦。我有肉吃,你有吗

返回结果如下:

lua 复制代码
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 复制代码
# 遍历获取所有翻译结果的 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 调用:

基本实现

python 复制代码
import requests
from urllib.parse import quote

# 定义接口 URL
url = 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?']

添加代理

然而,直接执行上述代码大概率会报 timeoutConnection 错误,这是因为国内无法访问 Google 服务。在 requests 请求中可以通过 proxies 参数设置代理,如下:

python 复制代码
import requests
from urllib.parse import quote

# 设置代理
proxies = {
    "http": "http://127.0.0.1:10809",
    "https": "http://127.0.0.1:10809"
}

# 定义接口 URL
url = 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 来进行翻译,参数一致,但返回数据结构更简单清晰

css 复制代码
{
	"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

以下是详细步骤:

  1. 打开 Cloudflare 控制台 :访问 dash.cloudflare.com/

  2. 创建一个 Worker

    登录后,在左侧面板中选择 "Workers",然后点击 "创建", 创建一个新的 Worker 服务。

  3. 为你的 Worker 起个名称,然后点击 保存。

    保存后,继续右下角点击完成

  1. 编辑代码

    完成上述步骤后,右上方点击 "编辑代码" 进入代码编辑页。删除默认代码,并用以下代码替换,然后点击右上角的 "部署"按钮进行部署。

    javascript 复制代码
    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);
      },
    };
  2. 获取路由 URL 地址

    部署成功后,点击左侧返回,然后依次点击"设置"--"触发器"

    你会看到路由地址,用该地址替换 translate.googleapis.com 即可使用。

ini 复制代码
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 域名在国内已被墙,无法直接使用。通过绑定自定义域名,便可以免去使用科学上网工具。

相关推荐
云空13 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺1 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen2 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空3 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩3 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903133 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁3 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉