WP REST APIとは?
WP REST APIはHTTPベースのREST APIです。
WP REST APIを利用することで、投稿された記事の内容を様々な言語やサーバ上から取得できます。
WordPressはPHPとDB(MySQL)を利用したブログソフトウェアです。
投稿した記事はPHPにより動的にページ生成されて表示されます。
このページ生成はWordPressが設置されているサーバ内のPHPによって行われていて、通常DBにある情報を直接別サーバから取り出すことはできません。
PHPにより生成されたWebページ以外に情報を取得したい!という場合にこのWP REST APIが使えます。
apiで取得できる情報
- id ユニークなID
- date 記事が投稿された日時
- modified: 記事が修正された日時(defaultのタイムゾーン)
- status: 投稿状態(publish, future(予約投稿), draft(下書き), private (非公開)
- title: 記事タイトル
- content: 記事内容
- categories: カテゴリ
記事内容を全件取得する
記事内容やタイトルなどを全件取得するには工夫が必要です。
一度のリクエストでは最大100件した取得できないからです(per_page=100とすると最大の100件が取得できる)
https://example.com/wp-json/wp/v2/posts?per_page=100&offset=0
例えば下記のようなシェルスクリプトで取得します
# cat script
=================
#!/bin/bash
_num=100
# 取得したいWordPressのURL
_URL='https://example.com/wp-json/wp/v2/'
#投稿全件数
_total_post=`curl -sIL "${_URL}posts?per_page=100&offset=0" | grep x-wp-total: |awk '{print $2}'| sed -e 's/\r/\n/g'`
# 最大オフセット数
_offset=`expr ${_total_post} / ${_num} \* ${_num}`
# テキストの初期化
: > ./wp.csv
: > ./wp.content
#実行
#ID, タイトル、URL、最終更新日をcsv化する
for i in `eval echo {0..${_offset}..100}`; do curl -s "${_URL}posts?per_page=100&offset=${i}" | jq -r '.[] | [.id, .title.rendered, .link, .modified]| @csv' >> wp.csv ; done
# 本文を取得する
for i in `eval echo {0..${_offset}..100}`; do curl -s "${_URL}posts?per_page=100&offset=${i}" | jq -r '.[] | [.link, .title.rendered, .content.rendered]| @csv' >> wp.content ; done
=================
# ./script