【解決済】sns count cacheで facebookがカウントされないn/a問題(ssl化の引き継ぎ)

プログラミング

サイトのssl化に伴い、 facebookのいいねがゼロになりました。sns count cacheを利用する方法、他にも正攻法で「いいね!」数を引き継ぐ方法があります。覚書もかねています。

sns count cacheで facebookアプリの作成

facebookアプリをつくる手順は以下のとおりです。作るっていうほど難しいものでもないですけど。facebook developersのフローも若干変わっているらしく、2019年の1月に最後に作りました。

複数サイトでsns count cacheに対応する場合は、アプリを複数作ればokです。

  1. https://developers.facebook.com/にアクセス
  2. 新しいアプリを追加
  3. 表示名は適当にいれます。(例)sns_count_サイト名
  4. メールアドレスをいれます。
  5. 「アプリIDを作成してください」を押す。
  6. 「私はロボットではありません」にチェックして送信
  7. 設定 > ベーシック ここに「アプリID」と「app secret」があります。
  8. 「app secret」はfacebookにログインするパスワードをいれないと伏せ字になっています。表示しましょう。
  9. 最後にsns count cache側の設定です。sns count cache > 設定 > 「アプリID」と「app secret」を入力
スポンサーリンク

電子書籍のおすすめ比較

sns count cacheで facebookがカウントされないn/a問題

app idまで入力するところまでできている前提で話を進めます。

class-scc-share-facebook-strategy.phpのカスタマイズ

includes/class-scc-share-facebook-strategy.phpをカスタマイズします。

ctrl+f(Macはcommand+f)で探すコードは次のとおりです。

$url = self::DEF_BASE_URL . '?' . http_build_query( $this->query_parameters , '' , '&' );

以下のように書き換えます。

$url = self::DEF_BASE_URL . '?id='. rawurlencode($this->query_parameters['id']) . '&fields=og_object{engagement},engagement&access_token=' . $this->query_parameters['access_token'];

もうひとつ書き換えます。

if ( isset( $content['data'] ) && empty( $content['error'] ) ) {
	$json = json_decode( $content['data'], true );

	if ( isset( $json['share']['share_count'] ) && is_numeric( $json['share']['share_count'] ) ) {
		$count = (int) $json['share']['share_count'];
	} elseif ( isset( $json['id'] ) && ! isset( $json['share']['share_count'] ) ) {
		$count = (int) 0;
	} else {
		$count = (int) -1;
	}

} else {
	$count = (int) -1;
}

以下のように書き換えます。

if ( isset( $content['data'] ) && empty( $content['error'] ) ) {
	$json = json_decode( $content['data'], true );

	if ( isset( $json['og_object']['engagement']['count'] ) && is_numeric( $json['og_object']['engagement']['count'] ) ) { 
		$count = (int) $json['og_object']['engagement']['count'];
	} elseif ( isset( $json['id'] ) && ! isset( $json['og_object']['engagement']['count'] ) ) { 
		$count = (int) 0;
	} else {
		$count = (int) -1;
	}
} else {
	$count = (int) -1;
}

昔は下記のコードを使ってうまくいっていましたが、PHPのバージョンを変更したせいかうまくいかなくなりました。warningエラーが発生するようになりました。PHPのバージョンはPHP7.2.6です。結構、余談ですけど、レンタルサーバーはエックスサーバー、テーマはsimplicityです。

if ( isset( $content['data'] ) && empty( $content['error'] ) ) {
  $json = json_decode( $content['data'], true );
 
  $reaction = (int) $json[‘engagement’][‘reaction_count’];
  $comment_count = (int) $json[‘engagement’][‘comment_count’];
  $share_count = (int) $json[‘engagement’][‘share_count’];
 
  $count = $reaction + $comment_count + $share_count;
} else {
  $count = (int) -1;
}

sns-count-cache.phpのカスタマイズ

sns-count-cache.phpの下記の行をコメントアウトします。検証したところ、コメントアウトしないとシェア数が取れませんでした。

// Pocket and Google+, Linkedin are excluded from migration target because they are migrated automatically.
$this->scheme_migration_exclude_keys = array(
	//self::REF_SHARE_POCKET,
	//self::REF_SHARE_GPLUS,
	//self::REF_SHARE_LINKEDIN,
	//self::REF_FOLLOW_TWITTER,
	//self::REF_FOLLOW_FACEBOOK,
	//self::REF_FOLLOW_PUSH7,
	//self::REF_FOLLOW_INSTAGRAM
);
スポンサーリンク

sns count cacheで facebookがキャッシュされない問題

キャッシュするためには時間がかかりますので、1ページだけ手動でテストするのが早いです。

  1. SNS Count Cache > 設定 > キャッシュ消去
  2. SNS Count Cache > キャッシュ状況 > 個別ページ一覧が表示されるため「キャッシュ」のボタンを押す(もちろん、いいねがある記事でテストします。)

