こんにちは。前回の記事では、Raspberry Pi 3BにDockerでWordPressを構築する手順を紹介しました。
今回はローカル環境のWordPressにRest APIを用いて、管理画面にアクセスせずに、Pythonから記事を投稿する方法を解説します。
Rest APIとは
Rest APIは、噛み砕いて説明すると記事の取得や投稿、更新などのやりとりや操作をXMLやJSONなどの形式で行うものです。
主に使うコマンドは以下です。
- GET:データを取得
- POST:データを投稿、追加
- PUT:データを編集
- DELETE:データを削除
Rest APIはデフォルトで有効になっており、Rest API用のパスワードを発行して使用することで、記事の取得や投稿、更新ができます。
準備
それではRest APIを使う準備について解説します。
ローカル環境の場合は、HTTPS(暗号化通信)ではなくHTTPで通信しているため、Rest APIを使用することができません。そのため、コンフィグファイルを編集してセキュリティ設定を変更します。ローカルではなくすでにデプロイ済みでHTTPSの場合は、この手順はスキップしてください。
Dockerコンテナを立ち上げている場合は、Dockerディレクトリに移動して、次のコマンドを実行してコンテナを停止します。
docker-compose down
前回の記事でDockerを用いた環境構築をした場合は、Dockerディレクトリにあるhtml
ディレクトリに移動します。Dockerではない場合は、WordPressをインストールしたディレクトリに移動してください。(wp-config.phpがあるディレクトリ)
cd ~/dockerWordPress/html
次にwp-config.php
を編集します。
vim wp-config.php
以下の文章をwp-config.phpに追加します。
define( 'WP_ENVIRONMENT_TYPE', 'local' );
WP_ENVIRONMENT_TYPE
のリファレンスはこちらです。デフォルト値はproduction
(本番環境)です。Rest APIを有効化するために値をlocal
に変更しています。
ファイルの編集および保存が完了したら、次のコマンドでコンテナを起動します。
docker-compose up -d
アプリケーションパスワードを発行する
次にWordPressの管理画面にログインして、ユーザー > プロフィール > アプリケーションパスワードの項目に移動します。
新しいアプリケーションパスワード名
は任意の名前を入力します。例:post_script_python
作成すると、24文字の英数値が表示されるのでメモして保管しておきましょう。このパスワードは1度しか表示されません。
Pythonで記事を投稿する
次はPythonでRest APIを用いて記事を投稿します。
以下のPythonファイルを作成してください。例:post_script.py
import base64
import requests
import json
MY_URL = "http://[ラズパイip]:8080"
MY_USER = "[ユーザー名]"
MY_APP_PASSWORD = "[アプリケーションパスワード]"
# ブログに投稿
def postBlog(content, title_str):
credentials = MY_USER + ':' + MY_APP_PASSWORD
token = base64.b64encode(credentials.encode())
headers = {'Authorization': 'Basic ' + token.decode('utf-8')}
post = {
'title': title_str,
'status': 'publish',
'content': content,
}
res = requests.post(f"{MY_URL}/wp-json/wp/v2/posts/", headers=headers, json=post)
if res.ok:
print(f"投稿の追加 成功 code:{res.status_code}")
return json.loads(res.text)
else:
print(f"投稿の追加 失敗 code:{res.status_code} reason:{res.reason} msg:{res.text}")
return {}
content = '<h2>テスト投稿</h2><p>テスト投稿です。</p>'
title_str = 'テストタイトル'
postBlog(content, title_str)
Pythonプログラムを実行すると、記事が追加されます。
URL(スラッグ)や、タグ、カテゴリなども指定できます。タグとカテゴリはIDで指定する必要があるためご注意ください。
タグを付与する
タグの新規作成やIDの取得などは以下のページが参考になります。
ブロックで記事を送信する
wp:paragraphタグで囲むことで、記事の本文(content)をブロックで送信できます。手動で編集する場合にちょっと便利です。
content = '<!-- wp:paragraph --><p>ブロックで投稿できます。</p><!-- /wp:paragraph -->'
おわりに
WordPressのRest APIはとてもシンプルで使いやすいので、自動投稿が簡単に実現できると思います。
GCPやAWSにインストールしたWordPressに今回作成したPythonスクリプトをcrontabで定期実行することで、決まった時刻に自動投稿するなど便利な使い方がたくさんありそうです。
Be First to Comment