【Python】WordPressから投稿データを取得しCSVに書き出す方法
今回は、Pythonを使ってWordPressサイトから投稿データを取得し、カテゴリ情報とともにCSVファイルに書き出す方法を紹介します。APIを活用することで効率的にデータを収集できます。
当初はこれをGoogle Apps Scriptで作ろうと思ったのですが処理時間に制約があり断念しました。割と処理時間がかかります。
ソースコード
import requests
import time
import csv
# WordPressのAPIエンドポイント
wordpress_url = 'http://example.com/wp-json/wp/v2/posts'
category_base_url = 'http://example.com/wp-json/wp/v2/categories/'
# CSVファイルを開く(追記モード)
csv_file = open('wordpress_posts.csv', mode='w', newline='', encoding='utf-8')
csv_writer = csv.writer(csv_file)
# ヘッダー行を追加
csv_writer.writerow(["Title", "URL", "Categories"])
def get_category_name(category_id):
"""カテゴリIDからカテゴリ名を取得する関数"""
try:
category_response = requests.get(f'{category_base_url}{category_id}')
category_data = category_response.json()
return category_data.get('name', 'Unknown')
except Exception as e:
print(f"Error fetching category {category_id}: {e}")
return 'Unknown'
def get_all_posts():
"""全ての投稿データを取得し、CSVに書き込む関数"""
page = 1
while True:
try:
response = requests.get(f'{wordpress_url}?page={page}')
if response.status_code == 404 or not response.json():
break # ページが存在しない場合終了
posts = response.json()
# 投稿ごとに処理
for post in posts:
title = post['title']['rendered']
url = post['link']
categories = post['categories']
# カテゴリIDからカテゴリ名を取得
category_names = [get_category_name(cat_id) for cat_id in categories]
category_names_str = ', '.join(category_names)
# CSVに書き込み
csv_writer.writerow([title, url, category_names_str])
print(f"Page {page} processed.")
page += 1
time.sleep(1) # サーバーに負荷をかけないように1秒待機
except Exception as e:
print(f"Error fetching page {page}: {e}")
break
print("Data saved to wordpress_posts.csv")
if __name__ == "__main__":
get_all_posts()
csv_file.close()
解説
CSVファイルへの書き込み:
open(‘wordpress_posts.csv’, mode=’w’, newline=”, encoding=’utf-8′) でCSVファイルを作成・開きます。mode=’w’ で書き込みモードを指定し、newline=” で改行を防止、encoding=’utf-8′ でUTF-8エンコードにします。
csv.writer でCSVファイルに書き込むためのライターオブジェクトを作成します。
ヘッダー行として「Title(タイトル)」「URL」「Categories(カテゴリ)」の3列を追加します。
カテゴリの取得:
投稿に含まれるカテゴリIDをもとに、カテゴリ名をAPIから取得します。複数のカテゴリがある場合は、カンマ区切りでカテゴリ名を連結し、CSVファイルに書き込みます。
ページごとの投稿取得:
投稿データはページ単位で取得し、各ページごとにデータをCSVに追記します。ページのデータが存在しない場合(404エラーや空のデータが返る場合)、ループを終了します。
エラーハンドリング:
カテゴリの取得や投稿データの取得時にエラーが発生した場合は、それぞれのエラーを表示し、処理を続行します。
実行結果
CSVに出力した結果が以下の通り。VSCodeの拡張機能「Excel Viewer」で表示させています。
この手法を使えば手間なくWordPressの投稿データを整理できデータ分析やバックアップに役立ちます。Pythonの強力なライブラリを駆使し効率的なデータ収集を実現しましょう。
スポンサーリンク
