「SNS Count Cache」のFacebookカウント数取得できない問題を暫定的に解決した
FacebookのAPI仕様変更により、先日からFacebookのカウント数が取得できなくなったWordPressプラグイン「SNS Count Cache」。そのうち作者側で解決後、アプデされるだろうと思っていたのですが、特に動きもないまま。。
仕方ないので、プラグインファイルの一部を書き換え、Facebookのカウント数取得が問題なくされるよう解決しました。
取得できない原因はAccessTokenがないこと
以前までの「SNS Count Cache」は、Facebookのカウント数を取得するため、いわゆる野良的なAPIエンドポイントを使って無制限にコールできるようになっていました。
それが、先日の仕様変更により使えなくなり、Facebook公式のAPIエンドポイントへと差し替わったわけですが、実はこの公式エンドポイントって一定時間ごとにコール数を制限しているんですね。
で、それを回避するために必要なのがアクセストークンという認証キーのコードというわけ。認証済みのアプリがあり、そのアプリからのリクエストであることを示すためのコードなんですが、これを使うことで600秒に600回までコールが可能になります。
SNS Count Cacheは現行バージョンの仕様上、このアクセストークンを設定できないため、コール数の制限に引っかかって取得できなくなっているんです。
SNS Count Cacheを一部書き換えて対応する
そうした問題を回避するにはどうしたらいいか?
その答えは単純明快。SNS Count Cacheがアクセストークン付きでリクエストできるようにしてやればいいだけですね。
ということで、SNS Count Cacheを構成するファイルの一部を書き換えました。この方法はあくまでも自己責任だということをお忘れなく。
改変を行うのは、SNS Count Cacheディレクトリのinclude直下にあるclass-share-facebook-strategy.php
というファイルになります。まずはこのファイルの35行目を以下のようにします。
アクセストークンは、Facebook Developerで作成したアプリのAppIDとAppSecretを|
を挟んで記述すればOK。
本来であればアクセストークンを別途取得するべきなのですが、取得したアクセストークンは有効期限が設定されるため、期限を迎えるたびに書き換える必要がでてしまいます。この方法だとAppSecretを変更しない限りは無期限で継続利用できるので、書き換えの必要がありません。
続いて同じファイルの79行目を、以下のようにしてください。
self::DEF_BASE_URL
のすぐあとの?
を&
にするだけですね。
これで元のファイルを上書きすればOK。
あとは勝手にクロールされるのを待つか、WordPress管理画面からSNS Count Cacheのキャッシュ状況へ進み、手動で再キャッシュさせれば、Facebookのカウント数が取得されるはずです。
そのうち、プラグイン側でアクセストークンを設定上保持できるようにしたバージョンがリリースされると思うので、あくまでも今回のは暫定的な対応です。
プラグインがバージョンアップされると、今回書き換えた部分はすべて新しいプラグインファイルで上書きされるので、仮に次のバージョンアップでアクセストークン周りが実装されていなかった場合は、また取得できなくなることは覚えておきましょう。
また、アクセストークン周りが実装されたとしても、同様にカウントは取得できなくなります。その場合は実装された機能を使って、再度アクセストークンを設定し直す必要があることも覚えておいてください。