WordPressで構築されたサイトは、APIが公開されているため、プログラムで記事を一括で抜き取ることも普通に可能です。
リファレンスを読みながら、自分で試した内容を以下に記録しておきます。
対象読者
- Python、Google Colabが使える人
- APIを呼び出すプログラムを使ったことがある人、もしくは、これから勉強したい人
- WordPressで自分の記事をまとめて取得したい人
プログラム
# import csv
import time
import requests
import pandas as pd
from bs4 import BeautifulSoup
#カラムから、記事本文を抜き取る
def get_clean_text_column(html):
try:
html = html["rendered"]
result = BeautifulSoup(str(html), "html.parser").get_text(strip=True)
return result
except Exception as e:
return f"ERROR:{e}"
params = {
"page":1,
"per_page": 100,
}
API_ENDPOINT = "xxx_MODIFY_HERE_xxx"
resp = requests.get(API_ENDPOINT, params=params, timeout=30)
result = pd.DataFrame(resp.json())
# content列のデータに、適当な文字列を足し算して「body_text」列を新しく作る
result["body_text"] = result["content"].apply(get_clean_text_column)
result
## CSV出力する場合は以下
#result.to_csv("output.csv")
プログラムの要点
上述のコードは、「APIを用いて、WordPressの記事を一括で取得できる」ことを示すための、最小のコード見本です。したがって、本格的な自動化・システム化に役立つコードではありません。より安定性のあるコードにする際は、下記の点に留意してください。
現状のコードは、100記事が上限
WordPress REST APIは、per_page が最大100件で、100件を超えるデータは page=1, page=2... のように分けて取得する設計です。上述のコードでは、ページを進めながら101件目以降のページを取得する仕組みは入れていません。
この点についての、詳細な仕様・ルールは、下記の公式リファレンスを確認してください。
エラー発生時の対応は、好みに応じて詳細化してください
現状は、エラーが発生した際には、すべて本文のかわりにエラー本文を格納する仕組みとしています。
もし、サーバー側のバックエンドに実装するような場合であれば、目的に応じて、
- HTTPレスポンスに失敗した場合を想定したエラーハンドリング
- ログの出力
なども足しておいたほうがよいでしょう。
APIのエンドポイントは適宜修正のこと
弊社・合同会社インクルーシブソリューションズのホームページの場合は、ホームが
https://inclu-sol.versus.jp/wordpress/
です。
したがって、APIのエンドポイントは、
https://inclu-sol.versus.jp/wordpress/wp-json/wp/v2/posts
APIの詳細仕様は公式リファレスを参照のこと
下記にリファレンスのリンクも紹介しておきます
さいごに:NoteBook LMに取り込むと、記事の一覧は、新たな記事案を生み出す"材料"に
近年、AI活用のために、記事コンテンツも一括取得が必要となる場面が多くなっていると思います。
noteでも、コンテンツ記事の一括取得と、NoteBook LM活用のメリットについて解説しているので、ぜひチェックしてみてください。
弊社について
本記事を書いている 合同会社インクルーシブソリューションズ は、データ基盤構築・分析基盤設計・システム改善支援を中心に活動している小規模IT法人です。
主な領域は、
- データマート設計・データパイプライン構築
- SQL / Python を用いたデータ処理設計
- BI導入支援・分析基盤の整備
- 既存システムの運用改善・可視化支援
といった、「データを使える状態にする」ための活動です。
弊社の企業活動に興味がある方は、ぜひ公式サイトも覗いてみてください。