WordPress のデータを json 形式で取得する方法は無いかと調べていたら、Wordpress 4.7 からは REST API が Core に組み込まれているようだったので利用してみた。
https://wordpress.org/news/2016/12/vaughan/
リリース内容に Introducing REST API Content Endpoints
とある。特にプラグインなどを用いなくても REST API を利用できるようになったのだ。
ドキュメントを見たところ、記事の一覧を取得するだけでなく投稿や編集もできるようだ。が、今回はデータの取得のために利用するのでそこだけを抑えておく。
https://developer.wordpress.org/rest-api/reference/posts/
基本的には URL でアクセスするだけなのでそう難しい事はないのだが、メモ代わりにココに残しておこう。
記事一覧の取得
記事の一覧を取得するには、/wp-json/wp/v2/posts へアクセスする。
$ curl "http://loumo.jp/wp-json/wp/v2/posts" | jq
jq は json 形式のデータを整形してくれるツールなので入れておくと便利だ。
上記のコマンドを実行すると、以下のような感じで表示される。
[
{
"id": 14687,
"date": "2017-01-12T12:00:30",
"date_gmt": "2017-01-12T03:00:30",
"guid": {
"rendered": "http://loumo.jp/?p=14687"
},
"modified": "2017-01-07T19:13:26",
"modified_gmt": "2017-01-07T10:13:26",
"slug": "post-14687",
"type": "post",
"link": "http://loumo.jp/wp/archive/20170112120030/",
"title": {
"rendered": "Atom でクリップボードの履歴を取るパッケージ clipboard-plus"
},
"content": {
"rendered": "<img src=\"//loumo.jp/img/thumb/2017-01-atom-clipboard-plus.gif\" width=\"150\" height=\"90\" style=\"width:150px;height:90px;float:left;margin:0 10px 10px 0;\" alt=\"2017-01-atom-clipboard-plus.gif\">エディタを用いてプログラムや文章を書く際に重要となる機能の1つにコピー&ペーストがあります。文章の場所を移動させたり、複製したりして効率よく編集作業を行う為の機能で、これが利用できないエディタや OS は殆ど無いでしょう。\nコピーした際に一時的に文章等を...<p style=\"margin-top:0;clear:both;text-align:right;\"><a href=\"http://loumo.jp/wp/archive/20170112120030/\">CONTINUE READING »</a></p>\n<div style=\"font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both\"></div>",
"protected": false
},
"excerpt": {
"rendered": "<p>エディタを用いてプログラムや文章を書く際に重要となる機能の1つにコピー&ペーストがあります。文章の場所を移動させたり、複製したりして効率よく...</p>\n",
"protected": false
},
"author": 16,
"featured_media": 14688,
"comment_status": "open",
"ping_status": "open",
"sticky": false,
"template": "",
"format": "standard",
"meta": [],
"categories": [ 18 ],
"tags": [ 111 ],
"_links": { "self": [ { "href": "http://loumo.jp/wp-json/wp/v2/posts/14687" } ],
/* 以下省略 */
}
},
]
何も引数を指定しなければ最新記事10件をこんな感じで取得できる。パラメータを追加する事でページ数や一度に取得する数を指定したり、語句や投稿の公開日、カテゴリーやタグ等による絞り込み、並び替え等を行う事ができる。
例えば、カテゴリーID 19, 21 の記事を 20 件、ID の降順で取得したい、という場合には以下のようにする。
$ curl "http://loumo.jp/wp-json/wp/v2/posts?per_page=20&categories=19,21&orderby=id"
降順かどうかは order で指定するがデフォルトが desc(降順) なので未指定でも大丈夫だ。
指定可能な引数はドキュメントを参照してほしい。
https://developer.wordpress.org/rest-api/reference/posts/#arguments
上記の記事一覧では含まれない、カテゴリーやタグ名、アイキャッチに指定した画像などの詳細情報を取得するには、以下のように _embed を指定する。
$ curl "http://loumo.jp/wp-json/wp/v2/posts?_embed"
こうすると _embedded という項目が現れ、author や wp:featuredmedia, wp:term, といった項目によりアイキャッチ画像やタグ、カテゴリー情報を取得できるようになる。
ある特定の記事を取得する
ある特定の記事の情報を取得するには、 /wp-json/wp/v2/posts/POST_ID へアクセスする
$ curl "http://loumo.jp/wp-json/wp/v2/posts/14687"
カテゴリ一覧の取得
カテゴリの一覧を取得するには /wp-json/wp/v2/categories へアクセスする。
$ curl "http://loumo.jp/wp-json/wp/v2/categories"
以下のような感じに表示される。
[
{
"id": 21,
"count": 184,
"description": "",
"link": "http://loumo.jp/wp/archive/category/computer/programing/",
"name": "Programing",
"slug": "programing",
"taxonomy": "category",
"parent": 107,
"meta": [],
"_links": {
"self": [ { "href": "http://loumo.jp/wp-json/wp/v2/categories/21" } ],
"collection": [ { "href": "http://loumo.jp/wp-json/wp/v2/categories" } ],
"about": [ { "href": "http://loumo.jp/wp-json/wp/v2/taxonomies/category" } ],
"up": [ { "embeddable": true, "href": "http://loumo.jp/wp-json/wp/v2/categories/107" } ],
"wp:post_type": [ { "href": "http://loumo.jp/wp-json/wp/v2/posts?categories=21" } ],
"curies": [ {
"name": "wp",
"href": "https://api.w.org/{rel}",
"templated": true
}
]
}
}
]
カテゴリの一覧もパラメータを付与する事で並び替えや絞り込みを行う事ができる。例えば prog という文字が入ったカテゴリを最大2件検索するには以下のようにする。
$ curl "http://loumo.jp/wp-json/wp/v2/categories?per_page=2&search=prog" | jq
また、タグも同じような感じで取得できる。
まとめ
WordPress の REST API を利用すると上記のように情報を取得するだけでなく、投稿や編集も利用できる。他の API 等と上手く組み合わせる事で新しい Web サービスやアプリ等を作れるかもしれない。なかなか面白いと思う。
コメント