これまでに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自動投稿テスト(ブログ内画像付き)