2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでWordPressに画像付き記事を投稿する

Last updated at Posted at 2021-01-16

はじめに

WordPressでブログ記事を書く際に、Pythonで集計したグラフを入れてそのままPythonから画像付き記事を投稿出来ないか調べた備忘録です。

PythonからWordPressに投稿する方法

2種類方法があるらしいですが、ここでは Python-wordpress-xmlrpc を使用しました。

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>
"""

スクリーンショット 2021-08-08 10.19.46.png

参考サイト

色々な記事を参考にさせていただきました。ありがとうございます。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?