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

シェアする

WordPress のデータを json 形式で取得する方法は無いかと調べていたら、Wordpress 4.7 からは REST API が Core に組み込まれているようだったので利用してみた。

リリース内容に Introducing REST API Content Endpoints とある。特にプラグインなどを用いなくても REST API を利用できるようになったのだ。

ドキュメントを見たところ、記事の一覧を取得するだけでなく投稿や編集もできるようだ。が、今回はデータの取得のために利用するのでそこだけを抑えておく。

基本的には URL でアクセスするだけなのでそう難しい事はないのだが、メモ代わりにココに残しておこう。

Sponsored Links

記事一覧の取得

記事の一覧を取得するには、/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=\"http://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(降順) なので未指定でも大丈夫だ。

指定可能な引数はドキュメントを参照してほしい。

上記の記事一覧では含まれない、カテゴリーやタグ名、アイキャッチに指定した画像などの詳細情報を取得するには、以下のように _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

シェアする

フォローする