A RESTful поисковый запрос к Google AJAX возвращает ответ в формате JSON .
Вы можете отправить запрос с помощью ASIHTTPRequest и проанализировать ответ в формате JSON на iPhone с json-framework .
Например, чтобысоздать и отправить запрос поиска, основанный на примере на странице Google AJAX, вы можете использовать методы -requestWithURL
и -startSynchronous
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];
Вы должны создать экземпляр NSURL
на основеВаши условия поиска , экранирующие параметры запроса.
Если бы я следовал примеру Google в письме, я бы также добавил ключ API к этому URL.Google просит использовать ключ API для поиска, но, видимо, это не требуется.Вы можете зарегистрироваться для получения ключа API здесь .
Существуют также методы асинхронного запроса, подробно описанные в документации ASIHTTPRequest.Вы можете использовать их, чтобы не связать пользовательский интерфейс iPhone во время выполнения поискового запроса.
Получив ответ отформатированный в формате JSON от Google, вы можете использовать объект парсера json-framework SBJSON
дляпроанализируйте ответ в объекте 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-адрес реферера в заголовке запроса, который в этом случае будет локальным IP-адресом iPhone, например:
- (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];
}