[WordPress] Jetpack の JSON API を使ってみる
Qiita Web API Advent Calendar 2015 21日目と、Qiita プロ生ちゃん Advent Calendar 2015 21日目(穴埋め)の投稿です。
Jetpack for WordPress の JSON API
WordPress 社公式の多機能プラグインの Jetpack の機能のひとつに、JSON API があります。有効にすると、OAuth2 による認証および WordPress.com REST API により、あなたの WordPress (Blog) の操作や情報取得ができます。
多機能な API で、WordPress と連携する Web サービスやクライアントアプリを作るときに使えるでしょう。たとえば、WordPress 標準では用意されていないカテゴリーとタグ両方を指定した投稿の取得もできます。
余談です。これまで無効にしていたのですが、すぱこーの RSS フィード を公開するために利用しました。この程度であれば WordPress のコードを改変や、プラグインで対応できると思いますが、WordPress とは独立して Web サービスを作るほうが手軽と思ったので。JSON API から情報を取得した後の話は、[ASP.NET MVC] さくっと RSS フィードを出力する に書いています。
機能の有効化
Jetpack の JSON API の機能を有効化しましょう。これで、あなたの WordPress (Blog) 情報にアクセスする API ができました。
サイト情報の取得
サイト (Blog) の情報を取得してみます。API のエンドポイントは、次の URL です。GET メソッドです。
そう、https://public-api.wordpress.com/ を通して、あなたのサイトの情報が取得できるようになっています。
$site は、Blog のドメインまたは サイトの ID(数字)です。プロ生であれば、次のようになります。
- https://public-api.wordpress.com/rest/v1.1/sites/pronama.jp/
- https://public-api.wordpress.com/rest/v1.1/sites/90668331/
ID(数字)は、Jetpack の管理画面にある「サイト統計情報」から、「WordPress.com で詳細な統計情報」へアクセスしたときの URL に含まれています。
ドメインでアクセスできない場合は、Jetpack の連携を一度解除し、再度連携するとうまくいくようです(プロ生もそうでした)。
上記のアクセス結果は、次の通りです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"ID": 90668331, | |
"URL": "http://pronama.azurewebsites.net", | |
"description": "略してプロ生", | |
"is_following": false, | |
"is_private": false, | |
"jetpack": true, | |
"logo": { | |
"id": 0, | |
"sizes": [], | |
"url": "" | |
}, | |
"meta": { | |
"links": { | |
"comments": "https://public-api.wordpress.com/rest/v1/sites/90668331/comments/", | |
"help": "https://public-api.wordpress.com/rest/v1/sites/90668331/help", | |
"posts": "https://public-api.wordpress.com/rest/v1/sites/90668331/posts/", | |
"self": "https://public-api.wordpress.com/rest/v1/sites/90668331", | |
"xmlrpc": "http://pronama.azurewebsites.net/xmlrpc.php" | |
} | |
}, | |
"name": "プログラミング生放送", | |
"subscribers_count": 0 | |
} |
投稿情報の取得
投稿した情報を取得してみます。いずれも GET メソッドです。
- https://developer.wordpress.com/docs/api/1.1/sites/$site/posts/ : 一覧の取得
- https://developer.wordpress.com/docs/api/1.1/sites/$site/posts/$post_ID : 特定の投稿の取得
一覧の取得であれば、次のようにカテゴリーやタグによる絞り込みや、offset/number パラメーターで取得する位置と件数も指定できます。その他、指定できるパラメーターはたくさんあります。詳しくは、REST API Resources を参照してくだしあ。
https://public-api.wordpress.com/rest/v1.1/sites/pronama.jp/posts/?category=web-comic&tag=spaco&offset=0&number=10
取得できる投稿の情報は、いろいろあります。普通に Blog を閲覧しているだけではわからない情報も含まれています。以下は、https://public-api.wordpress.com/rest/v1.1/sites/pronama.jp/posts/?category=web-comic&tag=spaco&offset=0&number=1 の結果です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"found": 42, | |
"meta": { | |
"links": { | |
"counts": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/post-counts/post" | |
}, | |
"next_page": "value=2015-12-06T22%3A35%3A35%2B09%3A00&id=77563" | |
}, | |
"posts": [ | |
{ | |
"ID": 77563, | |
"URL": "http://pronama.azurewebsites.net/2015/12/06/web-comic-spaco-42/", | |
"attachment_count": 3, | |
"attachments": { | |
"77564": { | |
"ID": 77564, | |
"URL": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101.png", | |
"guid": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101.png", | |
"height": 1458, | |
"mime_type": "image/png", | |
"width": 1032 | |
}, | |
"77565": { | |
"ID": 77565, | |
"URL": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb.png", | |
"guid": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb.png", | |
"height": 485, | |
"mime_type": "image/png", | |
"width": 740 | |
}, | |
"77566": { | |
"ID": 77566, | |
"URL": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb2.png", | |
"guid": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb2.png", | |
"height": 485, | |
"mime_type": "image/png", | |
"width": 740 | |
} | |
}, | |
"author": { | |
"ID": 1, | |
"URL": "", | |
"avatar_URL": "http://1.gravatar.com/avatar/d68668f6a741811897b0f81cefa1e821?s=96&d=mm&r=g", | |
"email": false, | |
"first_name": "", | |
"last_name": "", | |
"login": "jz5ver1", | |
"name": "jz5", | |
"nice_name": "jz5ver1", | |
"profile_URL": "http://en.gravatar.com/d68668f6a741811897b0f81cefa1e821" | |
}, | |
"capabilities": { | |
"delete_post": false, | |
"edit_post": false, | |
"publish_post": false | |
}, | |
"categories": { | |
"Pronama-chan": { | |
"ID": 71, | |
"description": "", | |
"meta": { | |
"links": { | |
"help": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/categories/slug:pronama-chan/help", | |
"self": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/categories/slug:pronama-chan", | |
"site": "https://public-api.wordpress.com/rest/v1.1/sites/90668331" | |
} | |
}, | |
"name": "Pronama-chan", | |
"parent": 0, | |
"post_count": 421, | |
"slug": "pronama-chan" | |
}, | |
"Web Comic": { | |
"ID": 271, | |
"description": "", | |
"meta": { | |
"links": { | |
"help": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/categories/slug:web-comic/help", | |
"self": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/categories/slug:web-comic", | |
"site": "https://public-api.wordpress.com/rest/v1.1/sites/90668331" | |
} | |
}, | |
"name": "Web Comic", | |
"parent": 0, | |
"post_count": 49, | |
"slug": "web-comic" | |
} | |
}, | |
"content": "..省略..", | |
"date": "2015-12-06T22:35:35+09:00", | |
"discussion": { | |
"comment_count": 0, | |
"comment_status": "closed", | |
"comments_open": false, | |
"ping_status": "closed", | |
"pings_open": false | |
}, | |
"excerpt": "..省略..", | |
"featured_image": "http://i2.wp.com/pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb.png?resize=740%2C485", | |
"format": "standard", | |
"geo": false, | |
"global_ID": "68a5c7176eaa9935d5be443fc8877215", | |
"guid": "http://pronama.azurewebsites.net/?p=77563", | |
"i_like": false, | |
"is_following": false, | |
"is_reblogged": false, | |
"like_count": 0, | |
"likes_enabled": false, | |
"menu_order": 0, | |
"meta": { | |
"links": { | |
"help": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/posts/77563/help", | |
"likes": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/posts/77563/likes/", | |
"replies": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/posts/77563/replies/", | |
"self": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/posts/77563", | |
"site": "https://public-api.wordpress.com/rest/v1.1/sites/90668331" | |
} | |
}, | |
"metadata": [ | |
{ | |
"id": "352202", | |
"key": "_thumbnail_id", | |
"value": "77565" | |
}, | |
{ | |
"id": "352208", | |
"key": "_wpas_done_all", | |
"value": "1" | |
} | |
], | |
"modified": "2015-12-06T22:45:32+09:00", | |
"other_URLs": {}, | |
"page_template": "", | |
"parent": false, | |
"password": "", | |
"post_thumbnail": { | |
"ID": 77565, | |
"URL": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb.png", | |
"guid": "http://pronama.azurewebsites.net/wp-content/uploads/2015/12/151101thumb.png", | |
"height": 485, | |
"mime_type": "image/png", | |
"width": 740 | |
}, | |
"publicize_URLs": [], | |
"sharing_enabled": true, | |
"short_URL": "http://pronama.azurewebsites.net/?p=77563", | |
"site_ID": 90668331, | |
"slug": "web-comic-spaco-42", | |
"status": "publish", | |
"sticky": false, | |
"tags": { | |
"すぱこー": { | |
"ID": 2031, | |
"description": "", | |
"meta": { | |
"links": { | |
"help": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/tags/slug:spaco/help", | |
"self": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/tags/slug:spaco", | |
"site": "https://public-api.wordpress.com/rest/v1.1/sites/90668331" | |
} | |
}, | |
"name": "すぱこー", | |
"post_count": 42, | |
"slug": "spaco" | |
}, | |
"池村ヒロイチ": { | |
"ID": 2026, | |
"description": "", | |
"meta": { | |
"links": { | |
"help": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/tags/slug:ikemura-hiroichi/help", | |
"self": "https://public-api.wordpress.com/rest/v1.1/sites/90668331/tags/slug:ikemura-hiroichi", | |
"site": "https://public-api.wordpress.com/rest/v1.1/sites/90668331" | |
} | |
}, | |
"name": "池村ヒロイチ", | |
"post_count": 36, | |
"slug": "ikemura-hiroichi" | |
} | |
}, | |
"title": "[Web Comic] 情報処理研究会漫画 すぱこー Ver. 42", | |
"type": "post" | |
} | |
] | |
} |
投稿の情報を取得して何かするだけのサービスであれば、これらの情報で十分使えそうですね。実際、Web コミック「すぱこー」のコンテンツのみをまとめたフィードの作成は、上記 API のみ使っています。
その他の API
API でできることはまだまだたくさんあります。今回は取得のみでしたが、操作も可能です。また、API は次のカテゴリーに分類されています。今回 紹介したのは、Sites と Posts のひとつにすぎません。
- Users
- Sites
- Posts
- Comments
- Taxonomy
- Follow
- Sharing
- Freshly Pressed
- Notifications
- Insights
- Reader
- Stats
- Media
- Menus
- Batch
- Videos
詳しくは、REST API Resources を参照してください。