サイトアイコン Lonely Mobiler

WordPress 4.7 に REST API が入っていたので使ってみた

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 &raquo;</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つにコピー&#038;ペーストがあります。文章の場所を移動させたり、複製したりして効率よく...</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 サービスやアプリ等を作れるかもしれない。なかなか面白いと思う。

Sponsored Link
モバイルバージョンを終了