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など)を使用するというのもありかもしれません。