Twitter・Facebook・はてなブックマークのシェア数を取得する

Twitter・Facebook・はてなブックマークのカウント数をWordPressでプラグインに頼らずPHPで取得するコードです。自作のシェアボタンを作ってみたけどなかなか押して貰えないときにどうぞ。

Twitter・Facebook・はてなブックマークのシェア数を取得する

WordPressでSNSボタンのシェアされた数字が出るやつ作るメモ。

ソーシャルシェア数の自作カウンター

記事下のソーシャルシェアカウンタ、おち研では公式ウィジェットを使わずPHPで各SNSのAPIに問い合わせて直接取得しています。

最初の頃はお借りしてたコードで表示してたんですけど、こまごま手直しした結果それなりに違うものになったのでシェア。

ソーシャルシェア数をPHPで取得・表示する

まずはコードから。テーマファイルを編集するのでバックアップしてから作業します。実行する対象が投稿ページだけなら single.php に書き込んでも構いません。

シェア数のカウント

【function.php】
// SNSカウント数
function getSocialCount($url) {
  $socials = array();
  $socials['htn'] = getHtn($url);
  $socials['twit'] = getTwit($url);
  $socials['face'] = getFace($url);
  return $socials;
}
 
// Twitterカウント数取得
function getTwit($url) {
  $twitCount = wp_remote_get('http://urls.api.twitter.com/1/urls/count.json?url=' . rawurlencode($url));
  if ( $twitCount['response']['code'] == 200 ) {
  return json_decode($twitCount['body']) -> count;
  } else {
  return '-';
  }
}
 
// Facebookカウント数取得
function getFace($url) {
  $shareCount = wp_remote_get('http://graph.facebook.com/' . rawurlencode($url));
  if ( isset( $shareCount ) && !is_wp_error( $shareCount ) ) {
  return json_decode($shareCount['body']) -> shares -0;
  } else {
  return '-';
  }
}
 
// はてなブックマークカウント数取得
function getHtn($url) {
  $htnCount = wp_remote_get('http://api.b.st-hatena.com/entry.count?url=' .rawurlencode($url))
  if ( $htnCount['response']['code'] == 200 ) {
  return $htnCount['body'] -0;
  } else {
  return '-';
  }
}

カウンタ表示部

実際のカウンタを呼び出す部分です。SNSの名前が入った変数部分がカウンタに当たるので、HTMLとCSSで好みの見た目に整えます。

【single.php】
<!-- 現在のURL取得 -->
<?php $socials = getSocialCount(get_permalink()); ?>
 
Twitter <?php echo ($socials['twit']) ?> tweets <!-- Twitter用カウント数 -->
Facebook <?php echo ($socials['face']) ?> shares tweets <!-- Facebook用カウント数 -->
Hatena B! <?php echo ($socials['htn']) ?> users tweets <!-- はてブ用カウント数 -->

以下説明。

Twitterのtweet数を取得する

APIで示されるリクエスト用URLがに必要な情報を渡します。リツイートもカウントされますが、鍵垢さんが混ざると数が狂うようです。

http://urls.api.twitter.com/1/urls/count.json?url={目的のURL}

【function.php】
function getTwit($url) {
  $twitCount = wp_remote_get('http://urls.api.twitter.com/1/urls/count.json?url=' . rawurlencode($url));
  if ( $twitCount['response']['code'] == 200 ) {
  return json_decode($twitCount['body']) -> count;
  } else {
  return '-';
  }
}

単純なことを言えばAPI に URL を送ればプレーンな数字がそのまま返ってきます。ただ、Twitterのサーバエラーが起きたときにこっちの処理が止まっちゃう可能性があるので wp_remote_get を挟んでみました。こっちからリクエストして相手からOKが返ってきたら表示、そうでなければ何もしません。

Facebookのシェア数を取得する

まずリクエスト用URLから。

http://graph.facebook.com/{目的のURL}

Facebook は「いいね」と「シェア」で共有度に強弱がつけられるのですが、公式ウィジェットの動作と見比べるとAPIから引くシェア数は両方合算された値に見えます。

なんか大ざっぱな仕様という気もしますが、公式でも「シェア」は将来廃止すると言ってるので(その割に一向に消える気配がありませんが)動作にぶれがあるのは仕方がないのかも。

【 追記: 2014/08/27 】

Facebookだけ異様に処理落ちするので真偽判定を少し変えてみました。少し様子を見ながら運用してみます。

【function.php】
function getFace($url) {
  $shareCount = wp_remote_get('http://graph.facebook.com/' . rawurlencode($url));
  if ( isset( $shareCount ) && !is_wp_error( $shareCount ) ) {
  return json_decode($shareCount['body']) -> shares -0;
  } else {
  return '-';
  }
}

いずれにせよ値がJSON形式で返ってくるので shares だけ抜き出します。

ところでFacebook公式のシェアボタンって そのままサイトに貼るとベースラインが少しずれますよね。絶対指定で1ドットずつ動かしても良いけど normalize.css を挟むと調整が楽なのでオススメ。

はてなブックマーク数を取得する

はてなブックマーク数の取得APIには、 JSON形式のと はてブ数だけリクエストする簡易方式があります。貰うデータは小さい方が嬉しいと言うことで簡易版を採用。

http://api.b.st-hatena.com/entry.count?url={目的のURL}

【function.php】
function getHtn($url) {
  $htnCount = wp_remote_get('http://api.b.st-hatena.com/entry.count?url=' .rawurlencode($url))
  if ( $htnCount['response']['code'] == 200 ) {
  return $htnCount['body'] -0;
  } else {
  return '-';
  }
}

この辺の経緯は前にも書きました。

【 関連記事 】

はてなブックマーク数を直接取得したら公式ボタンより遅かった件

雑な処理で手作りするくらいなら公式ウィジェット使った方が安全です。wp_remote_get() の解説も。

よく「SNSのカウンタは自分で作った方が軽い!」と言われますが、「動けばいいや」で作ると酷い目に遭うという好例。

(・∀・){ただしシェアボタンは手作りした方が大体高速です

シェア数をPHPで直接取得してみました感想

表示部となる変数はページ内で使い回せるので、それぞれの数字を足してシェア数の合計を出すことも可能です。各SNSでちらほらしか反応がなくても、全部で10シェアとか20シェアとかになると弱小サイトもそれなりに見栄えがしますしw

【 関連記事 】

旧URLのシェア数を取得するパーマリンク変更やサイト引っ越しのSNSシェア数を引き継ぐ

サイト引っ越し等でリセットされたシェア数をサルベージする方法。前のサイトが消えててもシェア数自体は再取得可能です。

公開API活用ガイド [ Zapa ]【楽天】 / 【Amazon】