はじめに
WordPressでブログ記事を書く際に、Pythonで集計したグラフを入れてそのままPythonから画像付き記事を投稿出来ないか調べた備忘録です。
PythonからWordPressに投稿する方法
2種類方法があるらしいですが、ここでは Python-wordpress-xmlrpc を使用しました。
使用環境
$python -V
Python 3.8.3
インストール
python-wordpress-xmlrpcのインストールはpipでします。
私はAnacondaを使用しているので、本来はcondaでインストールしたいのですが見つかりませんでした。
pip install python-wordpress-xmlrpc
画像付き記事を投稿するサンプルコード
# import
import os
import datetime
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import media
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
def upload_image(in_image_file_name, out_image_file_name):
if os.path.exists(in_image_file_name):
with open(in_image_file_name, 'rb') as f:
binary = f.read()
data = {
"name": out_image_file_name,
"type": 'image/png',
"overwrite": True,
"bits": binary
}
media_id = wp.call(media.UploadFile(data))['id']
print(in_image_file_name.split('/')
[-1], 'Upload Success : id=%s' % media_id)
return media_id
else:
print(in_image_file_name.split('/')[-1], 'NO IMAGE!!')
# Set URL, ID, Password
WORDPRESS_ID = "YourID"
WORDPRESS_PW = "YourPassword"
WORDPRESS_URL = "YourURL/xmlrpc.php"
wp = Client(WORDPRESS_URL, WORDPRESS_ID, WORDPRESS_PW)
# Picture file name & Upload
imgPath = "picture.png"
media_id = upload_image(imgPath, imgPath)
# Blog Title
title = "記事タイトル"
# Blog Content (html)
body = """
<p>本文本文本文本文本文本文本文本文本文本文本文本文本文本文</p>
<h2>見出し</h2>
<figure class="wp-block-image alignwide size-large">
<img src="YourURL/wp-content/uploads/year/month/%s" alt="" class="wp-image-%s"/>
</figure>
""" %(imgPath, media_id)
# publish or draft
status = "draft"
#Category keyword
cat1 = 'category1'
cat2 = 'category2'
cat3 = 'category3'
#Tag keyword
tag1 = 'tag1'
tag2 = 'tag2'
tag3 = 'tag3'
slug = "slug"
# Post
post = WordPressPost()
post.title = title
post.content = body
post.post_status = status
post.terms_names = {
"category": [cat1, cat2, cat3],
"post_tag": [tag1, tag2, tag3],
}
post.slug = slug
# Set eye-catch image
post.thumbnail = media_id
# Post Time
post.date = datetime.datetime.now() - datetime.timedelta(hours=9)
wp.call(NewPost(post))
課題
画像リンクがもっといい書き方があるのではないかと思いますが、改良方法が見つかれば修正します。
効果
データをPythonで処理してグラフ作成し、そのままグラフ付き記事にしてWordPressに投稿と自動化できるためとても楽です。これから活用していきたいです。
追記:2021/8/8
ご質問をいただきました。ありがとうございます。
Q:これを使って投稿することはできたんですが、なぜかiframeが消えてしまうのですが原因わかったりしますか?
A:試してみましたが、COCOONでは特に問題なくiFrameが表示出来ました。
YouTubeを埋め込んだ例です(藤井風さんのPVを貼らせていただきました!)。
iFrameの埋め込みは下記サイトを参考にさせていただいています。
WordPressサイトにiFrameコードを埋め込む方法(手動およびプラグインを使用)
サイトにある通り、YouTubeはサイトURLを貼り付けても表示できませんでした(上)。
埋め込みコードを取得することで、この方法で記事を投稿しても特に問題なくiFrameが使えるようです(下)。
COCOONでは問題なく表示できることを確認しました。ですのでWordPressテーマによるのかもしれませんが、すいません、原因は分かりません。ご参考までです。
body = """
<iframe src="https://www.youtube.com/watch?v=7s4RmXxcZvM"></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/TcLLpZBWsck" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
"""
参考サイト
色々な記事を参考にさせていただきました。ありがとうございます。