Поиск в Google из приложения для iPhone - PullRequest
4 голосов
/ 25 апреля 2010

Я хочу, чтобы пользователь ввел ключевое слово в моем приложении, а затем выполнил поиск в Google по этому ключевому слову, провел некоторую логику с результатами и отобразил окончательное заключение для пользователя.

Возможно ли это? Как мне выполнить поиск на Google из моего приложения? Какой формат ответа? Если у кого-нибудь есть примеры кода для этого, они будут очень благодарны.

Спасибо

1 Ответ

10 голосов
/ 25 апреля 2010

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