WordPress REST APIを利用することで、外部アプリケーションからWordPressのデータを簡単に取得できます。この記事では、REST APIを使って全記事を一覧で取得するPythonスクリプトの実装方法を備忘録として記録します。
目次
前提条件
- WordPress 5.6以降
- WordPress APIの利用権限があるユーザー(アプリケーションパスワードが必要)
- Python 3.x
コード
このスクリプトは、WordPressのREST APIを使って複数ページにわたる記事をリクエストし、すべての記事を取得します。取得されたデータは、JSON形式で返されるため、柔軟に処理することが可能です。
import requests
def get_all_posts(base_url, wp_user, wp_app_password):
# 初期設定
posts = []
per_page = 100 # 1ページあたりの取得件数
page = 1 # ページ番号
headers = {
'Authorization': 'Basic ' + wp_app_password
}
while True:
# APIリクエストURL
url = f"{base_url}/wp-json/wp/v2/posts?per_page={per_page}&page={page}"
# リクエストを送信
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"Error fetching posts: {response.status_code}")
break
data = response.json()
# 取得した記事をリストに追加
posts.extend(data)
# これ以上の記事がない場合は終了
if len(data) < per_page:
break
page += 1 # 次のページに移動
return posts
all_posts = get_all_posts(base_url, wp_user, wp_app_password)
for post in all_posts:
print(post['title']['rendered']) # 記事タイトルを表示
- base_url: WordPressサイトのベースURLを設定します。https://your-wordpress-site.comのように指定します。
- wp_user と wp_app_password: WordPress APIにアクセスするためのアカウント情報とアプリケーションパスワードを指定します。このパスワードは、WordPressのダッシュボードから発行できます。
- per_page: APIリクエストで一度に取得する記事数を設定します(最大100)。デフォルトでは10件ですが、パフォーマンスを向上させるために最大の100件に設定しています。
- page: ページネーションを処理するためのページ番号です。
- headers: API認証に必要なヘッダー情報を指定します。このヘッダーには、Basic Authenticationを利用し、wp_user と wp_app_password を組み合わせた値を設定します。