Liner Note

情報(ユーザー中心デザイン・ユーザビリティ)と技術(ウェブプログラミング・ウェブサービス)についてのメモ書き

コードを一部改変しました (2007-08-17)

といっても、実はこの手のプラグインとしてはAOINA.COMさんの被ブックマーク数表示+ランキング生成プラグインというのが既に存在していて、私も今までコレを利用させていただいていました。

ただ、このプラグインはアクセスの際にブックマーク数を記録し、それをデータベース化するため、アクセスのないエントリはランキング対象外になりますし、ランキング生成の機能だけを使いたい場合でも、ヘッダ部分に被ブックマーク数表示する時用のスクリプト+スタイルシートが読み込まれてしまうのが少し難点と言えば難点です1

はてブでは、被ブックマーク数順に並び替えたRSSが取得できるので、それを利用してPHPで以てパースして、テーブルに変換することにしました。

てことで、ページを作ってそこでPHPスクリプトを動かす算段ですので、動作にはrunPHPが必須です。プラグインにするモチベーションがないのでこんな形ですが、よければどうぞ。

デモはこのサイトの記事一覧に表示しています。

コード自体はこんな感じ。あんまり下位のヤツまで呼び出さないように20位までに制限していますが、foreach()で回せば全順位が表示できます。あと、function getBookmarkNum($url)はスキンのfunction.phpとかに書いておくと、スキンの中でこの関数が呼び出せて便利ですよ、私は実際に組み込んでます。

PHPソースコード
<table summary="このサイト内において、はてなブックマークでブックマークされた記事ランキングを表示しています">
<thead><tr>
<th>被ブックマーク数</th>
<th>対象記事</th>
</tr></thead>
<tbody>
<?
function getBookmarkNum($url){
    $params = array( new XML_RPC_Value($url, 'string') );
    $msg = new XML_RPC_Message('bookmark.getCount', $params);
    $client = new XML_RPC_Client('/xmlrpc', 'b.hatena.ne.jp');
    $response = $client->send($msg);
 
    if (!$response){
        echo 'Communication error: ' . $client->errstr;
        exit;
    }
    if (!$response->faultCode()){
        $val = $response->value();
        $data = XML_RPC_decode($val);
        $num = $data[$url];
        $str =    '<a href="http://b.hatena.ne.jp/entry/' . $url . '" rel="bookmark" title="この記事の被ブックマーク数">'.
        '<span class="bookmark-count';
        // ブックマーク数に合わせてクラス名を変更
        if ($num >= 100) $str .= ' red-hotentry';
        elseif ($num >= 10) $str .= ' hotentry';
        $str .=  '">'.$num .'</span></a>';
        return $str;
    }else {
        return "0";
    }
}
function convert($str) {
    return mb_convert_encoding($str, mb_internal_encoding(), "auto");
}
$bookmark_feed = "http://b.hatena.ne.jp/entrylist?mode=rss&url=".htmlspecialchars(get_bloginfo('url'))."&sort=count&threshold=3";
$article = simplexml_load_file($bookmark_feed);
for ($i=0; $i<=20; $i++){
    if ( convert($article->item[$i]->link) != get_bloginfo('url')."/" ){
        // サイト名を取り除いて、記事名だけにする
        // $entry_title = preg_replace("/Liner (N|n)ote (-|») /", "", convert($article->item[$i]->title));
        echo "<tr>\n";
        echo "<td>". getBookmarkNum(convert($article->item[$i]->link)) . "</td>\n";
        echo '<td><a href="' . convert($article->item[$i]->link) . '">' .$entry_title. "</a></td>\n";
        echo "</tr>\n";
    }
}
?>
</tbody>
</table>

付け加えておくと、このプラグインを使うデメリットとして

  • 記事ではないものまでブックマークされる可能性がある2
  • ブックマークする人にタイトルをいじられる可能性がある
  • 記事が重複する可能性がある3

というのがあります。こうしてみると、あんまりいいとこないかもしれませんが、WordPressのバージョンアップで動作しなくなることもなく安心して使えるのはメリットだと思いますよ。

Popularity: 2% [?]

  1. まぁ、フィルターから外せばいいわけですが。[戻る]
  2. もっともよほどイレギュラーなブログでない限り、上位に単体記事以外の物が混じることはあんまり無いと思いますが[戻る]
  3. フラグメントID付きでブックマークした人とか[戻る]
キーワード:

似たもの記事

読者の皆さんの反応サイト内コメントの更新情報(RSSフィード)

読者のコメント

0

ブックマークコメント

1

他サイトの関連記事

0

読者のコメント

コメントはまだ寄せられていません

はてなブックマークでつけられたコメント

version510さんのプロフィール画像  version510
WordPressではてなブックマークの被ブクマランキングを表示するコードの紹介

他サイトの関連記事

トラックバックはまだ寄せられていません


トラックバックとは
この記事に言及したサイトをこちらに掲載する仕組みをトラックバックと言います。ここでは、このサイトに頂いたトラックバックを一覧表示しています。
トラックバックしてくださる方へ
この記事への言及がない記事など、トラックバック受信方針に沿っていないものは、読者にお見せしても仕方ないこともあり削除させていただいることをご了承ください。
トラックバックを受け取るためのURI

コメント書き込みフォーム

  • メールアドレスはウェブ上で公開したり、連絡以外で使うことはありません
  • コメントを公開したくないが、作者に連絡を取りたい場合は メールで連絡してください
  • 本文中にHTMLコードは使用できません(URLはそのままお書きください)