我打算做一个iPhone搜索应用程序。用户键入搜索字符串。该字符串将被谷歌,Live,雅虎等搜索引擎搜索...如何获得XML格式的搜索结果
我需要以XML格式获取搜索结果。有没有办法做到这一点。需要帮助。请。
感谢和问候, 世斌
我打算做一个iPhone搜索应用程序。用户键入搜索字符串。该字符串将被谷歌,Live,雅虎等搜索引擎搜索...如何获得XML格式的搜索结果
我需要以XML格式获取搜索结果。有没有办法做到这一点。需要帮助。请。
感谢和问候, 世斌
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...
}
有不同的Web服务API的使用。我会建议你使用这些。
谷歌搜索API:http://code.google.com/intl/sv-SE/apis/ajaxsearch/web.html
谷歌JS API的经常回JSON。但是,这也很容易。如果需要,您应该可以轻松地将JSON转换为XML。
这是没有这么多一个关于iPhone的问题,但更多的是Google,Live,Yahoo的API功能。如果你想在iPhone上轻松显示结果,你最好的选择就是屏幕刮擦。如果你想合并结果,屏幕抓取并将详细信息放入SQLite数据库,然后在数据库中对它们进行排序。 – Rudiger 2010-05-18 08:53:04
@Rudiger:你能说一些关于屏幕刮擦的东西吗? – smakstr 2010-05-18 08:55:15
JUst使用NSURLConnection获取网页,然后使用div标签和NSScanner从div标签中过滤出信息。我会推荐至少使用像Google API这样的东西。如果雅虎没有一个,你想得到它,你将被迫屏幕刮,并成为他们的重新设计的奴隶打破你的代码 – Rudiger 2010-05-18 08:59:18