A RESTful поисковый запрос к Google AJAX возвращает ответ в формате JSON . JSON - это очень урезанная версия XML.
Google больше не делает свой интерфейс SOAP доступным, поэтому я не знаю, сможете ли вы получить от них XML, по крайней мере, через общедоступный интерфейс. К счастью для вас, ответы JSON тривиальны, чтобы запрашивать и анализировать на iPhone.
Вы можете отправить запрос с помощью ASIHTTPRequest и проанализировать ответ в формате JSON на iPhone с json-framework .
Например, для создания и отправки поискового запроса, основанного на примере на странице 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 к письму, я бы также добавил ключ API к этому URL. Google просит использовать ключ API для поиска REST. Вам необходимо зарегистрировать ключ API здесь и добавить его к своим запросам.
Вы также должны указать IP-адрес реферера в заголовке запроса, который в этом случае будет локальным IP-адресом iPhone, например ::1010 *
- (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];
}
Существуют также методы асинхронного запроса, подробно описанные в документации ASIHTTPRequest. Вы можете использовать их, чтобы не связать пользовательский интерфейс iPhone во время выполнения поискового запроса.
В любом случае, если у вас есть ответ Google в формате JSON, вы можете использовать объект синтаксического анализатора SBJSON
json-framework для анализа ответа в 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];
// do stuff with searchResults...
}