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

相关推荐
Null箘8 分钟前
从零创建一个 Django 项目
后端·python·django
云空12 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
玖年44 分钟前
Python re模块 用法详解 学习py正则表达式看这一篇就够了 超详细
python
岑梓铭1 小时前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
游客5201 小时前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
Eric.Lee20211 小时前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Dontla1 小时前
vscode怎么设置anaconda python解释器(anaconda解释器、vscode解释器)
ide·vscode·python
qq_529025292 小时前
Torch.gather
python·深度学习·机器学习
数据小爬虫@2 小时前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架