画像自動アップロード and ブログ自動投稿
これまでに Python による自動処理をいくつか試してみました。まだやっていないパターンとして、今回は、自動アップロードした画像をブログ内で使用し、そのブログを WordPress へ自動投稿するということをしたいと思います。
画像の準備
これです。ファイル名は "image_auto_upload_test_20210520.png" にします。
画像の自動アップロード
フローは、画像を自動アップロードし、その Response 情報を使って、その画像をブログ内で使い、そのブログを自動投稿するという流れになります。
まずは、画像を自動アップロードし、その Response を情報として残すコードです。
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 がどこに格納されているかというと、それは、response 情報の "source_url" です。
コード内で、media_info['source_url'] で URL を持ってきています。
auto_post_20210520.py
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>[kanren id="566"]'
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)
自動投稿の結果
こちらが、自動投稿結果です。
