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];
}
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. –