2010-04-25 57 views
4

Je souhaite que l'utilisateur saisisse un mot clé dans mon application, puis recherche Google pour ce mot-clé, effectue une certaine logique sur les résultats et affiche une conclusion finale pour l'utilisateur.Recherche Google depuis une application iPhone

Est-ce possible? Comment puis-je effectuer la recherche sur google à partir de mon application? Quel est le format de la réponse? Si quelqu'un a des échantillons de code pour cela, ils seraient grandement appréciés.

Merci,

+0

Hmm ... Il y a l'API de recherche Google AJAX (http://code.google.com/apis/ajaxsearch /) pour JavaScript, mais il ne semble pas y avoir un but général API comme il y en a pour d'autres services Google. –

Répondre

10

A RESTful search request to Google AJAX renvoie une réponse au format JSON.

Vous pouvez émettre la demande avec ASIHTTPRequest et analyser la réponse au format JSON sur un iPhone avec json-framework.

Par exemple, pour créer et soumettre une demande de recherche qui est basée sur l'exemple sur la page Google AJAX, vous pouvez utiliser -requestWithURL et -startSynchronous méthodes de ASIHTTPRequest:

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

Vous construirait l'instance NSURL sur la base vos termes de recherche, escaping les paramètres de la demande.

Si je suivais l'exemple de Google à la lettre, j'ajouterais également une clé API à cette URL. Google vous demande d'utiliser une clé API pour les recherches, mais il n'est apparemment pas nécessaire. Vous pouvez vous inscrire pour une clé API here.

Il existe également des méthodes de requête asynchrones détaillées dans la documentation ASIHTTPRequest. Vous utiliseriez ceux-ci pour éviter que l'interface utilisateur de l'iPhone ne soit bloquée pendant la recherche.

Une fois que vous avez Google réponse JSON formaté en main, vous pouvez utiliser l'objet analyseur JSON-cadre SBJSON pour analyser la réponse dans un objet 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]; 
} 

Vous devez également spécifier l'adresse IP referer dans l'en-tête de demande, qui dans ce cas serait l'adresse IP locale de l'iPhone, par exemple:

- (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]; 
} 
+0

Merci beaucoup pour la réponse détaillée! –

Questions connexes