WordPressにはREST API1が用意されており、外からAPIを叩いて記事の内容などを利用しやすい形で取得することができます。
ただ単にそれだけと思われるかもしれませんが、使い道は色々あって、例えばWebサイトの特定のページのみをWordpressで更新できるようにしたいときは、WebサイトからWP REST APIを叩いて、記事のタイトルや内容を取得するといったことができます。
何をしたいのか
今回は、Pythonで、Wordpress APIを叩いてお知らせ記事(特定のカテゴリに属する)を取得しそのタイトルとリンクをWeb(Flask)で表示するということをしてみたいと思います。具体的には下の画像みたいな感じを目標とします。
実際に動かすとこんな感じです。旧サポートページ(https://old.support.cosnomi.com/)。
エンドポイントの確認
詳細な仕様については公式のページを見たほうが速いと思いますので紹介しておきます。
https://developer.wordpress.org/rest-api/reference/
さて、ここからは今回の話に関係するエンドポイントのみに絞って話を進めていきたいと思います。
あなたのブログがblog.cosnomi.comというURLだとすると、記事を取得するためのAPIエンドポイントは
http://blog.cosnomi.com/wp-json/wp/v2/posts
となります。ということで、こちらにアクセスしてみてください。https://blog.cosnomi.com/wp-json/wp/v2/posts 。jsonが出力されたはずです。特に制限を加えていないので、全post(といっても最新10記事だけっぽいですね)のデータが表示されています。
今回は「お知らせ」カテゴリに属する記事のみを取得するということですので、特定のカテゴリのみを取り出す場合は、
http://blog.cosnomi.com/wp-json/wp/v2/posts?categories=【カテゴリID】
となります。
では、次にカテゴリIDはどのようにして取得するのか説明します。
カテゴリIDの取得
WordPressの管理画面のカテゴリメニューを選択してください。
対象となるカテゴリをクリックします
URLのtag_IDがカテゴリIDです。
今回の場合は56となります。
ということで、今回の場合は
http://blog.cosnomi.com/wp-json/wp/v2/posts?categories=56
からデータを取得して表示することになります
PythonからAPIを叩く
エンドポイントはわかったので、あとはPythonからAPIを叩く方法を説明します。
1 |
import requests |
をしてから
1 |
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:としてやれば中では下のようにデータを取得できます
タイトル | res[‘title’][‘rendered’] |
記事へのリンク | res[‘link’] |
本文 | res[‘content’][‘rendered’] |
あとは、これをFlaskだったらtemplateに渡してrenderしてやれば最初の画像の表のように取得したデータを表示できます。
まとめ
- WordPress REST APIを使えば、プログラムからブログ記事を簡単に取得できる!
- やっぱりPythonはシンプルで良い