Skip to content

Latest commit

 

History

History
77 lines (56 loc) · 3.43 KB

README.md

File metadata and controls

77 lines (56 loc) · 3.43 KB

WordpressReader Logo

Swift Compatibility Platform Compatibility License - MIT Version GitHub last commit Mastodon Twitter

Overview

A simple asynchronous way to download and decode public Wordpress content.

Demo App

Check out WordpressReaderExample to see how you can use this package in your iOS app.

Installation and Usage

This package is compatible with iOS 14+, macOS 11+, watchOS 7+, tvOS 14+, and visionOS.

  1. In Xcode go to File -> Add Packages
  2. Paste in the repo's url: https://github.com/ryanlintott/WordpressReader and select by version.
  3. Import the package using import WordpressReader

Is this Production-Ready?

Really it's up to you. I currently use this package in my own Old English Wordhord app.

Additionally, if you find a bug or want a new feature add an issue and I will get back to you about it.

Support

WordpressReader is open source and free but if you like using it, please consider supporting my work.

ko-fi


Features

Create an instance of WordpressSite for any Wordpress.com website:

let site = WordpressSite(domain: "oldenglishwordhord.com", name: "Old English Wordhord")

Fetch posts, pages, categories, or tags asynchronously:

let posts: [WordpressPost] = try await site.fetch(.posts())
let pages: [WordpressPage] = try await site.fetch(.pages())
let categories: [WordpressCategory] = try await site.fetch(.categories())
let tags: [WordpressTag] = try await site.fetch(.tags())

Add a set of WordpressQueryItem to narrow down your request:

let request = WordpressRequest.posts([.postedAfter(aWeekAgo), .order(.asc), perPage(10)])
let posts = try await site.fetch(request)

Wordpress queries may result in several pages of items. You can customize your WordpressRequest to get the first page out quickly:

var recentPosts = WordpressRequest.posts()
recentPosts.maxPages = 1

var remainingPosts = WordpressRequest.posts()
remainingPosts.startPage = 2

self.posts = try await site.fetch(recentPosts)
self.posts += try await site.fetch(remainingPosts)

The default .fetch() will get pages in parallel but only return when they're all done. If you want each batch in order as soon as they're ready, use an async stream:

for try await batch in try await site.stream(request) {
  self.posts += posts
}