WordPress 4.7で追加されたREST API v2で、投稿記事の情報を取得してみよう!

  |   2017/06/12 ( 2018/12/31 ) | 2,240 views
 0

こんにちは、ニアです!

WordPress 4.7以降では、REST API v2を利用することで、投稿記事やカテゴリー一覧などの情報をJSON形式で取得することができるようになりました。

今回は、REST API v2で本サイトの投稿記事情報を取得する方法を紹介するとともに、すぱこーのコンテンツ情報のJSONを解析してみようと思います。

1. REST API v2を利用する

REST API v2のURLは以下のように、ドメイン名の後に「/wp-json/wp/v2」を付けます。

http://$site/wp-json/wp/v2
https://chronoir.net/wp-json/wp/v2

そのURLをベースに、URLパラメーター色々付加してJSONデータを取得していきます。

参考: WP REST API v2 Documentation

Xiia02.png
WordPress 4.7と4.71をお使いの方は、必ず最新バージョンにアップデートしてくださいね!
(参考: WordPress の脆弱性対策について – IPA 独立行政法人 情報処理推進機構

2. 投稿記事の情報を取得する

投稿記事の情報を取得する時は、「/wp-json/wp/v2/posts」にアクセスします。

http://$site/wp-json/wp/v2/posts

一部のURLパラメーターを以下に示します。

URLパラメーター 概要 デフォルト値
 offset  オフセットする記事の数を指定します。 0
 per_page  一度に取得する最大の記事数を指定します。 10
categories カテゴリーのIDを指定します。  
tags タグのIDを指定します。  
order 並び順を指定します。「asc」が昇順、「desc」が降順です。 desc
orderby 並び替えに使用する属性を指定します。「date」、「id」、「include」、「title」、「slug」 date
{
  {
    "id": 5693,
    "date": "2016-11-29T09:35:35",
    "date_gmt": "2016-11-29T00:35:35",
    "guid": {
      "rendered": "https://chronoir.net/?p=5693"
    },
    "modified": "2016-11-30T09:20:10",
    "modified_gmt": "2016-11-30T00:20:10",
    "slug": "bought-new-my-pc",
    "status": "publish",
    "type": "post",
    "link": "https://chronoir.net/bought-new-my-pc/",
    "title": {
      "rendered": "新しいMyノートPC(富士通 FMV LIFEBOOK WS1/W)を購入しました!"
    },
    "content": {
      "rendered": "{中略}",
      "protected": false
    },
    "excerpt": {
      "rendered": "<p>こんにちはー!ニアです! 先日、新しいノートPC(富士通 FMV LIFEBOOK WS1/W)を購入しました。</p>\n",
      "protected": false
    },
    "author": 4,
    "featured_media": 5701,
    "comment_status": "open",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": [],
    "categories": [
      124,
      189
    ],
    "tags": [
      231,
      116
    ],
    "_links": {
      "self": [
        {
          "href": "https://chronoir.net/wp-json/wp/v2/posts/5693"
        }
      ],
      "collection": [
        {
          "href": "https://chronoir.net/wp-json/wp/v2/posts"
        }
      ],
      "about": [
        {
          "href": "https://chronoir.net/wp-json/wp/v2/types/post"
        }
      ],
      "author": [
        {
          "embeddable": true,
          "href": "https://chronoir.net/wp-json/wp/v2/users/4"
        }
      ],
      "replies": [
        {
          "embeddable": true,
          "href": "https://chronoir.net/wp-json/wp/v2/comments?post=5693"
        }
      ],
      "version-history": [
        {
          "href": "https://chronoir.net/wp-json/wp/v2/posts/5693/revisions"
        }
      ],
      "wp:featuredmedia": [
        {
          "embeddable": true,
          "href": "https://chronoir.net/wp-json/wp/v2/media/5701"
        }
      ],
      "wp:attachment": [
        {
          "href": "https://chronoir.net/wp-json/wp/v2/media?parent=5693"
        }
      ],
      "wp:term": [
        {
          "taxonomy": "category",
          "embeddable": true,
          "href": "https://chronoir.net/wp-json/wp/v2/categories?post=5693"
        },
        {
          "taxonomy": "post_tag",
          "embeddable": true,
          "href": "https://chronoir.net/wp-json/wp/v2/tags?post=5693"
        }
      ],
      "curies": [
        {
          "name": "wp",
          "href": "https://api.w.org/{rel}",
          "templated": true
        }
      ]
    }
  },
}

3. すぱこーのコンテンツ情報を解析してみる

次は、プログラミング生放送さんのサイトからREST API v2で、すぱこーのコンテンツ情報を解析してみます。

すぱこーRSSフィード」の記事より、すぱこーのコンテンツの記事のカテゴリーは「web-comic」、タグは「spaco」(焼きそば編は「spaco-yakisoba」)が設定されています。

ということで、URLパラメーターは「categories」に「web-comic」のIDを、「tags」に「spaco」(焼きそば編は「spaco-yakisoba」)のIDを指定し、GETリクエストを送信します。JetpackのJSON APIとは異なり、カテゴリーとタグはIDで指定します。ちょっと不便です・・・。

// すぱこー
https://pronama.azurewebsites.net/wp-json/wp/v2/posts?categories=271&tags=2031&offset=0&per_page=100

// すぱこー焼きそば編
https://pronama.azurewebsites.net/wp-json/wp/v2/posts?categories=271&tags=2037&offset=0&per_page=100

すぱこーでの実行結果の例を以下に示します。

[
  {
    "id": 79911,
    "date": "2017-05-07T23:01:36",
    "date_gmt": "2017-05-07T14:01:36",
    "guid": {
      "rendered": "http://pronama.azurewebsites.net/?p=79911"
    },
    "modified": "2017-05-07T23:01:36",
    "modified_gmt": "2017-05-07T14:01:36",
    "slug": "web-comic-spaco-69",
    "type": "post",
    "link": "https://pronama.azurewebsites.net/2017/05/07/web-comic-spaco-69/",
    "title": {
      "rendered": "[Web Comic] 情報処理研究会漫画 すぱこー Ver. 69"
    },
    "content": {
      "rendered": "{中略}",
      "protected": false
    },
    "featured_media": 79913,
    "categories": [
      71,
      271
    ],
    "tags": [
      2031,
      2026
    ],
  }
]
JSONのメンバー 概要
title > rendered タイトル名
date 公開日
modified 更新日
slug スラッグ(URL)の一部で使用しています。
link 記事へのリンク
categories カテゴリーのID
tags タグのID

3.1. アイキャッチ画像のURLを取得するには

アイキャッチ画像のURLをREST API v2の結果に含めるには、URLパラメーターに「_embed」を付けます。

// すぱこー
https://pronama.azurewebsites.net/wp-json/wp/v2/posts?_embed&categories=271&tags=2031&offset=0&per_page=100

// すぱこー焼きそば編
https://pronama.azurewebsites.net/wp-json/wp/v2/posts?_embed&categories=271&tags=2037&offset=0&per_page=100

すると、JSONデータに「_embedded」が含まれるようになります。そこから「wp:featuredmedia」>「source_url」を辿ることで、アイキャッチ画像のURLを取得できます。

[
  {
    "id": 79911,
    "date": "2017-05-07T23:01:36",
    "date_gmt": "2017-05-07T14:01:36",
    "guid": {
      "rendered": "http://pronama.azurewebsites.net/?p=79911"
    },
    "modified": "2017-05-07T23:01:36",
    "modified_gmt": "2017-05-07T14:01:36",
    "slug": "web-comic-spaco-69",
    "type": "post",
    "link": "https://pronama.azurewebsites.net/2017/05/07/web-comic-spaco-69/",
    "title": {
      "rendered": "[Web Comic] 情報処理研究会漫画 すぱこー Ver. 69"
    },
    "content": {
      "rendered": "{中略}",
      "protected": false
    },
    "featured_media": 79913,
    "categories": [
      71,
      271
    ],
    "tags": [
      2031,
      2026
    ],
    "_embedded": {
      "wp:featuredmedia": [
        {
          "id": 79913,
          "date": "2017-05-07T23:00:14",
          "slug": "170315thumb",
          "type": "attachment",
          "link": "https://pronama.azurewebsites.net/2017/05/07/web-comic-spaco-69/170315thumb/",
          "title": {
            "rendered": "すぱこー Ver. 69"
          },
          "author": 1,
          "caption": {
            "rendered": ""
          },
          "alt_text": "",
          "media_type": "image",
          "mime_type": "image/png",
          "source_url": "https://pronama.azurewebsites.net/wp-content/uploads/2017/05/170315thumb.png",
        }
      ],
      "wp:term": [
        [
          {
            "id": 271,
            "link": "https://pronama.azurewebsites.net/category/web-comic/",
            "name": "Web Comic",
            "slug": "web-comic",
            "taxonomy": "category",
          }
        ],
        [
          {
            "id": 2031,
            "link": "https://pronama.azurewebsites.net/tag/spaco/",
            "name": "すぱこー",
            "slug": "spaco",
            "taxonomy": "post_tag",
          },
          {
            "id": 2026,
            "link": "https://pronama.azurewebsites.net/tag/ikemura-hiroichi/",
            "name": "池村ヒロイチ",
            "slug": "ikemura-hiroichi",
            "taxonomy": "post_tag",
          }
        ]
      ]
    }
  }
]

4. おわりに

今回は、WordPress 4.7で追加されたREST API v2を使って、投稿記事の情報を取得したり、すぱこーのコンテンツ情報を解析したりしました。

それでは、See you next!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

ニア(Nia)

サーバー・フロント・DB・インフラ(クラウド)エンジニア。主にC#/PHP(最近はTypeScriptも)を使っています。最近はDockerやWebアプリ、UWPやモバイルアプリ開発(Xamarin)、ブロックチェーン等を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください