プログラミング学習

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

プログラミング学習

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

sns count cacheの使い方

SSL化対応に伴い、httpのいいね数やはてぶ数をhttpsに引き継ぐ

SNS Count Cache > 設定 > HTTPからHTTPSへのスキーム移行モード

無効から有効に変えます。

url変更時にsns count cacheを引き継ぐ

このツイートは検証結果を補足すると、一度キャッシュさせた後にurlを変更しないといけないようです。

スポンサーリンク

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 - ドキュメンテーション - Meta for Developers
グラフAPIは、Facebookプラットフォームにデータを取り込んだり、Facebookプラットフォームからデータを取り出したりするための主要な手段です。
レート制限 - グラフAPI - ドキュメンテーション - Meta for Developers
広告インサイトAPI、Instagram API、ページAPI呼び出し、広告API向けプラットフォームのビジネスユースケースのレート制限、およびアプリレベルとユーザーレベルのレート制限について説明します。

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

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

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

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

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

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

スポンサーリンク

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

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

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

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

よくある質問 - ソーシャルプラグイン - ドキュメンテーション - Meta for Developers

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

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

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

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

本もありますよ!

wordpress開発マスター講座他PHPの学習おすすめ本・動画(Udemy)
WordpressのブロックエディタやPHPの開発を行う場合、おすすめの書籍(Kindle Unlimitedを含む)や動画をまとめていきます。【本のおすすめ】WordPress/ブロックエディタ/グーテンベルク/PHP【Udemy)】Wo

コメント

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