1

私は最近ObjectiveCで開発を始め、MicrosoftTranslatorAPIを使おうとしています。これまでのところ、appIDを使用すれば機能しますが、そのメソッドは非推奨になりました。OAuthなどを使って適切な方法でそれを学ぼうとしています。

誰かが私にaccess_tokenを取得するためのサンプル(明らかに私が持っているclientIDとclient_secretcodeなしで)を教えてもらえますか?

編集:私は十分に明確になっていないようですので、完全な話があります。

私はMicrosoftTranslatorAPIを使おうとしています。質問の時点で、AppID(現在は非推奨)を使用していた古い実装を見つけました。MS Translator APIは、認証にOAuthを使用しており、公平を期すために、当時、私は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 Translationに適合していても、他のサービスに適合させるのは難しいことではありません。ここでは、トークンは解析されず、コードは大まかなものであり、自動参照カウントを使用しているため、構成の後に自動解放が必要になる場合があることに注意してください。

于 2012-06-19T23:15:27.420 に答える