Python

【Python×ワードプレス】WordPress REST APIを叩いて記事を自動投稿する。コピペOK

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。
WordPress REST APIを叩いて、ブログ記事を自動投稿しようと思います。

Web APIを叩くには準備が必要なので、
まだの方はこちらを見てください(簡単です)

実際に使用することを考えて、
タグやカテゴリーなどの指定
いきなり公開や、下書き、公開日の日時指定など

引数のチューニングでやりたいことを実行できるようにしました。

私はブログをConoHa WING(コノハウィング)のレンタルサーバーを
使って運営しています。

その中で投資運用記録
毎月一回新規投稿および最新情報へ更新するよう
自動化しています。

処理としては以下のようなことをやっています。

  1. マネーフォワードのデータスクレイピング
  2. 仮想通貨取引所bitFlyerのAPI経由で口座データ取得
  3. データ分析と保存
  4. インタラクティブなグラフ作成
    ※操作に応じて情報を表示する、直感的なデータ可視化のグラフ。
  5. htmlを最新の情報に更新し、テキスト化して保存
  6. WordPress REST API経由でブログ記事の更新
    ①タイトルから記事ID取得→なければ新規投稿
    ②記事IDから記事情報を取得
    ③データを更新し、記事投稿

上記内容はすべてPythonだけで行っています。

業界最安値なのでConoHa WING(コノハウィング)を使っているのですが、
問題なく動きました。

自動投稿する関数

さっそくですが、自動投稿する関数を公開します。
使い方は以下で説明します。

import requests
import datetime
"""
dicts={
    'status': '記事の状態', #draft:下書き,publish:投稿,future:予約
    'slug': 'スラッグ', 
    'title': '記事タイトル',
    'content': '本文(html形式で記述されたテキストを挿入)',
    'categories': '[カテゴリー番号をリストで]',
    'tags': '[タグ番号をリストで]',
    'featured_media_id':'アイキャッチID番号'
    'date': '公開したい時刻をdatetime.datetime形式で(status=futureの場合のみ処理)'}
※必要なパラメーターだけ記載してください。
"""
def article_post(dicts):
    user = MY_USERNAME # ユーザー名
    password = MY_PASSWORD # アプリケーションパスワードで発行したパスワード
    
    #投稿時間の予約
    if dicts["status"]=="future":
        dicts["date"]=dicts["date"].isoformat()
    else:
        dicts["date"]=datetime.datetime.now().isoformat()
    
    res=requests.post(SITE_NAME + "/wp-json/wp/v2/posts",
                    json=dicts,
                    headers={'Content-type': "application/json"},
                    auth=(user, password))
    print(f"------------\n{dicts['title']}\nres.status:{res.status_code}\n------------")
    return res

使用方法

引数としては以下のようなものを設定します。

引数

引数説明
status 投稿記事の状態
(公開:publish, 下書き:draft,予約:future)
“future”
datestatus=”future”の場合
(=投稿記事が予約投稿)
予約時間をdatetimeで
datetime.datetime(2023,4,5)
slugパーマネント“test”
title記事タイトル“test_title”
content本文“<p>test<br>
test<br>
test<br>
test<br>
test<br>
test<br>
test</p>”
category_idsカテゴリーのIDのリスト[28]
当サイトでの
「Python」のカテゴリーID
tag_idsタグのIDのリスト[33]
当サイトでの
「sample」のタグID
feature_media_idアイキャッチ画像のID10381
#アイキャッチID

MY_URLに投稿したいサイト名(多くの場合、ご自身のサイトだと思います)を登録

MY_URL + /wp-json/wp/v2/posts のURLにリクエストを出して、記事投稿 

アイキャッチ画像の設定

“featured_media_id”にアイキャッチ画像にしたい画像のIDを設定しますが、
事前にサーバー上にアップロードしてIDを附番されておく必要があります。

画像のIDはワードプレスのダッシュボードから確認できないので(多分)
APIを使って画像のIDを取得する方法を別に記事にしました

【Python×ワードプレス】画像タイトルからメディアIDを取得する関数。アイキャッチ付き自動投稿も(WordPress REST APIを叩く) わかること WordPress REST APIをPythonを使ってアップロードした画像のメディアIDを取得します。 メディ...

SITE_NAMEとMY_USERNAMEとMY_PASSWORD

SITE_NAMEはご自身のブログのドメイン
(私の場合は、’https://www.hokkyokun.com’)

MY_USERNAMEはワードプレス上の管理画面で調べます。
ダッシュボード >> ユーザー >> プロフィール >> ユーザー名を確認

MY_PASSWORDはこちらの記事で事前準備を解説しています。

【Python×ワードプレス】ワードプレスの記事投稿と更新を自動化!WordPress REST APIの準備 わかること ワードプレスを自動操作するための準備(WordPress REST API)を紹介。 APIを使うことで記事の投稿...

実際に使用してみる

使用してみます。

使用前に画像を事前にアップロードしておきました。
メディアIDは10381でした。

試したコードはこんな感じです。

#記事の投稿
    dicts={
        "status":"future",
        "slug":"test",
        "title":"test_title",
        "content":"<p>test<br>test<br>test<br>test<br>test<br>test<br>test</p>",
        "category_ids":[28], #「Python」のカテゴリーID
        "tag_ids":[33], #「sample」のタグID
        "featured_media_id":10381,
        "date":datetime.datetime(2023,4,5) #アイキャッチID
    }
    res=article_post(dicts)

結果、以下のように投稿できました。

うまくアイキャッチも設定できています。

ブログの自動化

ワードプレスを操作して常に最新の情報にアップデート

当サイトで紹介しているいくつかのプログラムをつなげて

  1. サイトに記事が投稿されているかどうか判断
  2. 投稿されていれば、記事の更新
    されていなければ、新規投稿

のようなブログ記事の半自動化も可能となります。

例えば天気、株価、仮想通貨価格、道路状況、遊園地の混雑具合など
最新の情報を定期的に記事に差し込むことで、記事の価値をアップさせることもできます。

ご紹介しているプログラムで可能ですので、
ぜひ活用してみてください。

Pythonを使ったワードプレスの自動化の方法をまとめています。

使用しているブログ環境

私はブログ運営のためにConoHa WING(コノハウィング)を使用しています。。

私の場合、記事投稿、記事更新、メディアID、記事IDの取得はできています。
記事の最新状態へのアップデートは問題なく、自動化できています。

他社と比較して費用が圧倒的に安くつく点を優先してこのサーバーを借りています。