我打算制作一款iPhone搜索应用。用户键入搜索字符串。一些搜索引擎会搜索该字符串,如Google,Live,Yahoo ......
我需要以XML格式获取搜索结果。有没有办法做到这一点。需要帮助。请。
谢谢和问候, 世斌
答案 0 :(得分:1)
有不同的Web服务API可用。我建议你使用它们。
Google搜索API: http://code.google.com/intl/sv-SE/apis/ajaxsearch/web.html
Google JS API经常返回JSON。但这也很容易合作。如果需要,您应该能够轻松地将JSON转换为XML。
答案 1 :(得分:1)
RESTful search request to Google AJAX以JSON格式返回回复。 JSON就像是一个非常精简的XML版本。
Google不再使其SOAP接口可用,因此我不知道您是否能够从它们获取XML,至少通过公共接口。幸运的是,JSON响应对于请求和解析iPhone来说是微不足道的。
您可以使用ASIHTTPRequest发出请求,并使用json-framework在iPhone上解析JSON格式的回复。
例如,要创建并提交基于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
实例,escaping请求参数。
如果我按照Google的示例,我还会在此网址中添加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 UI在搜索请求时被绑定。
无论如何,一旦掌握了Google的JSON格式响应,就可以使用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];
// do stuff with searchResults...
}