Skip to content

Instantly share code, notes, and snippets.

@lordjabez
Created November 9, 2023 01:21
Show Gist options
  • Save lordjabez/cc72fa8f4e11ef4f39f1ddefa486ae5f to your computer and use it in GitHub Desktop.
Save lordjabez/cc72fa8f4e11ef4f39f1ddefa486ae5f to your computer and use it in GitHub Desktop.
Extract all posts from a Wordpress blog using the API
#!/usr/bin/env python3
import datetime
import sys
import cachier
import requests
blog_domain = sys.argv[1]
@cachier.cachier(stale_after=datetime.timedelta(days=1))
def get_posts(blog_domain, page):
print(blog_domain, page)
api_url = f'https://{blog_domain}/wp-json/wp/v2/posts'
params = {'per_page': 10, 'page': page}
response = requests.get(api_url, params=params)
response.raise_for_status()
return response.json()
def download_all_posts(blog_domain):
all_posts = []
page = 1
while True:
posts = get_posts(blog_domain, page)
if not posts:
break
all_posts.extend(posts)
page += 1
return all_posts
posts = download_all_posts(blog_domain)
for post in posts:
print(post['title']['rendered'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment