FeedKit alternatives and similar libraries
Based on the "Other Parsing" category.
Alternatively, view FeedKit alternatives based on common mentions on social networks and blogs.
-
Erik
Erik is an headless browser based on WebKit. An headless browser allow to run functional tests, to access and manipulate webpages using javascript. -
AcknowledgementsPlist
AcknowledgementsPlist manages the licenses of libraries that depend on your iOS app.
CodeRabbit: AI Code Reviews for Developers
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of FeedKit or a related project?
README
Features
- [x] Atom
- [x] RSS 0.90, 0.91, 1.00, 2.00
- [x] JSON
- [x] Namespaces
- [x] Dublin Core
- [x] Syndication
- [x] Content
- [x] Media RSS
- [x] iTunes Podcasting Tags
- [x] Documentation
- [x] Unit Test Coverage
Requirements
Installation >> instructions
<<
Usage
Build a URL pointing to an RSS, Atom or JSON Feed.
let feedURL = URL(string: "http://images.apple.com/main/rss/hotnews/hotnews.rss")!
Get an instance of FeedParser
let parser = FeedParser(URL: feedURL) // or FeedParser(data: data) or FeedParser(xmlStream: stream)
Then call parse
or parseAsync
to start parsing the feed...
A common scenario in UI environments would be parsing a feed asynchronously from a user initiated action, such as the touch of a button. e.g.
// Parse asynchronously, not to block the UI.
parser.parseAsync(queue: DispatchQueue.global(qos: .userInitiated)) { (result) in
// Do your thing, then back to the Main thread
DispatchQueue.main.async {
// ..and update the UI
}
}
Remember, you are responsible to manually bring the result closure to whichever queue is apropriate. Usually to the Main thread, for UI apps, by calling DispatchQueue.main.async
.
Alternatively, you can also parse synchronously.
let result = parser.parse()
Parse Result
FeedKit adopts Swift 5 Result type, as Result<Feed, ParserError>
, and as such, if parsing succeeds you should now have a Strongly Typed Model
of an RSS
, Atom
or JSON Feed
, within the Feed
enum:
switch result {
case .success(let feed):
// Grab the parsed feed directly as an optional rss, atom or json feed object
feed.rssFeed
// Or alternatively...
switch feed {
case let .atom(feed): // Atom Syndication Format Feed Model
case let .rss(feed): // Really Simple Syndication Feed Model
case let .json(feed): // JSON Feed Model
}
case .failure(let error):
print(error)
}
Model Preview
The RSS and Atom feed Models are rather extensive throughout the supported namespaces. These are just a preview of what's available.
RSS
feed.title
feed.link
feed.description
feed.language
feed.copyright
feed.managingEditor
feed.webMaster
feed.pubDate
feed.lastBuildDate
feed.categories
feed.generator
feed.docs
feed.cloud
feed.rating
feed.ttl
feed.image
feed.textInput
feed.skipHours
feed.skipDays
//...
feed.dublinCore
feed.syndication
feed.iTunes
// ...
let item = feed.items?.first
item?.title
item?.link
item?.description
item?.author
item?.categories
item?.comments
item?.enclosure
item?.guid
item?.pubDate
item?.source
//...
item?.dublinCore
item?.content
item?.iTunes
item?.media
// ...
Atom
feed.title
feed.subtitle
feed.links
feed.updated
feed.authors
feed.contributors
feed.id
feed.generator
feed.icon
feed.logo
feed.rights
// ...
let entry = feed.entries?.first
entry?.title
entry?.summary
entry?.authors
entry?.contributors
entry?.links
entry?.updated
entry?.categories
entry?.id
entry?.content
entry?.published
entry?.source
entry?.rights
// ...
JSON
feed.version
feed.title
feed.homePageURL
feed.feedUrl
feed.description
feed.userComment
feed.nextUrl
feed.icon
feed.favicon
feed.author
feed.expired
feed.hubs
feed.extensions
// ...
let item = feed.items?.first
item?.id
item?.url
item?.externalUrl
item?.title
item?.contentText
item?.contentHtml
item?.summary
item?.image
item?.bannerImage
item?.datePublished
item?.dateModified
item?.author
item?.url
item?.tags
item?.attachments
item?.extensions
// ...
License
FeedKit is released under the MIT license. See LICENSE for details.
*Note that all licence references and agreements mentioned in the FeedKit README section above
are relevant to that project's source code only.