首页 > 解决方案 > 在没有 API 的情况下使用谷歌翻译文本

问题描述

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

我搜索了任何信息,但令我惊讶的是,它现在已经过时且无关紧要(因为谷歌关闭了免费服务)。

还有一个问题。当我尝试将结果转换为 QString(QString s = reply->readAll().toString() 或 QString s = reply->readAll().toStdString().c_str())时,我得到了一个扭曲的 htlm 代码(文件开头有很多 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;
}

标签: c++qtgoogle-translatetranslateget-request

解决方案


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


推荐阅读