サイトのssl化に伴い、 facebookのいいねがゼロになりました。sns count cacheを利用する方法、他にも正攻法で「いいね!」数を引き継ぐ方法があります。覚書もかねています。
Contents
sns count cacheの使い方
SSL化対応に伴い、httpのいいね数やはてぶ数をhttpsに引き継ぐ
SNS Count Cache > 設定 > HTTPからHTTPSへのスキーム移行モード
無効から有効に変えます。
url変更時にsns count cacheを引き継ぐ
WordPressはパーマリンクを /%category%/%postname%/ から %postname%に変えても自動リダイレクトするのか。
— 個人開発作家 まったりんneru (@neruplan) November 15, 2021
(もうずっと%postname%しか使っていないけど)
プラグイン等は必要ない。
ちなみにカテゴリを省いてもsns count cacheのssl前のシェア数も引き継ぎできるようです。#ワードプレス #自営
このツイートは検証結果を補足すると、一度キャッシュさせた後にurlを変更しないといけないようです。
sns count cacheで facebookアプリの作成
facebookアプリをつくる手順は以下のとおりです。作るっていうほど難しいものでもないですけど。facebook developersのフローも若干変わっているらしく、2019年の1月に最後に作りました。
複数サイトでsns count cacheに対応する場合は、アプリを複数作ればokです。
- https://developers.facebook.com/にアクセス
- 新しいアプリを追加
- 表示名は適当にいれます。(例)sns_count_サイト名
- メールアドレスをいれます。
- 「アプリIDを作成してください」を押す。
- 「私はロボットではありません」にチェックして送信
- 設定 > ベーシック ここに「アプリID」と「app secret」があります。
- 「app secret」はfacebookにログインするパスワードをいれないと伏せ字になっています。表示しましょう。
- 最後にsns count cache側の設定です。sns count cache > 設定 > 「アプリID」と「app secret」を入力
sns count cacheで facebookがカウントされないn/a問題
app idまで入力するところまでできている前提で話を進めます。
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ページだけ手動でテストするのが早いです。
- SNS Count Cache > 設定 > キャッシュ消去
- SNS Count Cache > キャッシュ状況 > 個別ページ一覧が表示されるため「キャッシュ」のボタンを押す(もちろん、いいねがある記事でテストします。)
facebookいいねが再びゼロに!facebookアプリのレート制限にも注意
実はいいねが回復したのち、facebookのいいねが再びゼロになる症状に悩まされていました^^;
手動キャッシュは正しくfacebookいいねを取得しているのに、全ページを行うとゼロになってしまうのです。どこかでコケているなと。
結論からいうと、facebook devloperにログインすると、レート制限にひっかかっていることが判明しました。
自分が作ったアプリの次の場所をみます。
ダッシュボード > アプリレベルでのレート制限の履歴
レート制限にひっかかっている場合、警告メールが届いています。
アラート > 受信箱
詳しくはこちらです。
https://developers.facebook.com/docs/graph-api/using-graph-api/#errors
https://developers.facebook.com/docs/graph-api/advanced/rate-limiting/
たしかに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の公式サイトもアナウンスしています。
https://developers.facebook.com/docs/plugins/faqs#faq_1149655968420144
もう少し平易だといいのですけど。。
何を言っているのか意味不明な人のために、簡単に噛み砕いた記事がいくつかありましたので、紹介しておきます。
https://singoro.net/note/facebook-count-total/
ここまでみても難しい人はプログラミングの学習をするなど基本的なITスキルを磨く必要があるかもしれません。
本もありますよ!
コメント