<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          FeedKitAn RSS, Atom and JSON Feed parser written in Swift

          聯(lián)合創(chuàng)作 · 2023-09-28 01:43

          build status cocoapods compatible carthage compatible language swift

          Features

          Requirements

          xcode ios tvos watchos mac os mac os

          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.

          瀏覽 16
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码三区 | 插菊花综合网1 | 亚洲午夜无码久久 | 日韩色色网 | 久久99久久99久久99国内少妇精品 |