Contents

brightdigit/SyndiKit

Swift Package for Decoding RSS Feeds.

Table of Contents

Requirements Swift Package Manager

Decoding Your First Feed Working with Abstractions Specifying Formats Accessing Extensions

Introduction

Built on top of XMLCoder, SyndiKit can be used to import and read site data whether from a WordPress site, RSS feeds, YouTube channel or podcast.

Features

  • Import of RSS 2.0, Atom, and JSONFeed formats
  • Extensions for iTunes-compatabile podcasts, YouTube channels, as well as WordPress export data
  • User-friendly errors
  • Abstractions for format-agnostic parsing

Installation

Requirements

Apple Platforms

  • Xcode 13.3 or later
  • Swift 5.5.2 or later
  • iOS 15.4 / watchOS 8.5 / tvOS 15.4 / macOS 12.3 or later deployment targets

Linux

  • Ubuntu 18.04 or later
  • Swift 5.5.2 or later

Swift Package Manager

Swift Package Manager is Apple's decentralized dependency manager to integrate libraries to your Swift projects. It is now fully integrated with Xcode 11.

To integrate SyndiKit into your project using SPM, specify it in your Package.swift file:

let package = Package(
  ...
  dependencies: [
    .package(url: "https://github.com/brightdigit/SyndiKit", from: "0.7.0")
  ],
  targets: [
      .target(
          name: "YourTarget",
          dependencies: ["SyndiKit", ...]),
      ...
  ]
)

If this is for an Xcode project simply import the repo at:

https://github.com/brightdigit/SyndiKit

Usage

SyndiKit provides models and utilities for decoding RSS feeds of various formats and extensions.

Decoding Your First Feed

You can get started decoding your feed by creating your first `SynDecoder. Once you've created you decoder you can decode using SynDecoder/decode(_:)`:

let decoder = SynDecoder()
let empowerAppsData = Data(contentsOf: "empowerapps-show.xml")!
let empowerAppsRSSFeed = try decoder.decode(empowerAppsData)

Working with Abstractions

Rather than working directly with the various formats, SyndiKit abstracts many of the common properties of the various formats. This enables developers to be agnostic regarding the specific format.

let decoder = SynDecoder()

// decoding a RSS 2.0 feed
let empowerAppsData = Data(contentsOf: "empowerapps-show.xml")!
let empowerAppsRSSFeed = try decoder.decode(empowerAppsData)
print(empowerAppsRSSFeed.title) // Prints "Empower Apps"

// decoding a Atom feed from YouTube
let kiloLocoData = Data(contentsOf: "kilo.youtube.xml")!
let kiloLocoAtomFeed = try decoder.decode(kiloLocoData)
print(kiloLocoAtomFeed.title) // Prints "Kilo Loco"

Specifying Formats

If you wish to access properties of specific formats, you can attempt to cast the objects to see if they match:

let empowerAppsRSSFeed = try decoder.decode(empowerAppsData)
if let rssFeed = empowerAppsRSSFeed as? RSSFeed {
  print(rssFeed.channel.title) // Prints "Empower Apps"
}

let kiloLocoAtomFeed = try decoder.decode(kiloLocoData)
if let atomFeed = kiloLocoAtomFeed as? AtomFeed {
  print(atomFeed.title) // Prints "Empower Apps"
}

Accessing Extensions

In addition to supporting RSS, Atom, and JSONFeed, SyndiKit also supports various RSS extensions for specific media including: YouTube, iTunes, and WordPress.

You can access these properties via their specific feed formats or via the `Entryable/media property on Entryable`.

let empowerAppsRSSFeed = try decoder.decode(empowerAppsData)
switch empowerAppsRSSFeed.children.last?.media {
  case .podcast(let podcast):
    print(podcast.title) // print "WWDC 2018 - What Does It Mean For Businesses?"
  default:
    print("Not a Podcast! 🤷‍♂️")
}

let kiloLocoAtomFeed = try decoder.decode(kiloLocoData)
switch kiloLocoAtomFeed.children.last?.media {
  case .video(.youtube(let youtube):
    print(youtube.videoID) // print "SBJFl-3wqx8"
    print(youtube.channelID) // print "UCv75sKQFFIenWHrprnrR9aA"
  default:
    print("Not a Youtube Video! 🤷‍♂️")
}

Documentation

The DocC is hosted at Swift Package Index. This includes tutorials, articles, code documentation and more.

1.0.0

  • [x] OPML Support
  • [ ] WordPress DocC Tutorial
  • [ ] RSS Import Tutorial (i.e. Celestra)

License

This code is distributed under the MIT license. See the LICENSE file for more info.

Package Metadata

Repository: brightdigit/SyndiKit

Homepage: https://swiftpackageindex.com/brightdigit/SyndiKit/0.6.1/documentation/syndikit

Stars: 70

Forks: 4

Open issues: 4

Default branch: main

Primary language: swift

License: MIT

Topics: rss, swift, swiftpackagemanager

README: README.md