Skip to content

ローカル環境のWordPressにRest APIとPythonで記事を自動投稿しよう

こんにちは。前回の記事では、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の管理画面にログインして、ユーザー > プロフィール > アプリケーションパスワードの項目に移動します。

f3e06349 image

新しいアプリケーションパスワード名 は任意の名前を入力します。例: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プログラムを実行すると、記事が追加されます。

9f4722b1 image

URL(スラッグ)や、タグ、カテゴリなども指定できます。タグとカテゴリはIDで指定する必要があるためご注意ください。

タグを付与する

タグの新規作成やIDの取得などは以下のページが参考になります。

ブロックで記事を送信する

wp:paragraphタグで囲むことで、記事の本文(content)をブロックで送信できます。手動で編集する場合にちょっと便利です。

content = '<!-- wp:paragraph --><p>ブロックで投稿できます。</p><!-- /wp:paragraph -->'

おわりに

WordPressのRest APIはとてもシンプルで使いやすいので、自動投稿が簡単に実現できると思います。

GCPやAWSにインストールしたWordPressに今回作成したPythonスクリプトをcrontabで定期実行することで、決まった時刻に自動投稿するなど便利な使い方がたくさんありそうです。

カテゴリRaspberry PiWordPressプログラミング

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントは日本語で入力してください。(スパム対策)

CAPTCHA