Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在没有API的情况下使用google翻译文本_C++_Qt_Google Translate_Translate_Get Request - Fatal编程技术网

C++ 在没有API的情况下使用google翻译文本

C++ 在没有API的情况下使用google翻译文本,c++,qt,google-translate,translate,get-request,C++,Qt,Google Translate,Translate,Get Request,我正在尝试使用在线翻译服务编写一个简单的免费翻译器(QT小部件)。 其思想是将标准get请求发送给在线翻译程序,然后解析响应。 但是回复中没有翻译的文本!我想这是因为该服务使用AJAX。 在本例中,我使用的是谷歌翻译器,但我在其他翻译器(yandex、deepl)中也得到了类似的结果。 我知道有一种方法可以使用共享软件API,但由于该项目目前还没有商业化,我不想注册银行卡。 有没有一种类似浏览器的方式可以在没有API的情况下获得翻译并免费使用 我搜索过任何信息,但令我惊讶的是,这些信息在当时已经

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

我搜索过任何信息,但令我惊讶的是,这些信息在当时已经过时且不相关(因为谷歌关闭了免费服务)

还有一个问题。当我试图将结果强制转换为QString(QString s=reply->readAll().toString()或QString s=reply->readAll().tostString().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;
}
void getTranslate(){
QNetworkAccessManager;
QUrl url(“https://translate.google.com/#view=home&op=translate&sl=en&tl=ru&text=Hello%2C%20World%20!");
QNetworkRequest请求(url);
QNetworkReply*reply=manager.get(请求);
做{
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}而(!reply->isFinished());
QFile html(“out.html”);
if(html.open(QIODevice::ReadWrite)){
QDataStream-out(&html);
out readAll();
}
回复->关闭();
删除答复;
}

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

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

看看Google Translate,它使用AJAX请求来获得翻译。您可以尝试将URL更改为如下内容(这是ajax请求的目的地):

这个请求返回JSON数据,应该很容易解析


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

查看Google Translate,它使用AJAX请求来获取翻译。您可以尝试将URL更改为如下内容(这是ajax请求的目的地):

这个请求返回JSON数据,应该很容易解析


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

太好了,它可以工作,非常感谢!С你能解释一下你从哪里得到AJAX请求的例子吗?但是如果我更改了要翻译的文本,就会返回一个错误。可能校验和是在这里传输的。我只是在Chromes网络选项卡中查找它。是的,那么你可能需要发送一些参数,不幸的是,我不知道每个参数代表什么。太好了,它工作了,非常感谢!С你能解释一下你从哪里得到AJAX请求的例子吗?但是如果我更改了要翻译的文本,就会返回一个错误。可能校验和是在这里传输的。我只是在Chromes网络选项卡中查找它。是的,那么您可能需要发送一些参数,不幸的是,我不知道每个参数代表什么。