これまでにPythonによるWordPressの自動処理をいくつか試してみました。
まだやっていないパターンとして、これをやってみようと思います。
- 画像を自動アップロードする。
- その画像を記事内で使う。
- 作成した記事を自動投稿する。
画像の準備
記事内で使用する画像はこれです。ファイル名は “image_auto_upload_test_20210520.png” にします。

画像を自動アップロードする
画像を自動アップロードし、そのレスポンスから画像に付与された情報を返すコードです。
# auto_upload_20210520.py
import requests
from urllib.parse import urljoin
import os
import json
def wp_upload_media(file_path):
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/media/')
user = 'xxx' # ユーザー名
password = 'xxx' # アプリケーションパスワードで発行したパスワード
f = open(file_path, 'rb')
image_data = f.read()
f.close()
filename = os.path.basename(file_path)
print(filename)
headers = {
'Content-Type': 'image/png',
'Content-Disposition': 'attachment; filename=' + filename,
}
res = requests.post(
url,
data=image_data,
headers=headers,
auth=(user, password),
)
media_info = res.json()
print(json.dumps(media_info, indent=4))
return media_info
記事内で画像を使い、記事を自動投稿する。
画像をPOSTしたときのレスポンスから画像のURLを取得し、それを記事内で使用するというコードです。
自動アップロードした画像のURLは source_url に格納されています。コードでは media_info[‘source_url’] でURLを持ってきています。
※サンプルコードが読みづらいので、一部省略しています。
import requests
from urllib.parse import urljoin
from datetime import datetime
import os
import auto_upload_20210520
def wp_post(media_info):
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/posts/')
user = 'xxx' # ユーザー名
password = 'xxx' # アプリケーションパスワードで発行したパスワード
content = 'これは自動投稿テストです。<br>'
content += '自動アップロードした画像をブログ内で使用します。<br>'
content += '<img src="' + media_info['source_url'] + '"><br>'
content += '下記記事参照。<br>※ここ一部省略します。'
post = {
'title': 'WordPress自動投稿テスト(ブログ内画像付き)',
'status': 'publish', # draft(下書き), publish(公開)
'slug': 'wordpress-auto-post-test-with-image', # パーマリンク
'categories': 5, # カテゴリID
'date': datetime.now().isoformat(),
'content': content,
}
res = requests.post(
url,
json=post,
auth=(user, password),
)
print(res)
return
if __name__ == '__main__':
filename = 'image_auto_upload_test_20210520.png'
file_path = os.path.join(os.getcwd(), filename)
media_info = auto_upload_20210520.wp_upload_media(file_path)
wp_post(media_info)
自動投稿の結果
こちらが自動投稿記事です。
WordPress自動投稿テスト(ブログ内画像付き) 