01.08.12で、Bingは検索APIをAzureに変更しました。Objective-Cで認証してAzureの新しいBing検索APIを使用するにはどうすればよいですか?
私の最善の推測は、移行ワードドキュメントで提供されているPHPの例から学ぶことです!! http://go.microsoft.com/fwlink/?LinkID=248077(ああ、Webページを設定できません!)またはこのJavaの質問-JavaでのBing Search APIAzureMarketplace認証
01.08.12で、Bingは検索APIをAzureに変更しました。Objective-Cで認証してAzureの新しいBing検索APIを使用するにはどうすればよいですか?
私の最善の推測は、移行ワードドキュメントで提供されているPHPの例から学ぶことです!! http://go.microsoft.com/fwlink/?LinkID=248077(ああ、Webページを設定できません!)またはこのJavaの質問-JavaでのBing Search APIAzureMarketplace認証
次のコードで認証するためにASIHTTPRequestを使用しています。
NSString *queryString = [NSString stringWithFormat:@"'%@'", queryString];
queryString = [queryString urlEncodeUsingEncoding:NSUTF8StringEncoding]; //You'll have to implement url encoding method, preferably in a string category file
NSString *urlString = [NSString stringWithFormat:@"https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Image?Query=%@&Market='en-US'&$top=50&$format=json", queryString];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString] ];
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic];
[request setUsername:@"YOUR_KEY_HERE"];
[request setPassword:@"YOUR_KEY_HERE"];
[request setDelegate:self];
[request startAsynchronous];
appIDは必要ありませんのでご注意ください。代わりに、ユーザー名とパスワードとしてキーを渡します。データを正常に取得しています。
ただし、実際にはデータをNSStringに変換することはできません。すべてのエンコーディングを試しましたが、データから文字列を取得できません。最初のグーグルは、UTF-8でエンコードされていると言います。しかし、成功しません。
上記のコードを機能させるには、ASIHTTPフレームワークを追加する必要があります。
もう1つは、base64でエンコードされた文字列をこの形式で渡すことですyour_key:yourkeyは基本認証でも機能するはずです。
NSUrlConnectionだけを使用して動作させることができました。最初にbase64encodeする必要があります
NSString *keyString = [NSString stringWithFormat:@"%@:%@", BING_SEARCH_API_KEY, BING_SEARCH_API_KEY];
NSData *plainTextData = [keyString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainTextData base64EncodedString];
リクエストを設定します
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
[req setURL:[NSURL URLWithString:searchUrl]];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", base64String];
[req setValue:authValue forHTTPHeaderField:@"Authorization"];
リクエストする
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];
searchUrlの作成方法に関するドキュメントを参照し、$ format =で指定した形式に従ってデータを処理します(私はjsonを使用したので、私のように見えます)。
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
エラー処理を省略しました。エラーだけでなく応答もチェックして、エラー処理を追加することを忘れないでください。