MWFeedParser 是一个 Objective-C 框架,用于下载和解析 RSS (1.* 和 2.*) 和 Atom 网络源。它是一个非常简单且干净的实现,可以从网络源读取以下信息
如果您在您的 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;
设置解析类型。选项包括 ParseTypeFull
、ParseTypeInfoOnly
、ParseTypeItemsOnly
。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
MWFeedInfo
和 MWFeedItem
包含(标题、链接、摘要等)属性,这些属性将保存解析后的数据。更多信息请查看 MWFeedInfo.h
和 MWFeedItem.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
。
以下是馈送信息和项目对象的可用的属性列表
info.title
(《NSString》)info.link
(《NSString》)info.summary
(《NSString》)item.title
(《NSString》)item.link
(《NSString》)item.author
(《NSString》)item.date
(《NSDate》)item.updated
(《NSDate》)item.summary
(《NSString》)item.content
(《NSString》)item.enclosures
(一个包含键 url
、type
和 length
的 NSDictionary
的 NSArray
))item.identifier
(《NSString》)MWFeedInfo
和 MWFeedItem
的所有属性返回馈送提供的原始数据。此内容可能包含或不包含 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\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)
// - 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 目前不是线程安全的。
MWFeedParser.xcodeproj
。MWFeedParser
和 Categories
组拖到您的项目中,确保您检查 将项目粘贴到目标文件夹的文件夹中。MWFeedParser.h
导入到您的源文件中。UIWebView
查看格式化项目摘要/内容(HTML,包括图像、段落等)的功能。请随时联系并提出/投票支持其他功能。
版权所有(c)2010 Michael Waterfall
在此特此予以授权,任何人都可以免费获得本软件及相关的文档文件(“软件”的副本),无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许第三方接收本软件的人可以进行上述操作,但须遵守以下条件
上述版权声明及本授权声明应包含在本软件的副本或主要部分中。
此软件不能用于存档或收集(但不限于)事件、新闻、体验和活动等数据,以用于任何与日记/日志相关的概念。
本软件按“原样”提供,不提供任何形式的保证,明示或暗示的,包括但不限于适销性、特定用途的适合性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是否因合同行为、侵权或其他行为,由此软件或软件的使用或其他方式触发的。