使用 google 而不使用 API 翻译文本

Translate text using google without API

我正在尝试使用在线翻译服务编写一个简单的免费翻译器(QT 小部件)。 这个想法是将标准的 get 请求发送给在线翻译器,然后解析响应。 但回复不包含翻译文本!我猜这是因为该服务使用 AJAX。 在示例中,我使用的是 google 翻译器,但我使用其他翻译器(yandex、deepl)得到了类似的结果。 我知道有一个方法可以使用共享软件API,但由于该项目暂时没有商业化,所以我不想注册银行卡。 有没有类似浏览器的方式来获取没有 API 的翻译并免费使用它?

我搜索过任何信息,但令我惊讶的是,这些信息目前已过时且无关紧要(因为 Google 关闭了免费服务)。

还有一个问题。当我试图将结果转换为 QString(QString s = reply->readAll().toString() 或 QString s = reply->readAll().toStdString().c_str())时,我得到了一个扭曲的 html 代码(文件开头有很多 NUL 字符)。我假设这是由于对转义序列的误解,但如何正确转换结果呢?即使在当前版本中,文件开头也有一些垃圾 (NUL NUL Уi)。

我使用的代码是:

void getTranslate() {
    QNetworkAccessManager manager;
    QUrl url("https://translate.google.com/#view=home&op=translate&sl=en&tl=ru&text=Hello%2C%20World%20!");
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);

    do {
        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
    } while(!reply->isFinished());

    QFile html("out.html");
    if (html.open(QIODevice::ReadWrite)) {
        QDataStream out(&html);
        out <<  reply->readAll();
    }

    reply->close();

    delete reply;
}

我相信您使用 屏幕抓取 方法的问题可能是翻译应用程序使用 Ajax 调用 服务器端 并检索翻译。使用 QNetworkRequest 下载时得到的页面只是 JS application,它实际上并不包含翻译。 在从页面向服务器发出调用之前,不会被填充。 这就是它不起作用的原因。 也许你可以让它以某种方式工作,所以让我们知道你是如何做到的:-)

正在查看 Google 翻译它使用 AJAX 请求,以获取翻译。您可以尝试将 URL 更改为类似这样的内容(这是 ajax 请求的目标):

https://translate.google.de/translate_a/single?client=webapp&sl=auto&tl=en&hl=de&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=sos&dt=ss&dt=t&dt=gt&otf=2&ssel=0&tsel=0&xid=45662847&kc=1&tk=656516.836633&q=dies%20ist%20ein%20test

这个请求returnsJSON数据,应该很容易解析。

我不确定所有参数的作用,但也许这些信息对您有帮助。