WordPress REST APIの使い方

## REST APIとは
REST は Representational State Transfer の略であり, WordPressでは記事のやり取り等を行うものとして使用できます.

この記事では, WordPress REST APIの使い方について説明します.


## Application Passwordの取得方法

WordPressの認証を行い, 記事を投稿するためにはApplication Passwordが必要になります.
WordPressのDashboardから以下の手順で取得することができます.

1. WordPressの管理画面にログイン
1. 管理画面メニューのユーザー → プロファイルを開く
1. ページ下部にあるApplication Passwordの項目までスクロールする
1. 新しいパスワードの名前(Application Passwordにつけたい名前) を入力し, パスワードを追加をクリックする
1. 生成されたパスワードを控える
下記のように作成できていればOKです. パスワード部分は秘匿してます.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1876541/c49343b9-fd75-d198-641f-ab02b439d94e.png)


:::note warn
Application Passwordを取得する際に, httpではパスワードを取得することができないため, 開発用サイトとしてwp-config.phpに環境タイプを設定する必要があります.
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1876541/27214de2-7e4e-7c62-7ffb-aa7485288eb9.png)

Application Passwordを取得する際に, 上記の画面が出ていた場合は設定が必要になります.
設定方法を以下に記載します.

### HTTPアクセスでのApplication Password利用方法
1. WordPressを動作させているVMやコンテナに入る
1. `/var/www/html` 内にある `wp-config.php`ファイルに以下の内容を追記する

```wp-config.php
/** ApplicationPassword HTTP Allow */
define( 'WP_ENVIRONMENT_TYPE', 'local' );
```

3.上記の記載ができたら, 再度WordPressの管理画面にアクセス
4.下記の様な画面が表示されていたら, Appplication Passwordを取得可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1876541/34f505f5-df04-77ee-8a44-989f843aaee6.png)



## 記事の取得方法
WordPressのサイトURLに, `/wp-json/wp/v2/posts` と記載することで, 公開記事を一覧として取得することができます.
また, 特定のパラメータを付け加えることで, 条件に基づくデータ取得も可能です.

オプションのパラメータ例
- `per_page`: 取得する記事数（デフォルト10、最大100）
- `page`: ページ番号（ページごとの表示用）
- `search` : キーワード検索

Python例
```python
import requests

url = "https://example.com/wp-json/wp/v2/posts"
params = {
    "per_page": 5,
    "page": 1
}

response = requests.get(url, params=params)

if response.status_code == 200:
    posts = response.json()
    for post in posts:
        print(f"Title: {post['title']['rendered']}")
        print(f"Content: {post['content']['rendered']}")
else:
    print("Failed to retrieve posts")
```


## 記事の投稿の仕方
WordPressのサイトURLに, `/wp-json/wp/v2/posts` と記載し, 先ほど取得した Application Passwordで認証することにより, 記事を投稿することができるようになります.

必須パラメータ
- `title`: 記事タイトル
- `content`: 記事の本文
- `status`: 記事の公開状況 (publish, draft)

Python例
```python
import requests
from requests.auth import HTTPBasicAuth

url = "https://example.com/wp-json/wp/v2/posts"
data = {
    "title": "Pythonから投稿する記事",
    "content": "この記事はWordPress REST APIを使って自動投稿されました.",
    "status": "publish"
}
auth = HTTPBasicAuth("your_username", "your_application_password")

response = requests.post(url, json=data, auth=auth)

if response.status_code == 201:
    print("Post created successfully!")
else:
    print(f"Failed to create post: {response.status_code}")

```

Curlコマンドを利用した例

```bash
curl -X POST https://example.com/wp-json/wp/v2/posts \
-H "Authorization: Basic $(echo -n 'your_username:your_application_password' | base64)" \
-H "Content-Type: application/json" \
-d '{
  "title": "REST APIによる投稿",
  "content": "この記事はcurlコマンドを使って投稿されました。",
  "status": "publish"
}'
```

### 実行結果
上記のコマンドを実行すると, 投稿に成功した場合, 以下のようなJSON形式の返答があります.

```bash
{
  "id": 123,
  "date": "2024-11-10T12:34:56",
  "title": {
    "rendered": "REST APIによる投稿"
  },
  "content": {
    "rendered": "<p>この記事はcurlコマンドを使って投稿されました。</p>"
  },
  "status": "publish",
  "link": "https://example.com/2024/11/10/rest-apiによる投稿/"
}
```


## 参考記事
WP REST API Documentation

https://ja.wp-api.org/

REST API Handbook | WordPress Developer Resources

https://developer.wordpress.org/rest-api/

REST APIとは | Red Hat

https://www.redhat.com/ja/topics/api/what-is-a-rest-api