Re: How to write an RSS client for iOS
Re: How to write an RSS client for iOS
- Subject: Re: How to write an RSS client for iOS
- From: Jens Alfke <email@hidden>
- Date: Sat, 13 Feb 2016 10:44:26 -0800
> On Feb 13, 2016, at 10:02 AM, email@hidden wrote:
>
>
>
> hi, what would I need in order to write my own RSS reader for iOS?
- NSURLSession to fetch feeds.
- NSXMLParser to parse the feeds. (I was going to write "NSXMLDocument to parse the feeds”, but that class only exists on Mac OS, for some reason)
- libTidy to clean up broken/invalid XML before parsing
Now for the hard parts. I’ve implemented a feed reader in the past (the PubSub framework in OS X, which used to be used by Mail and Safari) so I’m intimately familiar with the hard parts.
* Some feeds are not valid XML, so NSXMLParser will fail to parse them. (This most often happens when people put their HTML articles directly into the XML without escaping the HTML.) To work around this you will need to use libTidy, an open source library that can clean up invalid XML. (NSXMLDocument already supports tidy, but it’s not available on iOS.)
* There are literally about a dozen dialects of RSS and Atom in use, from Netscape’s old RSS 0.9 up through RSS 2.0 (which comes in a couple of flavors) and Atom 1.0. (Yes, a dozen. Mark Pilgrim made a list of them once.) Some are hugely different from each other, some are just a little different. Your code that interprets the XML will have to be aware of all of them.
* Once you’ve parsed the articles out of a feed, you probably need to figure out which ones are new to you, so you can highlight them or alert the user or whatever. Identifying articles varies between the dialects. Atom and RSS 2.0 have a GUID (unique ID) attribute for this, but it’s not always present. Otherwise you can treat the article’s permalink as being the unique ID, if there is one. Otherwise you have to go by the title + text.
There are other “fun” details, like parsing dates — the different specs call for different date formats, and many feeds just ignore those and emit some other date format, which makes parsing them really difficult. Our code ended up with a list of about 20(!) date-format strings and tried them one after the other.
It’s a total pain in the butt, to be honest. I’m not sure if there are any existing open source iOS frameworks for reading feeds, but if there is one, you’ll be much better off using it than writing your own.
—Jens
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden