Как получить результаты поиска в формате XML - PullRequest
1 голос
/ 18 мая 2010

Я планирую сделать приложение для поиска iPhone. пользователь вводит в строку поиска. Строка будет искать в некоторых поисковых системах, таких как Google, Live, Yahoo ...

Мне нужно получить результат поиска в формате XML. Есть какой-либо способ сделать это. Нужна помощь. Пожалуйста.

Спасибо и всего наилучшего, Shibin

Ответы [ 2 ]

1 голос
/ 18 мая 2010

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...
}
1 голос
/ 18 мая 2010

Доступны различные API веб-сервисов. Я бы порекомендовал вам использовать их.

API поиска Google: http://code.google.com/intl/sv-SE/apis/ajaxsearch/web.html

Google JS API часто возвращает JSON. Но с этим тоже легко работать. При необходимости вы легко сможете преобразовать JSON в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...