こんにちは。ちゃぼP(@chabo0429)です。
ここ数日、なんかシェア数が少ないな・・と思い、プラグイン「SNS Count Cache」の管理画面を開いてみました。
ナント、Facebookのシェアカウントが無効になっていました。
これはイカンばいと言うことで、色々と解決策を探っていたところ、直接コードをfunction.phpとかに書いて、直接Facebookのシェアカウントを取得してしまう方法はいくつか見つけることが出来ました。
Facebookのシェアカウント数は、ブラウザから、
http://graph.facebook.com?id=http://www.omoide-soko.jp/apps/wordpress
とリクエストすることで、簡単に取得できます。
ですが、このブログでは他にもTwitterやらPocketやらを「SNS Count Cache」でシェア数をカウントしているので、なんとか「SNS Count Cache」で取得できるようにしたいところ。そこで、なんとか「SNS Count Cache」を修正してカウントが復活するようにしてみました。
プラグイン「SNS Count Cache」の「class-share-facebook-strategy.php」を編集
まず、WordPress管理画面のプラグイン一覧の画面を開きます。
「SNS Count Cache」の「編集」ボタンから、プラグインの編集画面に入ります。
右側に、プラグインで使用するphpファイルが表示されるので、その中から「class-share-facebook-strategy.php」をクリックします。
まず、80行目付近にある「public function build_query_url()」の1行を以下のようにコメントアウトします。
編集前
public function build_query_url() { Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' ); $url = self::DEF_BASE_URL . '?' . http_build_query( $this->query_parameters , '' , '&' ); return $url; }
編集後
public function build_query_url() { Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' ); /* $url = self::DEF_BASE_URL . '?' . http_build_query( $this->query_parameters , '' , '&' ); */ return $url; }
「url」の表示がある部分をコメントアウトすればOKです。
次に、90行目付近の「public function extract_count( $content )」を以下のように書き換えます。
編集前
public function extract_count( $content ) { Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' ); $count = (int) -1; if ( isset( $content['data'] ) && empty( $content['error'] ) ) { $json = json_decode( $content['data'], true ); if ( isset( $json[0]['total_count'] ) && is_numeric( $json[0]['total_count'] ) ) { $count = (int) $json[0]['total_count']; } else { $count = (int) -1; } } else { $count = (int) -1; } return $count; }
編集後
public function extract_count( $content ) { Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' ); $count = (int) -1; $url = $this->query_parameters['urls']; $encoded_url = rawurlencode( $url ); $response = wp_remote_get( 'http://graph.facebook.com/?id='.$encoded_url ); $count = 0; if (!is_wp_error( $response ) && $response["response"]["code"] === 200) { $body = $response['body']; $json = json_decode( $body ); $count = ($json->{'share'}->{'share_count'} ? $json->{'share'}->{'share_count'} : 0); } return $count; }
これでOKです。
あとは、「SNS Count Cache」の管理画面に戻り、再度キャッシュして動作確認を行います。
順調にシェアカウントをキャッシュしてくれているみたいです。
原因は「https://api.facebook.com/method/links.getStats」が使えなくなったことによる
今回、シェアカウントが取得できなくなった原因は、カウント数取得用のAPI「https://api.facebook.com/method/links.getStats」が使えなくなったことのようです。
そこで、今回は回避策として公式のAPIである、「http://graph.facebook.com/」を使ってカウント数を取得することにしましたが、今後「SNS Count Cache」がアップデートされたら、この辺は仕様が変わるかもしれません。
それまでのツナギという形になると思いますが、「SNS Count Cache」を使っている方は参考にしてみてください!