MWFeedParser 1.0.1

MWFeedParser 1.0.1

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

Michael Waterfall 维护。



  • Michael Waterfall

MWFeedParser — iOS 的 RSS 和 Atom 网络源解析器

MWFeedParser 是一个 Objective-C 框架,用于下载和解析 RSS (1.* 和 2.*) 和 Atom 网络源。它是一个非常简单且干净的实现,可以从网络源读取以下信息

源信息

  • 标题
  • 链接
  • 摘要

源条目

  • 标题
  • 链接
  • 作者名称
  • 日期(条目发布日期)
  • 更新日期(条目更新日期,如果有)
  • 摘要(条目简要描述)
  • 内容(详细条目内容,如果有)
  • 封装(例如:播客、mp3、pdf 等)
  • 标识符(条目的 guid/id)

如果您在您的 iPhone/iPad 应用程序中使用 MWFeedParser,请告诉我,我很乐意查看它:)

重要:此免费软件根据 MIT 许可(X11 许可证)提供,并附加以下条件:

此软件不能用于存档或收集(但不限于)事件、新闻、体验和活动等数据,以用于任何与日记/日志相关的概念。

完整许可证可在本文件的末尾找到。

示例/示例应用程序

在项目中有示例 iPhone 应用程序,展示如何使用解析器显示源标题,列出所有源条目,并在点击时显示更详细的条目。

设置解析器

创建解析器

// Create feed parser and pass the URL of the feed
NSURL *feedURL = [NSURL URLWithString:@"http://images.apple.com/main/rss/hotnews/hotnews.rss"];
feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL];

设置代理

// Delegate must conform to `MWFeedParserDelegate`
feedParser.delegate = self;

设置解析类型。选项包括 ParseTypeFullParseTypeInfoOnlyParseTypeItemsOnly。Info 指的是源的详细信息,如标题和描述。Items 是单个项目或故事。

// Parse the feeds info (title, link) and all feed items
feedParser.feedParseType = ParseTypeFull;

设置解析器是否应同步或异步连接并下载源数据。注意,这仅影响源数据的下载,不影响解析操作本身。

// Connection type
feedParser.connectionType = ConnectionTypeSynchronously;

启动解析

// Begin parsing
[feedParser parse];

解析器将然后下载和解析源。如果任何时候您希望停止解析,您可以调用

// Stop feed download / parsing
[feedParser stopParsing];

stopParsing 方法会立即停止下载和解析馈送。

读取馈送数据

一旦开始解析,代理将接收解析的馈送数据。

- (void)feedParserDidStart:(MWFeedParser *)parser; // Called when data has downloaded and parsing has begun
- (void)feedParser:(MWFeedParser *)parser didParseFeedInfo:(MWFeedInfo *)info; // Provides info about the feed
- (void)feedParser:(MWFeedParser *)parser didParseFeedItem:(MWFeedItem *)item; // Provides info about a feed item
- (void)feedParserDidFinish:(MWFeedParser *)parser; // Parsing complete or stopped at any time by `stopParsing`
- (void)feedParser:(MWFeedParser *)parser didFailWithError:(NSError *)error; // Parsing failed

MWFeedInfoMWFeedItem 包含(标题、链接、摘要等)属性,这些属性将保存解析后的数据。更多信息请查看 MWFeedInfo.hMWFeedItem.h

注意:有时馈送不包含某些信息,例如标题、链接或摘要。在使用任何数据之前,您应该检查该数据是否存在。

NSString *title = item.title ? item.title : @"[No Title]";
NSString *link = item.link ? item.link : @"[No Link]";
NSString *summary = item.summary ? item.summary : @"[No Summary]";

只有在馈送成功解析,或被通过对 stopParsing 的调用停止,才会调用 feedParserDidFinish: 方法。要确定解析是否成功完成,或已被停止,您可以调用 isStopped

有关使用示例,请参阅示例项目中 RootViewController.m

可用数据

以下是馈送信息和项目对象的可用的属性列表

MWFeedInfo

  • info.title(《NSString》)
  • info.link(《NSString》)
  • info.summary(《NSString》)

