基于 XMLCoder 构建的 Swift Package,用于解码 RSS Feed。查看 DocC 构建的网站!
SyndiKit 构建于 XMLCoder 之上,可用于导入和读取站点数据,无论是来自 WordPress 站点、RSS feed、YouTube 频道还是播客。
Apple 平台
Linux
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。
您可以通过创建您的第一个 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 官方网站位于 syndikit.dev。 这包括教程、文章、代码文档等。
对于 GitHub 上仅使用 SourceDocs 的 markdown 格式文档,您可以阅读 此处的类型列表。
此代码在 MIT 许可证下分发。 有关更多信息,请参见 LICENSE 文件。