MediaRSSParser
是一个易于使用的 Media RSS 解析器,基于 AFNetworking 构建。
MediaRSSParser
受到 BlockRSSParser 的启发,最初基于它进行构建。
如果您要从 BlockRSSParser
切换到 MediaRSSParser
,这将非常简单,因为公开的方法签名相似。
另外,您可以按照以下步骤手动将 MediaRSSParser
包含到项目中:
1) 将此仓库在本地的计算机上克隆,或者点击 下载ZIP
简单地下载最新的 master
提交。
2) 将 MediaRSSParser
文件夹拖动到您的应用程序项目中,确保勾选了 将项目文件夹中的项目复制到目标组文件夹(如果需要)
。
3) 将 AFNetworking 添加到您的项目中(它是这个库的依赖项)。
MediaRSSParser
设计用来快速轻松地处理 Media RSS源。
1) 在需要 RSS 解析的地方添加 #import "MediaRSSParser.h"
,或者只需使用模型时添加 #import "MediaRSSModels.h"
。
2) 使用 RSSParser
类从 URL 字符串解析 RSS 源。
在示例中
RSSParser *parser = [[RSSParser alloc] init];
self.parser = parser;
__weak typeof(self) weakSelf = self;
NSString *feedURLString = @"...";
NSDictionary *parameters = @{@"...": @"..."};
[self.parser parseRSSFeed:feedURLString
parameters:parameters
success:^(RSSChannel *channel) {
weakSelf.feedItems = channel.items;
[weakSelf.tableView reloadData];
}
failure:^(NSError *error) {
NSLog(@"An error occurred: %@", error);
}];
3) 您最常使用的模型是 RSSChannel
,它表示 RSS 的 channel
元素,以及 RSSItem
,它表示 RSS 的 item
元素。
查看 RSSChannel
或 RSSItem
的头文件以了解这些模型的文档。
(您还可以克隆此仓库并查看项目单元测试以获取使用示例。)
让我们说实话:RSS 是世界上最糟糕的协议之一。不幸的是,它也是最常使用的之一。
为什么会这样?我想是因为这对于服务器端开发人员/管理员来说相对容易设置;它已经存在很长时间了;它“感觉”熟悉(因为乍一看似乎很简单)。
RSS 存在许多问题,但至少有两个主要问题:
1) 尽管 存在 RSS 规范,但存在许多不同的解释和/或变体。
结果,相同的 元素
在不同的内容提供者中有轻微的差异,或有时名称不同(例如,item
与 entry
)。一些提供商可能表示他们遵守规范,但他们的源可能缺少所需的元素或错误命名元素(因此实际上并不符合规范)。
为了缩小本项目的范围,将把 RSS 2.0
规范作为基础规范,如在本 RSS 2.0 规范副页中定义的那样。
2) RSS 规范还允许通过命名空间添加新元素。
因此,Media RSS 实际上只是 RSS 2.0 中的命名空间添加。
再次为了缩小项目范围,将把 Media RSS
理解为在以下 Media RSS 副页定义的命名空间规范。
本项目旨在通过以下方式减轻这些问题
1) 允许匹配方法(请参阅 RSSParser.m
私有方法),允许不同的元素名称匹配同一个模型对象/属性(例如 item
和 entry
都映射为 RSSItem
对象)。
2) 允许添加其他 RSS 命名空间元素,只要它们(i)被广泛使用(根据其他开发者的流行请求,如果可以这样说的),并且(ii)有一个在线网页描述命名空间规范。
注意:如果你正在对你的项目进行非常特殊的工作并需要创建自己的 RSS 命名空间添加,这不太可能进入主仓库。
相反,你最好分支这个仓库,在你的分支中做出更改,并定期从主仓库pull
更改。
MediaRSSParser
有一个明确的目标
1) 尽可能地简化 RSS 流的处理并允许第三方开发者为使用此存储库。
这意味着,使第三方开发者为以下问题提供快速答案变得简单
"我在哪里可以找到 RSS 和/或 Media RSS 的当前版本规范?”
-- 请参阅主文件(MediaRSSParser.h
或 MediaRSSModels.h
),其中包含对文档的链接,但在此也可以找到: RSS 2.0 和 Media RSS 1.5.1。
"这个模型中的属性是什么用途?”
-- 请参阅有疑问模型的头文件,其中包含对每个属性的内部文档。
"解析器是如何工作的,我如何知道它将在未来的版本中继续工作?”
-- 请参阅大量的类似于句子的单元测试,用于使用示例和代码中的文档来记录事物应该如何工作。
1) 记录一切(对所有头文件的 100% 文档)。这与“尽可能简单使用”是一致的。
2) 单元测试一切(所有代码行的 100% 单元测试)。这有助于确保代码现在可以工作并将继续在未来的工作。
MediaRSSParser
最初是在 BlockRSSParser
之上构建的,但它们有几个设计上的差异和目标
主要区别是 MediaRSSParser
支持 Media RSS(请参阅 http://www.rssboard.org/media-rss),而 BlockRSSParser
目前(截至 5/13/14)不支持此项。
MediaRSSParser
还直接提供与复杂 RSS 元素相对应的模型对象。具体来说,RSSChannel
对应于 channel
元素,RSSItem
对应于 item
元素,RSSMediaContent
对应于 media:content
元素等。
BlockRSSParser
使用 NSDictionary
对象来表示某些复杂元素或完全省略这些元素。也没有一个很好的计划来支持将来 BlockRSSParser 如何轻松支持额外的元素或命名空间(如 Media RSS)。
MediaRSSParser
使用本地对象而不是字典的主要原因有以下两个: (i) 对于开发者来说,与对象/键字典对相比,通常是更容易处理本地对象,(ii) 它提供了清晰的支持额外复杂元素的路径,未来只需要添加适当的模型对象来表示它们。
MediaRSSParser
基于原始的 BlockRSSParser
并在版本 2.1
处分化。因此,MediaRSSParser
的第一个版本实际上是 BlockRSSParser
的分支版本 3.0
。因此,将 BlockRSSParser
的 Git 历史也包含在 MediaRSSParser
存储库中。
然而,为了避免混淆,MediaRSSParser
从版本 1.0
开始有自己的版本控制(现在它是与 BlockRSSParser
完全分开的项目)。
欢迎提交补丁和常用标签的添加!
要做出贡献
1) 教宗此存储库。
2) 进行您的更改。
3) 为您的更改编写单元测试(如有需要)。
如果您以前从未编写过单元测试,那没关系!
您可以通过检查 Jon Reid(@qcoding)的优秀网站来学习,包括一个专门关于单元测试的部分。
4) 为您的属性和/或公开方法添加编写文档注释。
如果您提出添加新标签(例如,支持其他命名空间),您 必须 从在线文档中包含一个链接。
本项目是 CocoaPods 规范存储库的一部分,包括应用程序调用文档上的每个 pod 的托管文档。
如果您不熟悉应用程序调用,请查看 Mattt Thompson(@matt)关于它的介绍性帖子。
5) 提交拉取请求。
务必包括更改为何需要的理由(特别是对新标签的添加)。
最后但同样重要的是,坐下来享受您在帮助使您的同行开发者生活变得更加轻松中所发挥的卓越作用!
谢谢 !!!!
与 BlockRSSParser
和 AFNetworking
一样,本项目受 MIT 许可证的约束(有关更多详细信息,请参阅 LICENSE
文件)。