MWFeedItem

  • item.title(《NSString》)
  • item.link(《NSString》)
  • item.author(《NSString》)
  • item.date(《NSDate》)
  • item.updated(《NSDate》)
  • item.summary(《NSString》)
  • item.content(《NSString》)
  • item.enclosures(一个包含键 urltypelengthNSDictionaryNSArray))
  • item.identifier(《NSString》)

使用数据

MWFeedInfoMWFeedItem 的所有属性返回馈送提供的原始数据。此内容可能包含或不包含 HTML 和编码实体。如果内容包含 HTML,您可以在 UIWebView 内显示数据,或者可以使用提供的 NSString 类别(NSString+HTML),这将允许您操纵此 HTML 内容。为您的方便提供的可用方法有

// Convert HTML to Plain Text
//  - Strips HTML tags & comments, removes extra whitespace and decodes HTML character entities.
- (NSString *)stringByConvertingHTMLToPlainText;

// Decode all HTML entities using GTM.
- (NSString *)stringByDecodingHTMLEntities;

// Encode all HTML entities using GTM.
- (NSString *)stringByEncodingHTMLEntities;

// Minimal unicode encoding will only cover characters from table
// A.2.2 of http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters
// which is what you want for a unicode encoded webpage.
- (NSString *)stringByEncodingHTMLEntities:(BOOL)isUnicode;

// Replace newlines with <br /> tags.
- (NSString *)stringWithNewLinesAsBRs;

// Remove newlines and white space from string.
- (NSString *)stringByRemovingNewLinesAndWhitespace;

// Wrap plain URLs in <a href="..." class="linkified">...</a>
//  - Ignores URLs inside tags (any URL beginning with =")
//  - HTTP & HTTPS schemes only
//  - Only works in iOS 4+ as we use NSRegularExpression (returns self if not supported so be careful with NSMutableStrings)
//  - Expression: (?<!=")\b((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)
//  - Adapted from http://regexlib.com/REDetails.aspx?regexp_id=96
- (NSString *)stringByLinkifyingURLs;

这将是这个示例

// Display item summary which contains HTML as plain text
NSString *plainSummary = [item.summary stringByConvertingHTMLToPlainText];

调试问题

如果某种原因解析器似乎不起作用,请尝试在 MWFeedParser.h 中启用调试日志。这将错误消息记录到控制台,并帮助您诊断问题。错误代码及其描述可在 MWFeedParser.h 的顶部找到。

其他信息

MWFeedParser 目前不是线程安全的。

添加到您的项目

方法 2:直接将源代码添加到您的项目中

  1. 打开 MWFeedParser.xcodeproj
  2. MWFeedParserCategories 组拖到您的项目中,确保您检查 将项目粘贴到目标文件夹的文件夹中
  3. 根据需要将 MWFeedParser.h 导入到您的源文件中。

亮点和建议功能

  • 在演示应用程序中,展示使用 UIWebView 查看格式化项目摘要/内容(HTML,包括图像、段落等)的功能。
  • 提供在给定包含一个或多个与之相关的网页订阅源的网页URL时列出可用订阅源的功能。
  • 支持 Media RSS 扩展(例如来自 Flickr 的扩展)。
  • 支持 GeoRSS 扩展。
  • 查找网页订阅源图标的解决方案。
  • 研究在订阅源项目中支持/检测图像的功能。

请随时联系并提出/投票支持其他功能。

许可证

版权所有(c)2010 Michael Waterfall

在此特此予以授权,任何人都可以免费获得本软件及相关的文档文件(“软件”的副本),无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许第三方接收本软件的人可以进行上述操作,但须遵守以下条件

  1. 上述版权声明及本授权声明应包含在本软件的副本或主要部分中。

  2. 此软件不能用于存档或收集(但不限于)事件、新闻、体验和活动等数据,以用于任何与日记/日志相关的概念。

本软件按“原样”提供,不提供任何形式的保证,明示或暗示的,包括但不限于适销性、特定用途的适合性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是否因合同行为、侵权或其他行为,由此软件或软件的使用或其他方式触发的。