Python

【Python×ワードプレス】WordPress REST APIを叩いて記事を自動更新する。

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

こんにちは、hokkyokunです。
WordPress REST APIを叩いて、ブログ記事を自動更新します。

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

記事を更新するためには
以下の情報が必要となります。

これらIDがわかると記事更新を自動化することができます

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

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

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

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

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

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

自動更新する関数

コードは以下の通りです。
使用方法は下記に記します。

def update_wp(id,dicts):
    user = MY_USERNAME # ユーザー名
    password = MY_PASSWORD # アプリケーションパスワードで発行したパスワード

    # SITE_NAME 特定のサイト名。当サイトなら'https://www.hokkyokun.com'
    url=f"{SITE_NAME}/wp-json/wp/v2/posts/{str(id)}"

    # update_dataに更新する内容を格納していく
    update_data={}
    for key,value in dicts.items():
        update_data[key]=value
    
    # ステータスが"future"の場合は、予約時間を設定、それ以外は即時
    if dicts["status"]=="future":
        update_data["date"]=dicts["future_datetime"].isoformat()
    else:
        update_data["date"]=datetime.datetime.now().isoformat()
    
    headers = {'content-type': "Application/json"}
    res=requests.post(url,headers=headers,json=update_data,auth=(user,password))
    print(f"----------\ntitle:{dicts['title']}\nres.status:{res.status_code}\n----------")
    return res.json()

引数

  • id : 記事ID
  • dicts : 記事内容

指定する要素がたくさんあるので、
記事更新の内容に関しては辞書形式(dicts)で格納することにしました。
dictsの中身は以下のように指定してください。

dicts={

    “status”:記事の状態(公開:publish, 下書き:draft,予約:future)

    “slug”: 「urlのドメイン以下の指定」

    “title”: 「記事タイトル」

    “content”: 「内容をhtml形式で指定」

    “categories”: 「カテゴリーIDをリストで指定」

    “tags”: 「タグIDをリストで指定」

    “featured_media”: 「メディアID」

    }

具体的には以下のように指定します。

id=100
dicts={
    "status":"publish",
    "slug":"update-test",
    "title":"タイトル「更新」",
    "content":"<P>更新<br>更新<br>更新<br>更新<br>更新</p>",
    "categories":[10], 
    "tags":[34], 
    "featured_media":media_id,
    }

実際に使用してみる

実際に使ってみます。
せっかくなので、記事を自動投稿してそれを更新してみます。
具体的には以下の流れのプログラムを作ります。

  1. 記事を自動投稿(article_post関数
  2. 記事タイトルからIDを取得(get_wp_id関数
  3. 画像名からメディアIDを取得(get_wp_media_id_match関数
  4. 記事を自動更新←(当ページ)

()はそれぞれの関数を紹介している記事に飛びます。

#記事の投稿
dicts={
    "status":"publish",
    "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 #アイキャッチID
}
res=article_post(dicts)

#記事IDを取得
id=get_wp_id("test_title")

#メディアIDを取得
media_id=get_wp_media_id_match("update_test")

#記事の更新
dicts={
    "status":"publish",
    "slug":"update-test",
    "title":"タイトル「更新」",
    "content":"<P>更新<br>更新<br>更新<br>更新<br>更新</p>",
    "categories":[10] #VBAのカテゴリ, 
    "tags":[34], 
    "featured_media":media_id,
    }
update_wp(id,dicts)

①の記事を自動投稿すると
「test_title」というタイトルで記事が投稿できました。

これは新規投稿し、更新前の記事です

中身はこんな感じです。

②と③で記事IDとメディアIDを取得します。
④で記事を自動更新します。

これは更新後の記事です。
タイトル、カテゴリーが変更されています。

ブログの自動化

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

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

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

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

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

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

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

使用しているブログ環境

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

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

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