Skip to content

Commit

Permalink
Now supports RDF Site Summary (RSS) 1.0 specification.
Browse files Browse the repository at this point in the history
  • Loading branch information
mwaterfall committed Jul 26, 2010
1 parent 18951b0 commit c106060
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 97 deletions.
2 changes: 1 addition & 1 deletion Classes/MWFeedParser.h
Expand Up @@ -30,7 +30,7 @@
// Types
typedef enum { ConnectionTypeAsynchronously, ConnectionTypeSynchronously } ConnectionType;
typedef enum { ParseTypeFull, ParseTypeItemsOnly, ParseTypeInfoOnly } ParseType;
typedef enum { FeedTypeUnknown, FeedTypeRSS, FeedTypeAtom } FeedType;
typedef enum { FeedTypeUnknown, FeedTypeRSS, FeedTypeRSS1, FeedTypeAtom } FeedType;

// Delegate
@protocol MWFeedParserDelegate <NSObject>
Expand Down
27 changes: 26 additions & 1 deletion Classes/MWFeedParser.m
Expand Up @@ -166,6 +166,7 @@ - (void)startParsingData:(NSData *)data {
// Parse!
feedParser = [[NSXMLParser alloc] initWithData:data];
feedParser.delegate = self;
[feedParser setShouldProcessNamespaces:YES];
[feedParser parse];

}
Expand Down Expand Up @@ -283,20 +284,23 @@ - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName nam
// Determine feed type
if (feedType == FeedTypeUnknown) {
if ([elementName isEqualToString:@"rss"]) feedType = FeedTypeRSS;
else if ([elementName isEqualToString:@"RDF"]) feedType = FeedTypeRSS1;
else if ([elementName isEqualToString:@"feed"]) feedType = FeedTypeAtom;
return;
}

// Entering new feed element
if (feedParseType != ParseTypeItemsOnly) {
if ((feedType == FeedTypeRSS && [currentPath isEqualToString:@"/rss/channel"]) ||
(feedType == FeedTypeRSS1 && [currentPath isEqualToString:@"/RDF/channel"]) ||
(feedType == FeedTypeAtom && [currentPath isEqualToString:@"/feed"])) {
return;
}
}

// Entering new item element
if ((feedType == FeedTypeRSS && [currentPath isEqualToString:@"/rss/channel/item"]) ||
(feedType == FeedTypeRSS1 && [currentPath isEqualToString:@"/RDF/item"]) ||
(feedType == FeedTypeAtom && [currentPath isEqualToString:@"/feed/entry"])) {

// Send off feed info to delegate
Expand Down Expand Up @@ -366,6 +370,26 @@ - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName names

break;
}
case FeedTypeRSS1: {

// Item
if (!processed) {
if ([currentPath isEqualToString:@"/RDF/item/title"]) { if (currentText.length > 0) item.title = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/item/link"]) { if (currentText.length > 0) item.link = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/item/description"]) { if (currentText.length > 0) item.summary = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/item/content:encoded"]) { if (currentText.length > 0) item.content = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/item/date"]) { if (currentText.length > 0) item.date = [self dateFromRFC3339String:currentText]; processed = YES; }
}

