アイキャッチ付きで自動投稿したい
"自動投稿の基本" と "画像の自動アップロード" については、以下の記事に書きました。これらをまとめて、アイキャッチ付きの記事の自動投稿をやってみます。


アイキャッチ画像を用意する
前に用意したこれです。ファイル名は "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 します。
REST API Handbook Posts
auto_post.py
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 = 'これはアイキャッチ付き記事の自動投稿テストです。下記記事参照。<br>[kanren id="498"]'
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)
自動投稿の結果
こちらが、アイキャッチ付きの自動投稿結果です。
