- WordPress REST API経由でPythonを使って
記事を自動更新します。 - 中身はもちろん、タグ、カテゴリ、
アイキャッチ画像の更新も可能です。 - 当サイトで紹介しているプログラムを合わせると
定期的に記事内容をアップデートすることが可能
こんにちは、hokkyokunです。
WordPress REST APIを叩いて、ブログ記事を自動更新します。
Web APIを叩くには準備が必要なので
まだの方はこちらを見てください(簡単です)。
記事を更新するためには
以下の情報が必要となります。
これらIDがわかると記事更新を自動化することができます。
私はブログをConoHa WING(コノハウィング)のレンタルサーバーを
使って運営しています。
その中で投資運用記録を
毎月一回新規投稿および最新情報へ更新するよう
自動化しています。
処理としては以下のようなことをやっています。
- マネーフォワードのデータスクレイピング
- 仮想通貨取引所bitFlyerのAPI経由で口座データ取得
- データ分析と保存
- インタラクティブなグラフ作成
※操作に応じて情報を表示する、直感的なデータ可視化のグラフ。 - htmlを最新の情報に更新し、テキスト化して保存
- 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()
引数
指定する要素がたくさんあるので、
記事更新の内容に関しては辞書形式(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,
}
実際に使用してみる
実際に使ってみます。
せっかくなので、記事を自動投稿してそれを更新してみます。
具体的には以下の流れのプログラムを作ります。
- 記事を自動投稿(article_post関数)
- 記事タイトルからIDを取得(get_wp_id関数)
- 画像名からメディアIDを取得(get_wp_media_id_match関数)
- 記事を自動更新←(当ページ)
()はそれぞれの関数を紹介している記事に飛びます。
#記事の投稿
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を取得します。
④で記事を自動更新します。
これは更新後の記事です。
タイトル、カテゴリーが変更されています。
ブログの自動化
ワードプレスを操作して常に最新の情報にアップデート
当サイトで紹介しているいくつかのプログラムをつなげて
- サイトに記事が投稿されているかどうか判断
- 投稿されていれば、記事の更新
されていなければ、新規投稿
のようなブログ記事の半自動化も可能となります。
例えば天気、株価、仮想通貨価格、道路状況、遊園地の混雑具合など
最新の情報を定期的に記事に差し込むことで、記事の価値をアップさせることもできます。
ご紹介しているプログラムで可能ですので、
ぜひ活用してみてください。
Pythonを使ったワードプレスの自動化の方法をまとめています。
使用しているブログ環境
私はブログ運営のためにConoHa WING(コノハウィング)を使用しています。
私の場合、記事投稿、記事更新、メディアID、記事IDの取得はできています。
記事の最新状態へのアップデートは問題なく、自動化できています。
他社と比較して費用が圧倒的に安くつく点を優先してこのサーバーを借りています。