最近、Pocketの保存数を取得するAPI(以下、Pocket API)ができたようです。
以下のページで知りました。
Pocket APIを利用することで、URL毎の保存数の取得が容易になりました。
なので、WordPressでも(以前と比較して)手軽に取得できるようになりました。
ということで以下では、「WordPressでPocket API経由で保存数を取得する方法」を紹介します。
目次
Pocket APIの仕様
以下がPocket APIのURLクエリにより、保存数を取得する形式になります。
https://widgets.getpocket.com/api/saves?url=URL
例えば、当サイトのトップページのURLを投げると、
≫ https://widgets.getpocket.com/api/saves?url=https://nelog.jp/
以下のようにJSON形式で返ってきます。
{"saves":168}
ちなみに、urlencodeを用いて「エンコードしたURL」を用いてPocket保存数を取得しても同様の値を取得することができました。
≫ https://widgets.getpocket.com/api/saves?url=https%3a%2f%2fnelog%2ejp%2f
おそらく、どちらの方法でも問題ないかと思います。
WordPressでPocket保存数を取得する方法
WordPressで保存数を取得する際に、手軽に利用出来るように関数化してみました。
functions.phpに関数を貼り付ける
まず、テーマ(子テーマ)のfunctions.phpに以下のコードを貼り付けます。
//Pocket保存数の取得 if ( !function_exists( 'fetch_pocket_count' ) ): function fetch_pocket_count($url){ $res = 0; $url = urlencode($url); $query = 'https://widgets.getpocket.com/api/saves?url='.$url; $args = array( 'sslverify' => true ); //URL(クエリ)先の情報を取得 $result = wp_remote_get($query, $args); //エラーチェック if (!is_wp_error($result)) { $body = isset($result["body"]) ? $result["body"] : null; if ($body) { $json = json_decode($body); //ジェイソンオブジェクトに変換する //savesの値を取得 $res = isset($json->{'saves'}) ? $json->{'saves'} : 0; } } return intval($res); } endif;
URLエンコード方式で書いています。
投稿・固定ページのテンプレートで出力する
あとは、投稿・固定ページの「保存数」を表示させたい箇所のテンプレートに、以下のコードを書き込みます。
<?php //投稿・固定ページのPocket保存数を出力 echo fetch_pocket_count(get_permalink()) ?>
動作確認
テンプレート出力コードを挿入し投稿画面を確認してみると、以下のように保存数を出力させることができました。
まとめ
Pocket保存数取得APIが利用出来ることになったことで、簡単に保存数を取得できるようになりました。
ただ、今回の方法だと、ページを表示すると毎回「保存数」の取得クエリをPocketに投げることになり、先方のサーバーに負荷をかけてしまいます。
ですので実際に利用するには、「取得したPocket保存数」を一旦キャッシュするようにした方が良いかと思います。
そして次回「保存数」が必要な際は、一定期間キャッシュから呼び出すようにして、APIの負荷を軽減する処理を追加した方が良いでしょう。
ただ、キャッシュ処理に関しては「Pocket保存数の取得」という範疇から外れますし、書き込むと多少処理が複雑になるので、今回は触れません。
実装する場合は、それぞれで処理を追加してください。
最も簡単な方法としては、WordPressのget_transientやset_transient関数を用いると比較的容易に実装できるかと思います。