文|Seraph
凡事都有原因
接触百度翻译API,主要是想用c++实现一个和TTS技术结合的翻译软件;
当然,还有一个原因就是200万字以内API调用免费。
申请与下载资料
- 首先需要申请接入百度翻译API接口。
- . 在接入文档中,可以看到相关步骤和使用方法,可以先仔细看一下,主要是了解api接口工作方式,以及其中涉及的一些知识点。
- 下载各语言DEMO中的相应代码,这里选择C版。
测试自己的appid及密钥的有效性
- 这里我们可以先试一下文档中提供的地址链接,在浏览器地址栏中输入
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
可以接收到测试例子结果:\u82f9\u679c。(即为"苹果“的Unicode码) - 测试自己appid及密码
将以上地址中appid的值替换为自己申请的,q可以替换为自己想翻译的语句,salt为一个随机数。
然后,使用在线MD5加密工具加密新组成的“appid+q+salt+密钥”字符串,并得到32位小写MD5码,将该码替换sign。
再在地址栏中输入该链接,如果得到类似测试例子的信息,则表示成功。
dst字段表示翻译结果
注意:该身份认真过程类似与HTTP协议中DIGEST认证,更改加密字符串中的任何信息,都需要重新加密得到MD5字符串。(有兴趣的,可以去了解一下HTTP协议中的几种身份认证方式)
构建开发环境
- 打开C版的Demo后,发现需要<curl/curl.h>以及<openssl/md5.h>头文件
这个两个文件分别来自libcurl和openssl开发库
他们的编译过程可见
(1)libcurl
(2)openssl - 编译好lib后,用VS2015搭建工程,建win32 Comsole Application即可
- 复制demo中代码并粘贴到源文件中,并修改如下:
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/md5.h>
#pragma comment(lib,"libcurl.lib")
#pragma comment(lib,"libcurld_imp.lib")
#pragma comment(lib,"libcrypto.lib")
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
char myurl[1000] = "http://api.fanyi.baidu.com/api/trans/vip/translate?";
char *appid = "20170520000048515"; //replace myAppid with your own appid
char *q = "pear"; //replace apple with your own text to be translate, ensure that the input text is encoded with UTF-8!
char *from = "en"; //replace en with your own language type of input text
char *to = "zh"; //replace zh with your own language type of output text
char salt[60];
int a = rand();
sprintf_s(salt, "%d", a);
char *secret_key = "sERmjSSdTNowRYvEABOr"; //replace mySecretKey with your own mySecretKey
char sign[120] = "";
strcat_s(sign, appid);
strcat_s(sign, q);
strcat_s(sign, salt);
strcat_s(sign, secret_key);
printf("%s\n", sign);
unsigned char md[16];
int i;
char tmp[3] = { '\0' }, buf[33] = { '\0' };
MD5((unsigned char *)sign, strlen(sign), md);
for (i = 0; i < 16; i++) {
sprintf_s(tmp, "%2.2x", md[i]);
strcat_s(buf, tmp);
}
printf("%s\n", buf);
strcat_s(myurl, "appid=");
strcat_s(myurl, appid);
strcat_s(myurl, "&q=");
strcat_s(myurl, q);
strcat_s(myurl, "&from=");
strcat_s(myurl, from);
strcat_s(myurl, "&to=");
strcat_s(myurl, to);
strcat_s(myurl, "&salt=");
strcat_s(myurl, salt);
strcat_s(myurl, "&sign=");
strcat_s(myurl, buf);
printf("%s\n", myurl);
//设置访问的地址
curl_easy_setopt(curl, CURLOPT_URL, myurl);
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
long responseCode = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
主要添加了lib,以及将不安全函数strcat、sprintf都换成strcat_s、sprintf_s。
同时将
MD5((unsigned char *)sign, strlen((unsigned char *)sign), md);
换成
MD5((unsigned char *)sign, strlen(sign), md);
4.为工程添加之前生成的libcurl及openssl的库文件
这里用到的相关版本号:openssl-1.1.0e、curl-7.26.0
lib主要用到libcurl.lib、libcurld_imp.lib、libcrypto.lib
同时,记得将相关dll放置exe文件目录下,如libcurld.dll、libcrypto-1_1.dll。
结果

接下来就可以将代码修改成自己想要的功能样子了,也可以按自己设计再添加一些界面和功能。
凡人皆有一死!------《权利的游戏》
网友评论