В нашем предыдущем посте Как получить посты WordPress в виде JSON с использованием Python и WordPress REST API мы показали, как получить одну страницу из 10 постов с использованием Wordpress REST API в Python.
В этом посте мы будем использовать пагинацию для получения списка всех постов.
Во-первых, мы замечаем, что при запросе некорректной страницы, такой как ?page=1000000, возвращаемый JSON будет
wp_posts_error.json
{'code': 'rest_post_invalid_page_number',
'message': 'The page number requested is larger than the number of pages available.',
'data': {'status': 400}}вместо JSON-массива, представляющего список постов.
Используя эту информацию, мы можем написать загрузчик, который получает страницы по 100 постов каждая, пока не встретится это сообщение об ошибке:
fetch_all_posts.py
from tqdm import tqdm
import requests
def page_numbers():
"""Infinite generate of page numbers"""
num = 1
while True:
yield num
num += 1
posts = []
for page in tqdm(page_numbers()):
# Fetch the next [pagesize=10] posts
posts_page = requests.get("https://mydomain.com/wp-json/wp/v2/posts", params={"page": page, "per_page": 100}).json()
# Check for "last page" error code
if isinstance(posts_page, dict) and posts_page["code"] == "rest_post_invalid_page_number": # Found last page
break
# No error code -> add posts
posts += posts_pageIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow