【问题标题】:Translate text using google without API在没有 API 的情况下使用谷歌翻译文本
【发布时间】:2020-10-15 22:03:01
【问题描述】:

我正在尝试使用在线翻译服务编写一个简单的免费翻译器(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++ qt google-translate translate get-request


    【解决方案1】:

    查看谷歌翻译,它使用 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

    此请求返回 JSON 数据,应该易于解析。

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

    【讨论】:

    • 很好,它有效,非常感谢!您能否解释一下您从哪里获得的 AJAX 请求示例?
    • 但是如果我更改要翻译的文本,则会返回错误。可能校验和在这里传输。
    • 我只是在 Chromes 网络选项卡中查找它。是的,那么您可能需要发送一些参数,不幸的是我不知道每个参数代表什么。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2011-12-26
      • 2016-05-02
      • 2010-10-10
      相关资源
      最近更新 更多