前言:
公司项目中需要用到翻译功能, 国内两个翻译平台: 百度 和 有道.
有道支持:
词典结果只支持中英互译,翻译结果支持英日韩法俄西到中文的翻译以及中文到英语的翻译. 相比之下, 百度翻译功能就要强大一些.
百度翻译 API 地址: http://api.fanyi.baidu.com/api/trans/product/apidoc
百度翻译提供 27 种语言互译功能. 在每个月低于 200万 字的翻译量是免费的. 我们直接通过百度翻译 API 提供的HTTP 对外接口即可进行语言互译, 传入需要翻译的内容, 并指定翻译的源语言(支持自动检测) 和 目标语言, 就可以得到相应的翻译结果.
一、申请 ID
二、查看 接口文档
实现代码:
GET 请求, 允许每个单词之间有空格出现, 当出现多个单词时, 可以达到翻译简单句子的效果;
使用过程中, 出现 54001 错误, 是因为sign(签名)有误, 一般是因为包含中文.
效果图
英文 --> 中文
英文 --> 法文
百度翻译 API 地址: http://api.fanyi.baidu.com/api/trans/product/apidoc
百度翻译提供 27 种语言互译功能. 在每个月低于 200万 字的翻译量是免费的. 我们直接通过百度翻译 API 提供的HTTP 对外接口即可进行语言互译, 传入需要翻译的内容, 并指定翻译的源语言(支持自动检测) 和 目标语言, 就可以得到相应的翻译结果.
一、申请 ID
使用百度翻译, 首先需要申请接口中需要用到的 APPID 和 密钥
注意: 一个百度账号只能申请一个 ID
1. 在 管理控制台 中, 注册 或 登录;
2. 填写基本信息;
3. 确认申请.
申请成功后, 可以得到需要的 ID 和 密钥
二、查看 接口文档
接口中有几个必须要写入的参数:
q: 待翻译的文本, 也是 sign(签名)的一部分
from: 翻译源语言
to: 翻译目标语言
appId: 申请的 appid
salt: 随机数, 可以直接使用
1435660288
sign: 签名 (需要 appid, q, salt, 密钥 依次拼接, 并进行 UTF-8编码, MD5 加密)
tip: 每次 q 都会变化, 所以每次的 sign 都是不固定的.
拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678
得到字符串1 =
2015063000000001
apple
1435660288
12345678
使用时的 sign 应该是 字符串1 编码后, 进行 MD5加密的 32位小写字符串
q: 带翻译的文本. 有两个用到的地方
在拼接 sign 时, 不需要进行 UTF-8 编码. 如上
在发送请求时, 一定要进行 UTF-8 编码.
三、 代码实现
在使用接口中, 使用 POST 或 GET 均可.
本次使用的是苹果官方 NSURLSession 类, 使用 GET 请求
实现代码:
//申请的 appId
NSNumber *appId = @20160412000018425;
//随机数
NSNumber *salt = @1435660288;
//密钥
NSString *pass = @"UdOPt85bzYBT_21O1XSw";
//拼接字符串
NSString *string = [NSString stringWithFormat:@"%@%@%@%@", appId, self.q, salt, pass];
//UTF8 编码
NSString *String = [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//加密
NSString *sign = [String MD5];
//对 q 进行 编码 (第二次使用)
NSString *qEncoding = [self.q stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *httpStr = @"http://api.fanyi.baidu.com/api/trans/vip/translate";
//拼接 URL
NSString *urlStr = [NSString stringWithFormat:@"%@?q=%@&from=%@&to=%@&appid=%@&salt=%@&sign=%@",
httpStr,
qEncoding,
self.fromLanguage,
self.toLanguage,
appId,
salt,
sign];
NSURL *url = [NSURL URLWithString:urlStr];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
// NSLog(@"error: %@", error);
} else {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//获取翻译后的字符串
self.resStr = [[dic objectForKey:@"trans_result"] firstObject][@"dst"];
[self performSelectorOnMainThread:@selector(translationResult) withObject:nil waitUntilDone:NO];
}
}];
//开启任务
[task resume];
GET 请求, 允许每个单词之间有空格出现, 当出现多个单词时, 可以达到翻译简单句子的效果;
使用过程中, 出现 54001 错误, 是因为sign(签名)有误, 一般是因为包含中文.
效果图
英文 --> 中文
英文 --> 法文
