使用 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 请求的目标):
这个请求returnsJSON数据,应该很容易解析。
我不确定所有参数的作用,但也许这些信息对您有帮助。
我正在尝试使用在线翻译服务编写一个简单的免费翻译器(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 请求的目标):
这个请求returnsJSON数据,应该很容易解析。
我不确定所有参数的作用,但也许这些信息对您有帮助。