4

ユーザーにアプリにキーワードを入力してもらい、グーグルでこのキーワードを検索し、結果に対していくつかのロジックを実行して、ユーザーに最終的な結論を表示させたいと思います。

これは可能ですか?アプリからグーグルで検索を実行するにはどうすればよいですか?返信の形式は何ですか?誰かがこれのためのいくつかのコードサンプルを持っているならば、彼らは大いに感謝されるでしょう。

ありがとう、

4

1 に答える 1

10

Google AJAXへのRESTful検索リクエストは、 JSON形式でレスポンスを返します。

ASIHTTPRequestを使用してリクエストを発行し、json-frameworkを使用してiPhoneでJSON形式の応答を解析できます。

たとえば、Google AJAXページの例に基づいた検索リクエストを作成して送信するには、ASIHTTPRequest-requestWithURL-startSynchronousメソッドを使用できます。

NSURL *searchURL = [NSURL URLWithString:@"http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton"];
ASIHTTPRequest *googleRequest = [ASIHTTPRequest requestWithURL:searchURL];
[googleRequest addRequestHeader:@"Referer" value:[self deviceIPAddress]]; 
[googleRequest startSynchronous];

NSURL検索用語に基づいてインスタンスを構築し、リクエストパラメータをエスケープします。

Googleの例に従って手紙を書いた場合、このURLにAPIキーも追加します。Googleは、検索にAPIキーを使用するように求めていますが、明らかに必須ではありません。ここでAPIキーにサインアップできます。

ASIHTTPRequestのドキュメントで詳しく説明されている非同期リクエストメソッドもあります。これらを使用して、検索要求が行われている間、iPhoneUIが拘束されないようにします。

GoogleのJSON形式の応答を入手したら、json-frameworkSBJSONパーサーオブジェクトを使用して応答をオブジェクトに解析できNSDictionaryます。

NSError *requestError = [googleRequest error];
if (!requestError) {
    SBJSON *jsonParser = [[SBJSON alloc] init];
    NSString *googleResponse = [googleRequest responseString];
    NSDictionary *searchResults = [jsonParser objectWithString:googleResponse error:nil];
    [jsonParser release];
}

また、リクエストヘッダーでリファラーIPアドレスを指定する必要があります。この場合、これはiPhoneのローカルIPアドレスになります。例:

- (NSString *) deviceIPAddress {
    char iphoneIP[255];
    strcpy(iphoneIP,"127.0.0.1"); // if everything fails
    NSHost *myHost = [NSHost currentHost];
    if (myHost) {
        NSString *address = [myHost address];    
        if (address)
            strcpy(iphoneIP, [address cStringUsingEncoding:NSUTF8StringEncoding]);
    }
    return [NSString stringWithFormat:@"%s",iphoneIP]; 
}
于 2010-04-25T09:20:09.537 に答える