自動投稿の基本 と 画像の自動アップロード については、すでに記事を書きました。
これらをまとめて アイキャッチ付きの記事の自動投稿 をやってみます。
作成するコードの流れはこれです。
- アイキャッチ画像をメディアライブラリへ自動アップロードする。
- レスポンスからアイキャッチ画像のIDを取得する。
- アイキャッチ付きの記事を自動投稿する。
アイキャッチ画像を用意する
この画像を使います。ファイル名は eyecatch_auto_post_test_20210518.png です。
アイキャッチ画像を自動アップロードする
アイキャッチ画像へのパスを引数にし、自動アップロードに成功したら、画像に付与されるIDを返す関数を作成します。
# auto_upload.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), ) res_dict = res.json() print(json.dumps(res_dict, indent=4)) unique_id = res_dict['id'] # アップロードした画像のID return unique_id
アイキャッチ付きの記事を自動投稿する
WP REST API Handbook を見てみます。
Posts の “featured_media” の説明を見てみると、”The ID of the featured media for the object.” と書いてあります。これがアイキャッチです。featured_media にアイキャッチの ID を設定してPOSTします。
※サンプルコードが読みづらいので、一部省略しています。
import requests from urllib.parse import urljoin from datetime import datetime import os import auto_upload def wp_post(unique_id): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/posts/') user = 'xxx' # ユーザー名 password = 'xxx' # アプリケーションパスワードで発行したパスワード content = 'これはアイキャッチ付き記事の自動投稿テストです。下記記事参照。※ここ一部省略します。' post = { 'title': 'WordPress自動投稿テスト(アイキャッチ付き)', 'status': 'publish', # draft(下書き), publish(公開) 'slug': 'wordpress-auto-post-test-with-eyecatch', # パーマリンク 'categories': 5, # カテゴリID 'date': datetime.now().isoformat(), 'content': content, 'featured_media': unique_id, # アイキャッチのID } res = requests.post( url, json=post, auth=(user, password), ) print(res) return if __name__ == '__main__': filename = 'eyecatch_auto_post_test_20210518.png' file_path = os.path.join(os.getcwd(), filename) print(file_path) unique_id = auto_upload.wp_upload_media(file_path) print(unique_id) wp_post(unique_id)
自動投稿結果
こちらがアイキャッチ付きの自動投稿の記事です。
WordPress自動投稿テスト(アイキャッチ付き)