Cosnomi
Cosnomi

医療×IT / 医学生 / Web(React, Flask) / 機械学習(画像認識, Keras)

Twitter / GitHub / Keybase

WP REST APIでブログからお知らせを取得してみる【Wordpress】【Python】

WordpressにはREST APIが用意されており、外から API を叩いて記事の内容などを利用しやすい形で取得することができます。

シンプルなのですが、使い道は色々あって、例えば Web サイトの特定のページのみを Wordpress で更新できるようにしたいときはWeb サイトから WP REST API を叩いて、記事のタイトルや内容を取得して表示するというユースケースがあります。

追記

この記事は、Wordpressでブログを運用していた時代に書いたもので、2019/06現在このブログはGatsbyで運用しているため、このブログに対してWordpress APIを呼び出しても応答は得られません。

何をするか

今回は、Pythonを使用して、Wordpress API を叩いてお知らせ記事(特定のカテゴリに属する)のタイトルとリンクを取得してみたいと思います。具体的には下のようにWordPressから記事タイトル・更新日時・記事URLを取得することを目標とします。

APIエンドポイントの確認

詳細な仕様については公式のページを見たほうが速いと思いますので紹介しておきます。

https://developer.wordpress.org/rest-api/reference/

あなたのブログが blog.cosnomi.com という URL だとすると、記事を取得するための API エンドポイントはhttp://blog.cosnomi.com/wp-json/wp/v2/postsとなります。

今回は「お知らせ」カテゴリに属する記事のみを取得するということですので、特定のカテゴリのみを取り出す場合は、http://blog.cosnomi.com/wp-json/wp/v2/posts**?categories=【カテゴリID】となります。

では、次にカテゴリ IDはどのようにして取得するのか説明します。

カテゴリ ID の取得

管理画面カテゴリメニューを選択してください。

対象となるカテゴリをクリックします

URL の tag_ID がカテゴリ ID です。

今回の場合は 56 となります。

ということで、今回の場合はhttp://blog.cosnomi.com/wp-json/wp/v2/posts?categories=56からデータを取得して表示することになります

Python から API を叩く

Python から RESTful API を叩く(REST に限ったことではないですが)には、requestsが便利です。import requestsをした後、response = requests.get("https://blog.cosnomi.com/wp-json/wp/v2/posts?categories=56").json()でレスポンスを取得します。response は Python の dict 型または list になります。どのようにデータを取り出すかは、実際に叩いて json の中身を見れば分かるのですが、今回の場合は各記事のデータを表す dict の listになっていますね。

そこで、for res in response:としてやれば中では下のようにデータを取得できます。rendered は忘れやすいので要注意です。


タイトル: res['title']['rendered']

記事へのリンク: res['link']

本文: res['content']['rendered']

まとめ

WP REST APIを使えばこのように記事に関する様々な情報を取得できます。scrapingよりも安全かつ効率的にデータを取得できるので、活用の幅が広がりそうです。例えば、バックエンドにWordpressを使用してフロントエンドはモダンなJSフレームワーク(React, Vueなど)を使用するというのもありかもしれません。


コメントフォームは設置していませんので、ご意見・ご感想などはTwitter(@cosnomi)などへお願いします。