Microsoft Translator API - iOS

时间:2012-06-19 14:40:22

标签: ios oauth-2.0 microsoft-translator

我最近在Objective C中进行了开发,并且我正在尝试使用Microsoft Translator API。到目前为止,如果我使用appID,它仍然有效,但现在不推荐使用该方法。我正在尝试使用OAuth等方法学习它。

有人可以给我一个样本(显然没有clientID和client_secretcode,我都有)获取access_token吗?

编辑:似乎我还不够清楚,所以有完整的故事。

我一直在尝试使用Microsoft Translator API。在提问时,我发现了一个使用AppID的旧实现(现已弃用)。 MS Translator API正在使用OAuth进行身份验证,并且公平,当时我不知道如何处理它。现在,我这样做,我发布了我的代码,以便人们可以在遇到同样问题时得到它。

希望现在更清楚了:))

1 个答案:

答案 0 :(得分:1)

以下是我可以提供的样本:

-(IBAction)getToken:(id)sender {
NSString *clientSecret = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                                      (CFStringRef)CLIENT_SECRETCODE,
                                                                                      NULL,
                                                                                      (CFStringRef) @"!*'();:@&=+$,/?%#[]",
                                                                                      kCFStringEncodingUTF8);
NSMutableString* authHeader = [NSMutableString stringWithString:@"client_id="];
[authHeader appendString:CLIENT_ID];
[authHeader appendString:@"&client_secret="];
[authHeader appendString:clientSecret];
[authHeader appendString:@"&grant_type=client_credentials&scope=http://api.microsofttranslator.com"];



NSMutableURLRequest *request =[NSMutableURLRequest
                               requestWithURL:[NSURL URLWithString:TOKEN_STRING]
                               cachePolicy:NSURLRequestUseProtocolCachePolicy
                               timeoutInterval:60.0];

[request setHTTPMethod:@"POST"];
[request addValue:@"application/x-www-form-urlencoded"
         forHTTPHeaderField:@"Content-Type"];

const char *bytes = [authHeader UTF8String];
[request setHTTPBody:[NSData dataWithBytes:bytes length:strlen(bytes)]];

NSURLResponse* response; 
NSError* error;

NSData* data = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];

if (data != nil) {
    NSString* contents = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
    NSString *formattedContents = [contents stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

即使它适用于Microsoft翻译,也不难将其用于其他服务。这里,令牌没有被解析,代码很粗糙,因为我使用自动引用计数,应该注意在配置后可能需要自动释放。