はてなアンテナ被登録数を調べる

2004-04-17 初出

被登録数とは「あるページがいくつのはてなアンテナに登録されているか」を示す数である。
これを調べるにははてなの include モジュールを使う。
やり方は簡単で、 a.hatena.ne.jp/include の引数に URL を渡せばよい。

インターネット殺人事件を含むアンテナ
http://a.hatena.ne.jp/include?http://internet.kill.jp/


というわけで、手っ取り早く被登録数を知りたければ、 include モジュールの結果ページで用が足りる。
ただ、これで話が終わっては面白くもなんともないので、 include の呼び出しを自動化する方法を紹介する。


include モジュールが返してくるのは人間が見るための HTML なので、被登録数をプログラムで扱いたい場合には、細かいところでさまざまな不便がある。

そんなことを不便に思う人間がどのくらいいるのか分からないが、 少なくともわたしは不便なので、 include の結果ページを XML 化して扱いやすくしている。


include -> XML ツール
@getInclude.pl
動作環境 : Perl 5.6.1 + LWP

使い方


perl @getInclude.pl (被登録数を調べたい URL ) (ワークディレクトリ)

例 (インターネット殺人事件の被登録数を調べる場合)

perl @getInclude.pl http://internet.kill.jp/ 20040417

出力結果

<?xml version="1.0" encoding="euc-jp" ?>
<?xml-stylesheet type="text/xsl" href="../hatenaLink.xsl" ?>
<ol target="http://a.hatena.ne.jp/include?http://internet.kill.jp/">
<li><a href="/YLB/">est antenna</a><font size="2"> <i>148</i></font></li>
<li><a href="/lovelovedog/">ヘイ・ブルドッグのアンテナ</a><font size="2"> <i>76</i></font></li>
<li><a href="/kurauchi/">クラウチのアンテナ</a><font size="2"> <i>70</i></font></li>
(省略)
</ol>


やっていることは非常に単純。

  1. http://a.hatena.ne.jp/include?(対象 URL )を取得
  2. ワークディレクトリ直下に includeBase.txt というキャッシュを保存
  3. includeBase.txt を XML に変換して標準出力へ表示

XML と言ってもただの中間データなので、スキーマはものすごく適当。
XHTML の ol 要素、 li 要素を真似したものに独自拡張で target 属性をくっつけている。
いまのところ XML 化するために必要な置き換えは以下。


$line =~ s/<\/font>\n/<\/font><\/li>\n/g;
$line =~ s/\&[^amp]/\&amp;/g;
$line =~ s/<br>/<br \/>/g;


この XML から被登録数をカウントするには、こんな XSLT を使う。

includeCount.xsl

C:\home\int\hatena>perl @getInclude.pl http://internet.kill.jp/ 20040417 > 20040417\include.xml

C:\home\int\hatena>msxsl 20040417\include.xml includeCount.xsl

http://a.hatena.ne.jp/include?http://internet.kill.jp/ 102

これで http://internet.kill.jp/ の被登録数が 102 だと分かる。
これだけでは手順が面倒になったようにしか見えないが、中間データを再利用したり、 大量の URL の被登録数をいっぺんに取り出したりするときに便利なのだ。
それについてはまた次回。

index