// Info
if (!processed && feedParseType != ParseTypeItemsOnly) {
if ([currentPath isEqualToString:@"/RDF/channel/title"]) { if (currentText.length > 0) info.title = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/channel/description"]) { if (currentText.length > 0) info.summary = currentText; processed = YES; }
else if ([currentPath isEqualToString:@"/RDF/channel/link"]) { if (currentText.length > 0) info.link = currentText; processed = YES; }
}

break;
}
case FeedTypeAtom: {

// Item
Expand Down Expand Up @@ -394,7 +418,7 @@ - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName names

// If end of an item then tell delegate
if (!processed) {
if ((feedType == FeedTypeRSS && [elementName isEqualToString:@"item"]) ||
if (((feedType == FeedTypeRSS || feedType == FeedTypeRSS1) && [elementName isEqualToString:@"item"]) ||
(feedType == FeedTypeAtom && [elementName isEqualToString:@"entry"])) {

// Dispatch item to delegate
Expand All @@ -406,6 +430,7 @@ - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName names
// Check if the document has finished parsing and send off info if needed (i.e. there were no items)
if (!processed) {
if ((feedType == FeedTypeRSS && [elementName isEqualToString:@"rss"]) ||
(feedType == FeedTypeRSS1 && [elementName isEqualToString:@"RDF"]) ||
(feedType == FeedTypeAtom && [elementName isEqualToString:@"feed"])) {

// Document ending so if we havent sent off feed info yet, do so
Expand Down
2 changes: 1 addition & 1 deletion Classes/RootViewController.m
Expand Up @@ -29,7 +29,7 @@ - (void)viewDidLoad {
items = [[NSMutableArray alloc] init];

// Create parser
feedParser = [[MWFeedParser alloc] initWithFeedURL:@"http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml"];
feedParser = [[MWFeedParser alloc] initWithFeedURL:@"http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml"];
feedParser.delegate = self;
feedParser.feedParseType = ParseTypeFull; // Parse feed info and all items
feedParser.connectionType = ConnectionTypeAsynchronously;
Expand Down
57 changes: 29 additions & 28 deletions MWFeedParser.xcodeproj/Michael.mode1v3
Expand Up @@ -332,7 +332,7 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>4C46618A11F879B700CB12BD</string>
<string>4C3EE73211FDDDA20033C200</string>
<key>history</key>
<array>
<string>4C7F67BF11A007E300D6DF99</string>
Expand All @@ -341,17 +341,17 @@
<string>4CA46DCD11DA106500B298B6</string>
<string>4CA46DCE11DA106500B298B6</string>
<string>4CA46DCF11DA106500B298B6</string>
<string>4CE8296711EEFD8B00AB7EB1</string>
<string>4CE8296911EEFD8B00AB7EB1</string>
<string>4CE8296B11EEFD8B00AB7EB1</string>
<string>4CE8296C11EEFD8B00AB7EB1</string>
<string>4C6FC23011F6F49F0058A935</string>
<string>4C6FC23111F6F49F0058A935</string>
<string>4C4660DB11F8614100CB12BD</string>
<string>4C46617011F878A100CB12BD</string>
<string>4C46617B11F878C700CB12BD</string>
<string>4C46618811F879B700CB12BD</string>
<string>4C46618911F879B700CB12BD</string>
<string>4C3EE70411FDDCCE0033C200</string>
<string>4C3EE72E11FDDDA20033C200</string>
<string>4C3EE72F11FDDDA20033C200</string>
<string>4C3EE73011FDDDA20033C200</string>
</array>
</dict>
<key>SplitCount</key>
Expand Down Expand Up @@ -409,9 +409,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>4C46617411F878A100CB12BD</string>
<string>4C3EE70811FDDCCE0033C200</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>4C46617511F878A100CB12BD</string>
<string>4C3EE70911FDDCCE0033C200</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
Expand Down Expand Up @@ -549,10 +549,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>4C46617711F878A100CB12BD</string>
<string>4C46617811F878A100CB12BD</string>
<string>4C3EE71A11FDDCF00033C200</string>
<string>4C3EE71211FDDCCE0033C200</string>
<string>1C78EAAD065D492600B07095</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>1C530D57069F1CE1000CFCEE</string>
<string>4CC895FE119F0CCB00ED61B6</string>
<string>/Users/Michael/My Work/d3i/Projects/MWFeedParser/MWFeedParser.xcodeproj</string>
</array>
Expand Down Expand Up @@ -634,7 +635,7 @@
<key>TableOfContents</key>
<array>
<string>4CC895FE119F0CCB00ED61B6</string>
<string>4C46615A11F877DB00CB12BD</string>
<string>4C3EE6FA11FDDA0D0033C200</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
Expand Down Expand Up @@ -756,13 +757,13 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>4C46615B11F877DB00CB12BD</string>
<string>4C3EE70A11FDDCCE0033C200</string>
<string>1C162984064C10D400B95A72</string>
<string>4C46615C11F877DB00CB12BD</string>
<string>4C46615D11F877DB00CB12BD</string>
<string>4C46615E11F877DB00CB12BD</string>
<string>4C46615F11F877DB00CB12BD</string>
<string>4C46616011F877DB00CB12BD</string>
<string>4C3EE70B11FDDCCE0033C200</string>
<string>4C3EE70C11FDDCCE0033C200</string>
<string>4C3EE70D11FDDCCE0033C200</string>
<string>4C3EE70E11FDDCCE0033C200</string>
<string>4C3EE70F11FDDCCE0033C200</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
Expand Down Expand Up @@ -794,16 +795,16 @@
<key>PBXProjectModuleGUID</key>
<string>1CDD528C0622207200134675</string>
<key>PBXProjectModuleLabel</key>
<string></string>
<string>MWFeedParser.m</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {1179, 420}}</string>
<string>{{0, 0}, {1179, 376}}</string>
<key>RubberWindowFrame</key>
<string>142 -211 1179 826 0 0 1440 878 </string>
<string>142 94 1179 736 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
Expand All @@ -812,7 +813,7 @@
</dict>
</array>
<key>Proportion</key>
<string>420pt</string>
<string>376pt</string>
</dict>
<dict>
<key>BecomeActive</key>
Expand All @@ -827,18 +828,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 425}, {1179, 360}}</string>
<string>{{0, 381}, {1179, 314}}</string>
<key>RubberWindowFrame</key>
<string>142 -211 1179 826 0 0 1440 878 </string>
<string>142 94 1179 736 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXProjectFindModule</string>
<key>Proportion</key>
<string>360pt</string>
<string>314pt</string>
</dict>
</array>
<key>Proportion</key>
<string>785pt</string>
<string>695pt</string>
</dict>
</array>
<key>Name</key>
Expand All @@ -852,13 +853,13 @@
<key>TableOfContents</key>
<array>
<string>1C530D57069F1CE1000CFCEE</string>
<string>4C6FC22B11F6F48C0058A935</string>
<string>4C6FC22C11F6F48C0058A935</string>
<string>4C3EE6FC11FDDA0D0033C200</string>
<string>4C3EE6FD11FDDA0D0033C200</string>
<string>1CDD528C0622207200134675</string>
<string>1CD0528E0623707200166675</string>
</array>
<key>WindowString</key>
<string>142 -211 1179 826 0 0 1440 878 </string>
<string>142 94 1179 736 0 0 1440 878 </string>
<key>WindowToolGUID</key>
<string>1C530D57069F1CE1000CFCEE</string>
<key>WindowToolIsVisible</key>
Expand Down Expand Up @@ -918,7 +919,7 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>4C46616111F877DB00CB12BD</string>
<string>4C3EE71011FDDCCE0033C200</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
Expand Down

0 comments on commit c106060

Please sign in to comment.