SNS Count CacheでFacebookシェアがカウントされなくなった時の対処方

※この記事は、SNS Count Cache Ver0.9.1までのバージョン向けです。現在は0.9.2がリリースされています。また、リクエスト数制限に対策されたVer0.9.3 betaも作者様のサイトで公開中です。詳細は以下をごらんください。

SNS Count Cache v0.9.2でFacebookシェアカウント取得ができないのでbeta版をテスト中!

こんにちは。ちゃぼP(@chabo0429)です。

ここ数日、なんかシェア数が少ないな・・と思い、プラグイン「SNS Count Cache」の管理画面を開いてみました。

SNS_Count_Cache01

ナント、Facebookのシェアカウントが無効になっていました。

これはイカンばいと言うことで、色々と解決策を探っていたところ、直接コードをfunction.phpとかに書いて、直接Facebookのシェアカウントを取得してしまう方法はいくつか見つけることが出来ました。

Facebookのシェアカウント数は、ブラウザから、

http://graph.facebook.com?id=http://www.omoide-soko.jp/apps/wordpress

とリクエストすることで、簡単に取得できます。

SNS_Count_Cache04

ですが、このブログでは他にもTwitterやらPocketやらを「SNS Count Cache」でシェア数をカウントしているので、なんとか「SNS Count Cache」で取得できるようにしたいところ。そこで、なんとか「SNS Count Cache」を修正してカウントが復活するようにしてみました。

プラグイン「SNS Count Cache」の「class-share-facebook-strategy.php」を編集

まず、WordPress管理画面のプラグイン一覧の画面を開きます。

SNS_Count_Cache02

「SNS Count Cache」の「編集」ボタンから、プラグインの編集画面に入ります。

 

SNS_Count_Cache05

右側に、プラグインで使用する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」の管理画面に戻り、再度キャッシュして動作確認を行います。

SNS_Count_Cache03

順調にシェアカウントをキャッシュしてくれているみたいです。

原因は「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」を使っている方は参考にしてみてください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です