前言
本文实现了一个翻译小工具,目前使用 百度翻译API
及 腾讯AI平台的机器翻译API
;若有免费的API接口,未来也会考虑加上。
目前界面任然比较简陋,功能比较单一。有啥想法可以留言,有空的话一定加上!
源码已托管至 GitHub-THelper。
v0.2 展示如下:
接入原理
- 按照
API
说明文档要求对请求参数进行拼接 - 通过网络发送
http/https
请求(get/post
) - 解析返回的
Json
数据
Http/Https 在线测试
在未拼接API请求之前如何测试 https
请求及解析是否正常呢?
-
淘宝查询电话号码归属地(可用)
https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号
百度翻译API
原理
使用百度通用翻译API,其实只需要按照官方文档格式发送一个 http/https
请求。
- 通用翻译API HTTP地址:
http://api.fanyi.baidu.com/api/trans/vip/translate
- 通用翻译API HTTPS地址:
https://fanyi-api.baidu.com/api/trans/vip/translate
参数表单如下:
然后接收应答;应答数据为 Json
格式,我们需要解析它拿到我们需要的翻译文本。
{
"from": "en",
"to":"zh",
"trans_result":[{
"src":"apple",
"dst":"\u82f9\u679c"
}]
}
网络请求
Qt 中的 Http请求
可以用 QNetworkAccessManager
实现,本处使用的是 Get
请求:
QNetworkAccessManager *mnetwork_Manager = new QNetworkAccessManager;
QNetworkRequest *request= new QNetworkRequest;
QMetaObject::Connection connRet = QObject::connect(mnetwork_Manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
Q_ASSERT(connRet);
request->setUrl(QUrl(str_request));
qDebug() << str_request;
mnetwork_Manager->get(*request);
签名
MD5
QT中提供了 QCryptographicHash
,可用于 MD5
加密:
//MD5 - 签名
QString str_noencrypt = APPID.toUtf8() + strinput + QString::number(mrand).toUtf8() + Key.toUtf8();
QString signature = QCryptographicHash::hash(str_noencrypt.toUtf8(),QCryptographicHash::Md5).toHex();
注意:按照文档提示, 在生成签名拼接 appid+q+salt+密钥 字符串时,q
(即 strinput
)不需要做 URL encode
,在生成签名之后,发送 HTTP
请求之前才需要对要发送的待翻译文本字段 q
(即strinput
)做 URL encode
。
随机数
这里使用 QTime
生成伪随机数: