原理:模拟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代码