Qt 调用 百度翻译api
int Translate::BaiduTranslate(QString p_srcData, QString p_fromType, QString& p_translate, QString p_toType)
{
p_srcData.replace("\n", " ");
if (p_srcData.isEmpty())
{
return -1;
}
QString sign = m_strAppID + p_srcData + m_strSalt + m_strKey;
QString md5 = QCryptographicHash::hash(sign.toUtf8(), QCryptographicHash::Md5).toHex();
QString status = "q=" + p_srcData.toUtf8().toPercentEncoding() + "&from=" + p_fromType + "&to=" \
+ p_toType + "&appid=" + m_strAppID + "&salt=" + m_strSalt + "&sign=" + md5;
QNetworkRequest request;
request.setUrl(QUrl("http://api.fanyi.baidu.com/api/trans/vip/translate?"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader, status.length());
QTimer timer;
timer.setInterval(10000);
timer.setSingleShot(true);
QNetworkAccessManager networkManager;
QNetworkReply *pReply = networkManager.post(request, status.toUtf8());
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()<<QString("QNetworkReply Error String : " + pReply->errorString());
return -1;
}
else
{
QVariant rep = pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
QByteArray data = pReply->readAll();
int errorIndex = data.indexOf("error_code");
if (errorIndex != -1)
return errorIndex;
QJsonObject jsData(QJsonDocument::fromJson(data).object());
p_translate = jsData["trans_result"].toArray()[0].toObject()["dst"].toString();
if (p_translate.endsWith("."))
p_translate.remove(p_translate.length(), 1);
qDebug()<<QString("QNetworkReply Translate Success from : " + p_srcData + " ===> " + p_translate);
return 0;
}
}
else
{
disconnect(pReply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
pReply->abort();
pReply->deleteLater();
qDebug()<<QString("QNetworkReply Timeout String : " + p_srcData);
return -1;
}
return 0;
}