WordPressの記事をPythonを使って自動投稿してみる

wp_rest_api+python+posts

ワードプレスのWP REST APIを使って記事を自動で投稿したり、更新したりしてみる回。
今回はPythonを使ってPostリクエストを投げてみる。

記事一覧を取得してみた回はこちら、

本日の実験内容(目次)
(スポンサーリンク)

実験環境(バージョン情報)

Python: 3.8.7
WordPress: 6.0

WordPressのアプリケーションパスワードの準備

RESTAPIを使って記事の投稿とか更新は他の人が勝手に実行されないようにパスワードが必要になる。
ワードプレスのアプリケーションパスワードを設定してそれを使う。ので、さっそく設定。

STEP
管理画面から「ユーザー」⇒「プロフィール」を選択
STEP
アプリケーションパスワードを追加する

新しいアプリケーションパスワード名」に適当な名前を入力して、
新しいアプリケーションパスワードを追加」をクリック

インストールされているセキュリティー系のプラグインによっては無効化されているかも?
自己責任で無効化を解除してください。

STEP
作成されたパスワードを控えておく

作成されたパスワード(赤枠部分)をプログラム内で使う

パスワードの変更はできない、「取消」で一旦削除してから再度作成する必要がある。

Pythonで記事の自動投稿プログラムを作成

「ブログのURL/wp-json/wp/v2/posts」という感じのURLをPOSTするとあたらしい記事が投稿される。
POSTのパラメータに記事の情報や認証情報を渡す。

import requests

# ブログのURL
blog_url = 'https://xxxxxxxxxxxxx'

# WordPressのユーザー名
api_user = 'ユーザー名をここに入力'

# アプリケーションパスワード
api_password = 'アプリケーションパスワードをここに入力'

# 送信する記事データ
post_data = {
    'title': '記事投稿テスト',
    'content': '<h2>テストやねん</h2><p>これは、<br>Pythonからの記事投稿の<br>テストです。</p>',
    'slug': 'python-post-test',
    'status': 'draft',  # draft=下書き、publish=公開 省略時はdraftになる
}

# Post APIのURL
post_api_url = f'{blog_url}/wp-json/wp/v2/posts'

# 記事投稿リクエスト
response = requests.post(post_api_url, json=post_data, auth=(api_user, api_password))

# レスポンスがどんな感じか表示
res_json = response.json()
print(res_json)

実行する環境に合わせて以下の変数を変更して実行してください。
blog_url :記事を投稿したいブログのURL
api_user :ログインしているワードプレスのユーザー名
api_password:作成したアプリケーションパスワード

記事のデータとして指定するキーはこちらのPosts API リファレンスのスキーマを参照してください。
カテゴリーとかタグを指定したいときはそれぞれのIDをカンマ区切りで指定する感じ
‘category’: 1,2,3
‘tags’: 10,11,12

プログラムを実行するとこんな記事が作成された。

(スポンサーリンク)

Pythonで記事を更新するプログラムを作成

「ブログのURL/wp-json/wp/v2/posts/記事ID」という感じのURLをPOSTすると該当の記事が更新される。
POSTのパラメータに記事の情報や認証情報を渡す。

import requests

# ブログのURL
blog_url = 'https://xxxxxxxxxxxxx'

# WordPressのユーザー名
api_user = 'ユーザー名をここに入力'

# アプリケーションパスワード
api_password = 'アプリケーションパスワードをここに入力'

# 更新する記事ID
post_id = 160

# 送信する記事データ
post_data = {
    'title': '記事投稿テスト+更新テスト',
    'content': '<h2>テストやねん</h2><p>これは、<br>Pythonからの記事投稿の<br>テストです。</p><p><strong>更新したよ!!</strong></p>',
    'slug': 'python-post-test-update',
    'status': 'draft',  # draft=下書き、publish=公開 省略時はdraftになる
}

# Post APIのURL
post_api_url = f'{blog_url}/wp-json/wp/v2/posts/{post_id}'

# 記事更新リクエスト
response = requests.post(post_api_url, json=post_data, auth=(api_user, api_password))

# レスポンスがどんな感じか表示
res_json = response.json()
print(res_json)

実行する環境に合わせて以下の変数を変更して実行してください。
blog_url :記事を投稿したいブログのURL
api_user :ログインしているワードプレスのユーザー名
api_password:作成したアプリケーションパスワード
post_id :更新した記事のID

プログラムを実行するとこんな感じになった。

まとめ

これでいろいろはかどるはず。

メディアファイル(画像、動画)のアップロードもためしてみました。

wp_rest_api+python+posts

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

本日の実験内容(目次)