SyndiKit

SyndiKit

基于 XMLCoder 构建的 Swift Package,用于解码 RSS Feed。查看 DocC 构建的网站!

DocC

Twitter GitHub SyndiKit GitHub issues

Codecov CodeFactor codebeat badge Code Climate maintainability Code Climate technical debt Code Climate issues Reviewed by Hound

目录

介绍

SyndiKit 构建于 XMLCoder 之上,可用于导入和读取站点数据,无论是来自 WordPress 站点、RSS feed、YouTube 频道还是播客。

特性

安装

要求

Apple 平台

Linux

Swift Package Manager

Swift Package Manager 是 Apple 的去中心化依赖管理器,用于将库集成到您的 Swift 项目中。 现在它已与 Xcode 11 完全集成。

要使用 SPM 将 SyndiKit 集成到您的项目中,请在您的 Package.swift 文件中指定它

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

如果这是用于 Xcode 项目,只需导入仓库即可

https://github.com/brightdigit/SyndiKit

使用方法

SyndiKit 提供模型和实用程序,用于解码各种格式和扩展的 RSS Feed。

解码您的第一个 Feed

您可以通过创建您的第一个 SynDecoder 来开始解码您的 Feed。 创建解码器后,您可以使用 SynDecoder/decode(_:) 进行解码

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

使用抽象

SyndiKit 不是直接使用各种格式,而是抽象了各种格式的许多常用属性。 这使开发人员可以忽略特定格式。

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"

指定格式

如果您希望访问特定格式的属性,您可以尝试转换对象以查看它们是否匹配

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"
}

访问扩展

除了支持 RSS、Atom 和 JSONFeed 之外,SyndiKit 还支持各种特定媒体的 RSS 扩展,包括:YouTube、iTunes 和 WordPress。

您可以通过其特定的 Feed 格式或通过 Entryable 上的 Entryable/media 属性来访问这些属性。

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! 🤷‍♂️")
}

文档

源文档有两种格式

DocC

DocC 官方网站位于 syndikit.dev。 这包括教程、文章、代码文档等。

GitHub SourceDocs

对于 GitHub 上仅使用 SourceDocs 的 markdown 格式文档,您可以阅读 此处的类型列表。

路线图

1.0.0

许可证

此代码在 MIT 许可证下分发。 有关更多信息,请参见 LICENSE 文件。