2010-05-18 74 views
1

我打算做一個iPhone搜索應用程序。用戶鍵入搜索字符串。該字符串將被谷歌,Live,雅虎等搜索引擎搜索...如何獲得XML格式的搜索結果

我需要以XML格式獲取搜索結果。有沒有辦法做到這一點。需要幫助。請。

感謝和問候, 世斌

+0

這是沒有這麼多一個關於iPhone的問題,但更多的是Google,Live,Yahoo的API功能。如果你想在iPhone上輕鬆顯示結果,你最好的選擇就是屏幕刮擦。如果你想合併結果,屏幕抓取並將詳細信息放入SQLite數據庫,然後在數據庫中對它們進行排序。 – Rudiger 2010-05-18 08:53:04

+0

@Rudiger:你能說一些關於屏幕刮擦的東西嗎? – smakstr 2010-05-18 08:55:15

+0

JUst使用NSURLConnection獲取網頁,然後使用div標籤和NSScanner從div標籤中過濾出信息。我會推薦至少使用像Google API這樣的東西。如果雅虎沒有一個,你想得到它,你將被迫屏幕刮,併成爲他們的重新設計的奴隸打破你的代碼 – Rudiger 2010-05-18 08:59:18

回答

1

A RESTful search request to Google AJAX返回格式爲JSON的響應。 JSON就像是一個非常精簡的XML版本。

谷歌不再提供它的SOAP接口,所以我不知道你是否能夠從他們那裏獲取XML,至少通過公共接口。幸運的是,JSON響應對請求和在iPhone上解析是微不足道的。

您可以使用ASIHTTPRequest發出請求,並使用json-framework解析iPhone上的JSON格式的響應。

例如,創建和提交是基於谷歌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實例您的搜索字詞,escaping的請求參數。

如果我按照谷歌的例子來寫這封信,我還會在這個URL中添加一個API密鑰。 Google要求您使用API​​密鑰進行REST搜索。您應註冊API密鑰over here並將其添加到您的請求中。

你也應該指定請求頭中的引用者的IP地址,在這種情況下將是iPhone的本地IP地址,例如:

- (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綁定。

在任何情況下,一旦你手中有谷歌的JSON格式的響應,您可以使用JSON框架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]; 
    // do stuff with searchResults... 
} 
1

有不同的Web服務API的使用。我會建議你使用這些。

谷歌搜索API:http://code.google.com/intl/sv-SE/apis/ajaxsearch/web.html

谷歌JS API的經常回JSON。但是,這也很容易。如果需要,您應該可以輕鬆地將JSON轉換爲XML。

+0

謝謝, 我找一些這樣的事情「http:// www .google.co.in/search?q = football&output = xml「,以便我可以輕鬆地從我的iPhone代碼中調用它。谷歌在說?output = xml是有效的。但它顯示一個錯誤。任何想法。? – smakstr 2010-05-18 08:59:02

+0

我得到的錯誤是它被禁止。也許它是一種付費服務或設備檢索結果的服務 – Rudiger 2010-05-18 09:08:25

相關問題