(追記)facebookいいねが再びゼロに!facebookアプリのレート制限にも注意

実はいいねが回復したのち、facebookのいいねが再びゼロになる症状に悩まされていました^^;

手動キャッシュは正しくfacebookいいねを取得しているのに、全ページを行うとゼロになってしまうのです。どこかでコケているなと。

結論からいうと、facebook devloperにログインすると、レート制限にひっかかっていることが判明しました。

自分が作ったアプリの次の場所をみます。

ダッシュボード > アプリレベルでのレート制限の履歴

レート制限にひっかかっている場合、警告メールが届いています。

アラート > 受信箱

「アプリ名」が時間レート制限100%に達しました。 アプリに対するAPIコールは、アプリがスロットリング制限を下回るまですべて失敗します。(中略)3日後にアプリにまだレート制限がかかっている場合は、またアラートが送信されます。

詳しくはこちらです。

グラフAPIの利用 - ドキュメンテーション - 開発者向けFacebook
グラフAPIで実行できるさまざまな操作についての詳細
レート制限 - グラフAPI - ドキュメンテーション - 開発者向けFacebook
アプリに適用されるレート制限について学ぶ広告インサイトAPI、Instagram API、およびページAPIの呼び出しのビジネス使用事例でのレート制限、また、広告APIならびにアプリレベルとユーザーレベルに関するプラットフォームレート制限が含まれます。

たしかにSNS Count Cacheの初期設定だと、制限にひっかかりそう。以前、さくらインターネットというサーバーで、このプラグインによる負荷トラブルもあったので。。

仮で10分に20回から10分に2回にしました。10倍時間がかかりますが、この負荷なら大丈夫でしょう。どうしても早めにいいねを戻したいページは、個別で手動キャッシュをしてしまいましょう。

スポンサーリンク

カスタマイズがよく理解できない人は!?

カスタマイズがうまくいかない人は長い目でみるとプログラミングの学習が必要かもしれません。コードを読むことができなければ永久に悩み続けることになってしまうでしょう。

無料体験や数千円の動画教材もあるため、まずはそこからはじめるとよいでしょう。

プログラミングスクールオンライン比較/おすすめで安い(無料)のプログラム教室!
エンジニア・プログラマーになりたい人のために、オンライン版のプログラミングスクール比較していきます。初心者大人向けにおすすめで安いプログラム教室も紹介しますよ。 個人的にはブログを運営しているためwordpressのphpやcssもカ...

少し勉強するだけでブログ運営はだいぶ楽になりますよ。

sns count cacheは更新されていないから、正攻法でfacebookいいねを引き継ぎする方法

sns count cacheは1年以上更新されていないため、今回正攻法でいくかsns count cacheをごまかしながら使い続けるかちょっと悩みましたが、個人的にはsns count cacheはいろいろな意味で便利なため、ごまかしながら使い続けることにしました^^;

なので、以下の方法は試していませんけど、ざっくりと調べたため情報提供だけしておきます。

ssl化に伴い、facebook developersの公式サイトもアナウンスしています。

よくある質問 - ソーシャルプラグイン - ドキュメンテーション - 開発者向けFacebook

もう少し平易だといいのですけど。。

何を言っているのか意味不明な人のために、簡単に噛み砕いた記事がいくつかありましたので、紹介しておきます。

1文字消すだけ!SSL化後、Facebookのいいねを引き継ぐ(合算する)方法
SSL化(httpからhttpsにする)後、SNSのカウントを新旧URLで合算したいと思う人は多いと思う。でもそれを実現するには、今のところ、WordPressのプラグイン「SNS Count Cache」を使って、キャッシュを活用して合算

ここまでみても難しい人はプログラミングの学習をするなど基本的なITスキルを磨く必要があるかもしれません。

プログラミングスクールオンライン比較/おすすめで安い(無料)のプログラム教室!
エンジニア・プログラマーになりたい人のために、オンライン版のプログラミングスクール比較していきます。初心者大人向けにおすすめで安いプログラム教室も紹介しますよ。 個人的にはブログを運営しているためwordpressのphpやcssもカ...

本もありますよ!

WordpressのPHP書籍・動画・Kindle Unlimitedの本でおすすめは?
PHPをWordpressで使う場合、おすすめの書籍(Kindle Unlimitedを含む)や動画をまとめていきます。 初心者向けのPHPの書籍でおすすめ wordpressであってもphpの基本は変わりません。phpの書籍は...
人気記事  【無料あり】おすすめで安いオンラインプログラミングスクール比較
  1. プログラミングスクールは格安に!cssやphpも楽勝に!
  2. 電子書籍並みの価格で買える格安のプログラム動画学習サイトも一緒に紹介!初心者から上級者向け英語コンテンツまであり。ソースコードは言語関係なしに世界共通!
スポンサーリンク
プログラミング
neruをフォローする
スポンサーリンク
ebookbrain

コメント

タイトルとURLをコピーしました