2010-05-18 78 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

相关问题