BNRSSFeedParser 2.1.3

BNRSSFeedParser 2.1.3

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2014年12月

Chris Kalafarski维护。



如何使用

BNRSSFeedParser(及其 BNPodcastFeedParser)是处理 HTTP RSS 资源的一站式商店。解析非常简单,并不一定要太关心 RSS 规范。生成对象的接口尽可能遵守它们格式的标准。

安装

可通过 CocoaPods 安装库

pod 'BNRSSFeedParser', '~> 2.1'
BNRSSFeedParser

解析器类处理所有繁重的任务。parseFeedURL: 方法

- (void)parseFeedURL:(NSURL*)feedURL withETag:(NSString*)feedETag untilPubDate:(NSDate*)pubDate success:(void (^)(NSHTTPURLResponse*, BNRSSFeed*))success failure:(void (^)(NSHTTPURLResponse*, NSError*))failure

接受 RSS 源的 URL 以及可选的 ETag、日期、成功和失败块。

如果提供了 ETag,它将被分配给用于请求 RSS 数据的 NSURLRequest。如果它是匹配的(服务器返回 HTTP 304),将调用失败块(不会发生解析,也不会从解析器中提供该源),您可以检查传递给块的 NSHTTPURLResponsestatusCode 以确定原因是否为 ETag 匹配。

如果有任何其他原因解析失败,也将调用失败块。

如果提供了 pubDate,在解析 RSS 源的项元素时,将比较提供的 pubDate,并且当项与提供的 pubDate 相等或之前时将停止解析。这是按照顺序进行的,即项在源中出现的顺序;这是为了提高速度和效率,所以如果源中的项顺序不正确,解析器可能找不到它们。解析器和源都不会知道有多少(如果有的话)项没有被解析。

由于源 pubDate(即通道元素的子代 pubDate 元素)不准确,因此 忽略。这可以防止解析器在源 pubDate 与最新源项不同步(即较早)时过早退出。

本质上,解析器将构建一个从 RSS 源到 NSDictionary 的字典,几乎不做验证。所有元素、属性和文本节点都将尽可能以合理的方式复制到字典中。如果元素仅包含文本节点,则在字典中相应键的值将是一个包含文本的 NSString。如果元素还(或仅)包含子元素,则值将是一个 NSDictionary;文本节点将有键 “@"__text__"”。

XML元素的属性也会映射到结果中的NSDictionary对象的关键字中。

当存在等价兄弟元素(例如多个<item>元素)时,它们将被放入一个NSArray中。包含字典中的数组关键字是元素的名称,它不会变成复数形式。在所有情况下,解析器都不会假设元素是集合的一部分。也就是说,只有一个item元素的feed将不会有一个包含一个item的数组;它将直接有一个字典。

在此之后,该字典将被转换为BNRSSFeed(或BNPodcastFeed)对象,然后传递给parseFeedURL:success块。

BNRSSFeedParser对象本身确实有一个feed属性,但它只在使用完毕并且XML解析完成后才可用。你通常只需处理作为success块传递的feed对象,并且很可能没有必要在此之后保留解析器对象。

BNRSSFeed

BNRSSFeedNSDictionary的子类,并为RSS 2.0频道元素的已定义属性提供类型安全的访问器。与解析器生成的基础字典不同,这些属性尽量严格符合RSS规范。

目前,一些较少使用的元素尚未包含,如skipHours。它们可能最终会被添加。

预期为URL的元素返回为NSURL对象,日期也是如此(到NSDate)。某些属性(例如categoriesitems)将始终返回一个数组,无论feed中包含多少元素。

因为BNRSSFeedNSDictionary的子类,所以你可以始终获取从feed解析的任何值,即使没有便利属性。`channel`属性返回原始feed中<rss><channel>元素中所包含所有数据的NSDictionary

`items`属性返回一个代表解析从feed中的所有item元素的BNRSSFeedItem(或BNPodcastFeedItem)对象的NSArray

BNRSSFeedItem

类似于BNRSSFeedBNRSSFeedItemNSDictionary的子类,并为属于RSS feed项的常见元素提供便利属性。这也有助于它们严格遵守规范。

BNRSSFeed对象的enclosure属性返回一个BNRSSFeedItemEnclosure对象。

BNRSSFeedItemEnclosure

这是NSDictionary的子类,具有urllengthtype属性。

播客

播客子类为一些属性提供更具体的接口,这些属性对通用RSS feed不适用。包括iTunes特定元素。尚未包含所有与播客相关的属性。

注意事项

虽然解析器类通常不关心feed中的数据,但对象类会。如果feed包含不符合RSS规范的日期,对象属性将失败。如果一个item包含多个enclosure,对象将简单地返回第一个。

BNRSSFeedParser会在调用parser:parseErrorOccurred:时调用failure块。根据文档,当调用abortParsing时,应该调用parser:parseErrorOccurred:。如果传入一个pubDate并导致解析停止,abortParsing会被调用。然而,这似乎并没有导致parser:parseErrorOccurred:被调用。

BNRSSFeedParser的正确行为是:如果因为pubDate而停止解析,则应调用success块,不应调用failure块。如果未来abortParsing的行为发生变化(例如,以匹配当前的文档),这些期望可能不会实现。