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

おちです。

きょーびのブログに必須と言われて久しいソーシャルボタンですけど、公式ボタンそのまま貼り付けるとめっぽう重いので自作してます。同じ理由で自作してる方も多いですよね。

ただ、最近ページの表示が妙に遅い気がしてログ追ってたらはてなブックマークカウントの取得が原因みたいです。よくよく見たら結構な確率で遅延してるっぽい。つまりその分レンダリングが止まるってことですね…。(((( ;゚Д゚)))

うっそー、やだもー!iframeで動いてる公式ボタンの方がエラーが出たとき安全じゃないですかー。

…。orz

でも作るよ!

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

当初、以下のコードを参考にさせて頂いてました。

参考:PHPでいいね数、ツイート数、はてブ数を取得する方法 – the pb times

【表示部】
$socials = getSocialCount('http://example.jp/');
echo "はてなブックマークカウント:" . $socials['htn'] . "users";

【function.php】
// hatena bookmark counter
function getHatebuCount($url) {
  $socials = array();
  $socials['htn'] = getHtn($url);
  return $socials;
}
function getHtn($url) {
  $htn_uri = 'http://b.hatena.ne.jp/entry/json/?url=' . rawurlencode($url);
  $json = file_get_contents($htn_uri);
  $result = json_decode($json);
  return (int) $result->count;
}

でもよく考えたらJSONリクエストする必要ないですよね。いわゆる標準の

おち研

みたいな単純コールで十分だった。処理も早いし。

取得中のエラーを回避するはてブ数GETルーチン

ついでに、外に問い合わせるとき用に wp_remote_get() てタグのがあるのを知ったので盛り込みます。

参考:wp_remote_get のススメ – dogmap.jp

【function.php】
// hatena bookmark counter
function getHatebuCount($url) {
  $socials = array();
  $socials['htn'] = getHtn($url);
  return $socials;
}

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 越しにAPI叩いて $htnCount[response][code] が 200 だったら [body] を返す、という感じ。はてブされてない場合は 0 じゃなく NULL が入るので好みに成形します。

ちなみにタイムアウトはデフォルトで 5秒 だそうです。URLに続けて array( $args ) すると色々設定変えられます。

【wp_remote_get() Default Usage】
<?php
$args = array(
  'timeout' => 5,
  'redirection' => 5,
  'httpversion' => '1.0',
  'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
  'blocking' => true,
  'headers' => array(),
  'cookies' => array(),
  'body' => null,
  'compress' => false,
  'decompress' => true,
  'sslverify' => true,
  'stream' => false,
  'filename' => null
);
wp_remote_get( $url, $args );
?>

ついでに今まで通常テキストで適当に表示してた「はてブマーク」もWebフォント作りました。Webフォントの自作はトリムマークで思わぬ落とし穴があったのでそのうち書きます。

はてブボタン作り直しました まとめ

かような手間を掛けて自作したところで村外にも足を運ぶ皆さんは概ね専用アプリを使ってらっしゃいますから、稀にはてブして頂いてもボタン余り使われてないんですけどね!

でもまぁ、便利なタグを知ったので良しとします。(´∀`*)

※モバイル版ではフォントが読み込まれてないので表示が崩れます。後日対応する予定。

【 関連記事 】

Twitter・Facebook・はてなブックマークのシェア数を取得する
同様にエラー対応したTwitterとFacebookのシェアカウンタはこちらで。

ハセプロ スーパーマリオ ハテナボックス【Amazon】

ちなみに8月7日だったので はてなの記事を書いてみたというオヤジギャグ展開でした。