1

我最近开始使用 Objective C 进行开发,并且正在尝试使用 Microsoft Translator API。到目前为止,如果我使用 appID,它就可以工作,但现在不推荐使用该方法。我正在尝试使用 OAuth 等以正确的方式学习它。

谁能给我一个样本(显然没有我拥有的clientID和client_secretcode)来获取access_token?

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

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

希望现在更清楚:)

4

1 回答 1

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 翻译,也应该不难将其适用于其他服务。在这里,令牌没有被解析,代码很粗糙,因为我使用的是自动引用计数,所以应该注意,在您的配置之后可能需要自动释放。

于 2012-06-19T23:15:27.420 回答