百度翻译


前言:
公司项目中需要用到翻译功能, 国内两个翻译平台: 百度 和 有道.
有道支持:  词典结果只支持中英互译,翻译结果支持英日韩法俄西到中文的翻译以及中文到英语的翻译.  相比之下, 百度翻译功能就要强大一些.

百度翻译 API 地址: http://api.fanyi.baidu.com/api/trans/product/apidoc

百度翻译提供 27 种语言互译功能. 在每个月低于 200万 字的翻译量是免费的. 我们直接通过百度翻译 API 提供的HTTP 对外接口即可进行语言互译, 传入需要翻译的内容, 并指定翻译的源语言(支持自动检测) 和 目标语言, 就可以得到相应的翻译结果.


一、申请 ID
使用百度翻译, 首先需要申请接口中需要用到的 APPID  和 密钥
注意: 一个百度账号只能申请一个 ID

1. 在 管理控制台 中, 注册 或 登录;
2. 填写基本信息;
3. 确认申请.

申请成功后, 可以得到需要的 ID 和 密钥
百度翻译_第1张图片


二、查看 接口文档


百度翻译_第2张图片

接口中有几个必须要写入的参数:
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 编码.


三、 代码实现
在使用接口中, 使用 POSTGET 均可.
本次使用的是苹果官方 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(签名)有误, 一般是因为包含中文.


效果图
    英文 --> 中文
百度翻译_第3张图片


    英文 --> 法文




你可能感兴趣的:(iOS技术,百度翻译,翻译,有道翻译,iOS)