PythonでWordPressに自動投稿する

業務の自動化に興味があるんだけどどうやったらいいかわからない。WordPressの運用業務を省力化したい。

こんな疑問にお答えします!

  • PythonでWordPressに自動投稿できると便利なこと
  • PythonでWordPressに投稿してみよう

本記事の信頼性

本記事を執筆しているのはエンジニア歴10年の現役エンジニアです。初学者の方の指導歴もあるので学習のポイントを考慮して丁寧な記事を心がけております。

PythonでWordPressに自動投稿できると便利なこと

例えば、定例業務でブログでお知らせを上げている場合など、プログラムで操作できると楽できることは多いかと思います。今回はWordPressをプログラムから操作する方法をご紹介します。

WordPressはREST APIという外部から操作するための呼び出し窓口が用意されているのでそちらを使用します。

環境構築

Pythonが必要なので以下を参考にしてください。

次にrequestsをインストールしましょう。

conda install requests

次に外部プログラム用のパスワードを作成します。

サイドバーの「ユーザ」タブ→普段使用しているユーザの編集リンクをクリックするとプロフィール編集画面に移動します。

「新しいアプリケーションパスワード名」に任意の名前を入力して「新しいアプリケーションパスワードを追加」ボタンをクリックします。

パスワードが表示されるので忘れずにメモしましょう!

PythonでWordPressに投稿するサンプルプログラム

最初にプログラム全体を示し、後で個別の部分について説明しますね。

import requests
import json
from datetime import datetime
from traceback import print_exc


def wp_post(title, content):
    # 認証情報
    user = "uuuuuuuuu"  # ログインユーザ
    password = "XXXX YYYY ZZZZ AAAA BBBB CCCC"

    # 投稿情報
    payload = {
        "title": title,
        "content": content,
        "author": 1, # 投稿ユーザ
        "date": datetime.now().isoformat(),
        "categories": [10],
        "status": "draft",  # 下書き状態で作成
    }

    # リクエスト実行
    result = requests.post(
        "https://watalogs.com/wp-json/wp/v2/posts",
        data=json.dumps(payload),
        headers={"Content-type": "application/json"},
        auth=(user, password),
    )
    print(repr(result))


if __name__ == "__main__":
    try:
        content = '<h2 class="wp-block-sgb-headings sgb-heading"><div class="sgb-heading__inner sgb-heading--type3" style="background-color:#fff9e5;border-color:#ffb36b;font-size:1.2em"><span class="sgb-heading__text" style="color:#333">本記事の信頼性</span></div></h2>'

        wp_post("title", content)
    except:
        print_exc()

認証情報の設定

認証情報にはログインするユーザと先ほど作成したアプリケーションパスワードを指定します。

    # 認証情報
    user = "uuuuuuuuu"  # ログインユーザ
    password = "XXXX YYYY ZZZZ AAAA BBBB CCCC" # アプリケーションパスワード

投稿情報の設定

投稿に必要な情報を指定します。

    # 投稿情報
    payload = {
        "title": title, # 件名
        "content": content, # 本文
        "author": 1, # 投稿ユーザ
        "date": datetime.now().isoformat(), # 投稿日時
        "categories": [10], # 投稿カテゴリのID
        "status": "draft",  # 下書き状態で作成
    }

categoriesは「カテゴリー」タブの指定したいカテゴリの「カウント」を設定します。

投稿の実行

エンドポイントには「https://ドメイン名/wp-json/wp/v2/posts」を指定して、json形式に変換して実行します。

    # リクエスト実行
    result = requests.post(
        "https://watalogs.com/wp-json/wp/v2/posts",
        data=json.dumps(payload),
        headers={"Content-type": "application/json"},
        auth=(user, password),
    )
    print(repr(result))

コンテンツの生成

本文にはhtmlがそのまま書けます。

    # リクエスト実行
    result = requests.post(
if __name__ == "__main__":
    try:
        content = '<h2 class="wp-block-sgb-headings sgb-heading"><div class="sgb-heading__inner sgb-heading--type3" style="background-color:#fff9e5;border-color:#ffb36b;font-size:1.2em"><span class="sgb-heading__text" style="color:#333">本記事の信頼性</span></div></h2>'

        wp_post("title", content)
    except:
        print_exc()

グーテンベルクでhtmlを表示するのはブロックを選択して三点リーダ(・・・)をクリックします。

「HTMLとして編集」をクリックするとhmtlが表示されるのでそれを参考にすればOKです!

まとめ

PythonからWordPressに投稿するプログラムをご紹介しましたが、いかがでしたでしょうか。外部からWordPressを操作できるようになると色々とできることの幅が広がるかと思います。

今回の記事が少しでも参考になれば嬉しいです。