解析谷歌阅读器数据

时间:2011-04-02 03:38:15

标签: objective-c nsurlconnection nsxmlparser google-reader

嘿伙计们,所以我对Objective-C领域非常陌生,甚至对编程互联网连接的体育场也更新。我正在尝试使用RSS阅读器应用程序,并且能够设置一个像样的NSXMLParser,以解析XML提要。然后,我想添加与Google阅读器绑定的功能。我可以连接,验证然后从页面请求,但它在我的连接上返回的是网站的直接html代码,而不是像我希望的那样的Feed的XML ...我的问题是如何获得谷歌阅读器提要的XML数据?这是我的代码:

NSMutableURLRequest* request=[NSMutableURLRequest requestWithURL:URL];

[request setValue:[authCodes objectForKey:@"Auth"] forHTTPHeaderField:@"Auth"];
[request setValue:[authCodes objectForKey:@"SID"] forHTTPHeaderField:@"SID"];
//[request setHTTPMethod:@"GET"];

NSURLConnection* conn=[NSURLConnection connectionWithRequest:request delegate:self];

[conn start];  

然后是两个委托方法:

-(void)connection: (NSURLConnection *)connection didReceiveData:(NSData *)data
{
if (connectionData==nil) {
        connectionData=[[NSMutableData alloc] init ];
    }
    NSLog(@"CONNECTION");
    [connectionData appendData:data];

}

-(void) connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Connection Closed");

    NSString *tempString = [[NSString alloc] initWithData:connectionData encoding:NSASCIIStringEncoding];
    NSLog(@"The Data is Equal To: %@", tempString);

    rssParser=[[NSXMLParser alloc] initWithData:connectionData];

    [rssParser setDelegate:self];
    [rssParser setShouldProcessNamespaces:YES];
    [rssParser setShouldReportNamespacePrefixes:YES];
    [rssParser setShouldResolveExternalEntities:NO];

    [rssParser parse];

}

然后继续解析,显然是在给我一个错误,说它不知道如何解析它。 (错误代码76)

这是我要连接的网址: http://www.google.com/reader/view/feed/http%3A%2F%2Fnews.cnet.com%2F2547-1_3-0-20.xml

以下是收到的数据打印出来的内容...当我把它放在那里时开玩笑Stack Overflow将其解析为HTML并将其显示为...

我知道这不是一个身份验证错误,我真的很难知道从哪里获取Feed。我是从错误的网址获取的吗?如果我知道它不是解析器,因为它解析了很好的cnet的原始feed,以及其他任何直接来自他们的站点。

2 个答案:

答案 0 :(得分:1)

NSURLConnection将向提供的URL发出请求,并下载存储在那里的任何数据。当您在网络浏览器中输入http://www.google.com/reader/view/feed/http://news.cnet.com/2547-1_3-0-20.xml时,您会看到它将您带到Google阅读器网站(HTML),而不是您可以直接解析的XML Feed。

我不确定您从哪里生成网址。如果您知道XML Feed本身的URL,则应该直接使用它。看起来Google阅读器网址的格式为http://www.google.com/reader/view/feed/[feed_url]。因此,如果您已经拥有Google阅读器网址,则可以提取Feed网址并将其用于您的请求。

如果由于某种原因你绝对需要通过谷歌,你可以下载HTML并解析它以找到_INPUT_STREAM_ID。这包含从中下载XML的URL,然后您可以再次发出请求。

答案 1 :(得分:0)

对于那些正在寻求实现这一点但仍在寻找这些的人,我发现了解决这个问题。

首先你必须连接谷歌,然后获得一个令牌,然后与网站互动google.com/reader/api/0 /...

这是我发现非常有帮助的网站:

http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI

概述了关键字以及如何与googlereader进行互动