使用 MangerKit 浏览播客。 MangerKit Swift 包提供了一个 JSON HTTP 客户端,允许你从 manger-http 服务(一个缓存 RSS feed 代理)请求播客 feed 的组合范围。
MangerKit 被用于 Podest 播客应用中。
请求三个播客的所有剧集。 你可以使用 since
属性限制时间范围。
import Foundation
import Patron
import MangerKit
let url = URL(string: "https://your.endpoint")!
let s = URLSession(configuration: .default)
let p = Patron(URL: url, session: s)
let svc = Manger(client: p)
struct Query: MangerQuery {
let url: String
let since: Date
init(url: String, since: Date = Date(timeIntervalSince1970: 0)) {
self.url = url
self.since = since
}
}
let queries: [MangerQuery] = [
Query(url: "http://feeds.wnyc.org/newyorkerradiohour"),
Query(url: "http://feed.thisamericanlife.org/talpodcast"),
Query(url: "http://feeds.serialpodcast.org/serialpodcast")
]
try! svc.entries(queries) { result, error in
print(error ?? result)
}
结果是一个未经处理的字典数组,[[String: AnyObject]]?
,类型为 Any?
,因为是 JSON。 请参考 manger-http 获取详细信息。
简单的错误类型也涵盖无效的查询。
enum MangerError: Error {
case unexpectedResult(result: Any?)
case cancelledByUser
case noQueries
case invalidQuery
case niy
}
现在,我看不出为什么查询不应该是 struct
—— 为什么我们应该批判使用协议。
protocol MangerQuery {
var url: String { get }
var since: Date { get }
}
protocol MangerService {
var client: JSONService { get }
@discardableResult func feeds(
_ queries: [MangerQuery],
cachePolicy: NSURLRequest.CachePolicy,
cb: @escaping (_ error: Error?, _ payload: [[String : AnyObject]]?) -> Void
) throws -> URLSessionTask
@discardableResult func feeds(
_ queries: [MangerQuery],
cb: @escaping (_ error: Error?, _ payload: [[String : AnyObject]]?) -> Void
) throws -> URLSessionTask
@discardableResult func entries(
_ queries: [MangerQuery],
cachePolicy: NSURLRequest.CachePolicy,
cb: @escaping (_ error: Error?, _ payload: [[String : AnyObject]]?) -> Void
) throws -> URLSessionTask
@discardableResult func entries(
_ queries: [MangerQuery],
cb: @escaping (_ error: Error?, _ payload: [[String : AnyObject]]?) -> Void
) throws -> URLSessionTask
@discardableResult func version(
_ cb: @escaping (_ error: Error?, _ service: String?) -> Void
) throws -> URLSessionTask
}
var client: JSONService { get }
client 属性允许访问底层的 Patron 客户端,提供远程服务的主机名和状态。
在 manger-http 运行的情况下,执行以下操作
$ swift test
📦 将 https://github.com/michaelnisi/manger-kit
添加到你的包清单中。