0

嘿伙计们,所以我对 Objective-C 领域非常陌生,甚至对互联网连接编程领域也很陌生。我正在尝试开发一个 RSS 阅读器应用程序,并且已经能够设置一个像样的 NSXMLParser 等来解析 XML 提要。然后我想添加绑定到 Google Reader 的功能。我可以连接、验证然后从页面请求,但它在我的连接上返回的是网站的直接 html 代码,而不是我希望的提要的 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)

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

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

我知道这不是身份验证错误,我真的不知道从哪里获取提要。我是从错误的 URL 获取的吗?如果我知道它不是解析器,因为它可以解析 cnet 的原始提要,以及来自他们网站的任何其他内容。

4

2 回答 2

1

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

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

如果出于某种原因您绝对需要通过 Google,您可以下载 HTML 并对其进行解析以找到 _INPUT_STREAM_ID。这包含从中下载 XML 的 URL,然后您可以发出第二个请求。

于 2011-04-02T07:00:03.410 回答
0

对于那些寻求实现这一点并且仍在寻找的人来说,我发现可以解决这个问题。

首先,您必须连接到 google,然后获取令牌,然后与网站 google.com/reader/api/0/... 进行交互

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

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

它概述了关键字以及如何与 googlereader 交互

于 2011-04-03T21:06:33.903 回答