こんにちは、ニアです!
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
(参考: 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!
コメント