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

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

当ブログでも導入しているWordPress用プラグイン「SNS Count Cache」ですが、先日Facebookシェアカウント用APIエンドポイントが廃止になった影響で、カウント数が取得できなくなりました。

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

そこで、自分なりに公式のAPIからシェア数を取得できるようにプラグインファイルを改造したので、記事にしておりました。

その後数時間後に修正版のv0.9.2がリリース。作者のまるぼんさんにも同様の問い合わせが入っていたようで、修正されたようですね。

私も公開された公式のアップデートを導入して、「メデタシメデタシ」という感じだったのですが、しばらくすると、再びカウント取得が行えない状態に・・・

SNS_Count_Cache01

実は、これには原因がちゃんとありました。

公式APIエンドポイントは一定時間内に何度も問合せを行うと、しばらくは取得ができない仕様

実は、今まで「SNS Count Cache」は非公式のAPIエンドポイントを使っていたため、あまり意識をすることはなかったのですが、今回から採用となったFacebook公式APIエンドポイントに関して、一定時間における制限回数が設けられているようです。

8月23日現在、「SNS Count Cache」の作者のまるぼんさんのサイトで、この制限に対策された「v0.9.3」がBeta版として公開されています。

[試] WordPressプラグイン SNS Count Cache(Ver. 0.9.3 beta)の臨時公開

公式APIで一定時間内の問合せ回数に制限がある以上、その制限内での運用を行うしかないわけですが、まるぼんさんのサイトによりますと、コレを回避するために今回公開されたBeta版では以下の対策が施されているようです。

  • カウント取得失敗時のリトライ処理の削減
  • 動的キャッシュ機能(ユーザのアクセスをトリガとした動的キャッシュ)のデフォルト無効化
  • 臨時キャッシュ機能のシェア数のチェック間隔の変更(300秒→600秒)

また、運用に於けるリスク軽減策として、以下の方法も推奨されています。

  • [設定]→[シェア基本キャッシュ機能]→[シェア数のチェック間隔(秒)]の値を増やす(チェック間隔をひろげる)
  • [設定]→[シェア基本キャッシュ機能]→[一度にチェックするコンテンツ数]の値を減らす
  • HTTPからHTTPSへのスキーム移行モードを有効にしている場合は、[設定]→[シェア基本キャッシュ機能]→[HTTPからHTTPSへのスキーム移行日]を設定する

ということで、早速Beta版をインストールしてみることにしました。

「V0.9.3 Beta」はWordPress公式からはまだダウンロード出来ないので注意!

V0.9.3 Betaは現在のところ、まだテスト運用中とのことなので、WordPress公式サイトからはダウンロードできません。ダウンロードする際は、まるぼんさんのサイトからzipファイルをダウンロードし、解凍した上でFTPツールを使って「SNS Count Cache」フォルダ以下をすべて上書きします。

上書き後に、「インストール済みプラグイン」の画面で、

SNS_Count_Cache05

のように、「バージョン0.9.3 beta」と表示されていれば正常に完了しています。

念のため、チェック間隔を1800秒に変更しておく

今回新たに実装された、「動的キャッシュを無効化」する機能や、エラー発生時のリトライを抑制する機能がデフォルトで効いているので、インストールするだけである程度制限に達するリスクは回避されているのだと思いますが、サイトで推奨されている通り、念のためチェック間隔を広げておきます。

SNS_Count_Cache04

「設定」ページの「シェア基本キャッシュ機能」のチェック間隔は、デフォルトだと600秒(10分)ですが、1800秒(30分)に変更しておきました。

最初の取得が一巡するまではちょっと時間がかかるとは思いますが、一回これで様子を見たいと思います。

今のところ、少しずつシェア数をカウント中!

キャッシュする間隔が30分ですので、ちょっと時間がかかりますが、今のところ少しずつ順調に取得が再開されています。

SNS_Count_Cache02

コレでうまくいくといいですね!

「SNS Count Cache」は、簡単にシェア数を関数で呼び出せるので非常に重宝しているんですよね。単一ページなどにカウント数の表示したい場合にとても便利です。

今後も末永く使っていきたいプラグインです。作者のまるぼんさんに感謝デス!

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