- WordPress REST APIをPythonを使って
記事の自動投稿を行います。 - タグ、カテゴリー、アイキャッチ画像の指定が可能です。
- 公開、下書き、予約(公開日時を指定)もできます。
- 当サイトで紹介しているプログラムを合わせると
定期的に記事内容をアップデートすることが可能となります。
こんにちは、hokkyokunです。
WordPress REST APIを叩いて、ブログ記事を自動投稿しようと思います。
Web APIを叩くには準備が必要なので、
まだの方はこちらを見てください(簡単です)。
私はブログをConoHa WING(コノハウィング)のレンタルサーバーを
使って運営しています。
その中で投資運用記録を
毎月一回新規投稿および最新情報へ更新するよう
自動化しています。
処理としては以下のようなことをやっています。
- マネーフォワードのデータスクレイピング
- 仮想通貨取引所bitFlyerのAPI経由で口座データ取得
- データ分析と保存
- インタラクティブなグラフ作成
※操作に応じて情報を表示する、直感的なデータ可視化のグラフ。 - htmlを最新の情報に更新し、テキスト化して保存
- 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” |
date | status=”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 | アイキャッチ画像のID | 10381 #アイキャッチID |
MY_URLに投稿したいサイト名(多くの場合、ご自身のサイトだと思います)を登録
MY_URL + /wp-json/wp/v2/posts のURLにリクエストを出して、記事投稿
アイキャッチ画像の設定
“featured_media_id”にアイキャッチ画像にしたい画像のIDを設定しますが、
事前にサーバー上にアップロードしてIDを附番されておく必要があります。
画像のIDはワードプレスのダッシュボードから確認できないので(多分)
APIを使って画像のIDを取得する方法を別に記事にしました。
SITE_NAMEとMY_USERNAMEとMY_PASSWORD
SITE_NAMEはご自身のブログのドメイン
(私の場合は、’https://www.hokkyokun.com’)
MY_USERNAMEはワードプレス上の管理画面で調べます。
ダッシュボード >> ユーザー >> プロフィール >> ユーザー名を確認
MY_PASSWORDはこちらの記事で事前準備を解説しています。
実際に使用してみる
使用してみます。
使用前に画像を事前にアップロードしておきました。
メディア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)
結果、以下のように投稿できました。
うまくアイキャッチも設定できています。
ブログの自動化
ワードプレスを操作して常に最新の情報にアップデート
当サイトで紹介しているいくつかのプログラムをつなげて
- サイトに記事が投稿されているかどうか判断
- 投稿されていれば、記事の更新
されていなければ、新規投稿
のようなブログ記事の半自動化も可能となります。
例えば天気、株価、仮想通貨価格、道路状況、遊園地の混雑具合など
最新の情報を定期的に記事に差し込むことで、記事の価値をアップさせることもできます。
ご紹介しているプログラムで可能ですので、
ぜひ活用してみてください。
Pythonを使ったワードプレスの自動化の方法をまとめています。
使用しているブログ環境
私はブログ運営のためにConoHa WING(コノハウィング)を使用しています。。
私の場合、記事投稿、記事更新、メディアID、記事IDの取得はできています。
記事の最新状態へのアップデートは問題なく、自動化できています。
他社と比較して費用が圧倒的に安くつく点を優先してこのサーバーを借りています。