1

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認証

4

2 に答える 2

3

次のコードで認証するために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は基本認証でも機能するはずです。

于 2012-08-04T14:57:38.597 に答える
0

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];

エラー処理を省略しました。エラーだけでなく応答もチェックして、エラー処理を追加することを忘れないでください。

于 2013-03-08T23:15:20.780 に答える