Qt 调用 百度翻译api
·
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;
}
//拼接签名
// m_strAppID :开放平台账号
// m_strSalt :随机码
// m_strKey:平台分配的密钥
QString sign = m_strAppID + p_srcData + m_strSalt + m_strKey;
//生成md5
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); // 设置超时时间 10 秒
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;
//用一个js类型变量获得返回值的内容
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;
}
更多推荐




所有评论(0)