1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Qt调用谷歌翻译API

Qt调用谷歌翻译API

时间:2020-07-07 15:32:31

相关推荐

Qt调用谷歌翻译API

原理:模拟Google翻译网页请求。

ps:频繁调用会封IP哦

QString GoogleAPI::translateText(QString text, QString sourceLang, QString targetLang){QString retStr="";QString finalPath = m_path +"?client="+m_client+"&sl="+sourceLang+"&tl="+targetLang+"&dt=t&q="+ text.toUtf8().toPercentEncoding();postHttp(finalPath, retStr);return retStr;}int GoogleAPI::postHttp(QString finalPath, QString& p_translate){QNetworkRequest request;request.setUrl(QUrl::fromEncoded(finalPath.toUtf8()));request.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=utf-8");QTimer timer;timer.setInterval(10000); // 设置超时时间 10 秒timer.setSingleShot(true); // 单次触发QNetworkAccessManager networkManager;QNetworkReply *pReply = networkManager.get(request);QEventLoop loop;connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);connect(pReply, &QNetworkReply::finished, &loop, &QEventLoop::quit);timer.start();loop.exec();if (timer.isActive()){// 处理响应timer.stop();if (pReply->error() != QNetworkReply::NoError){// 错误处理qDebug()<<"GoogleAPI::postHttp() QNetworkReply Error String : " << pReply->errorString();return -1;}else{QByteArray data = pReply->readAll();//如果有错误的序列号int errorIndex = data.indexOf("error_code");if (errorIndex != -1)return errorIndex;//直接截取 QByteArray dataQString dstStr = QString(data);int startPos = dstStr.indexOf("[\"");int endPos = dstStr.indexOf("\",\"");p_translate = dstStr.mid(startPos + 3, endPos - startPos - 3);//用一个js类型变量获得返回值的内容 ----json解析太麻烦// QJsonParseError jsonError;// QJsonDocument doucment = QJsonDocument::fromJson(data, &jsonError);// if(!doucment.isNull() && (jsonError.error == QJsonParseError::NoError))// {//if (doucment.isArray())//{//QJsonArray array = doucment.array();//if(array.count() > 0)//{// QJsonValue value = array.at(0);// if(value.isArray())// {// QJsonArray array1 = value.toArray();// if(array1.count() > 0)// {// QJsonValue value1 = array1.at(0);// if(value1.isArray())// {// QJsonArray array2 = value1.toArray();// if(array2.count() > 0)// {// QString s = array2.at(0).toString();// qDebug()<< s;// }// }// }// }//}//}// }return 0;}}else{// 处理超时disconnect(pReply, &QNetworkReply::finished, &loop, &QEventLoop::quit);pReply->abort();pReply->deleteLater();qDebug()<<"QNetworkReply Timeout String : " << finalPath;return -1;}return 0;}

参考博客 调用谷歌翻译API(FREE)的java代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。