Cosnomi

プログラミングをする医学生。物を作ること、自動化すること、今まで知らなかったことを知ることが好き。TypeScript書いたり、Pythonで機械学習したりなど。

Twitter / GitHub / Keybase
TOP >

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)などへお願いします。
記事一覧へ