WordPressでPocketの保存数を取得する方法

最近、Pocketの保存数を取得するAPI(以下、Pocket API)ができたようです。

以下のページで知りました。

Pocketのカウント(保存数)を取得する方法を紹介します。公式の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形式で返ってきます。

Pocketの保存す取得APIの返り値

{"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保存数を出力

まとめ

Pocket保存数取得APIが利用出来ることになったことで、簡単に保存数を取得できるようになりました。

ただ、今回の方法だと、ページを表示すると毎回「保存数」の取得クエリをPocketに投げることになり、先方のサーバーに負荷をかけてしまいます。

ですので実際に利用するには、「取得したPocket保存数」を一旦キャッシュするようにした方が良いかと思います。

そして次回「保存数」が必要な際は、一定期間キャッシュから呼び出すようにして、APIの負荷を軽減する処理を追加した方が良いでしょう。

ただ、キャッシュ処理に関しては「Pocket保存数の取得」という範疇から外れますし、書き込むと多少処理が複雑になるので、今回は触れません。

実装する場合は、それぞれで処理を追加してください。

最も簡単な方法としては、WordPressのget_transientset_transient関数を用いると比較的容易に実装できるかと思います。