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>
やっていることは非常に単純。
XML と言ってもただの中間データなので、スキーマはものすごく適当。
XHTML の ol 要素、 li 要素を真似したものに独自拡張で target 属性をくっつけている。
いまのところ XML 化するために必要な置き換えは以下。
$line =~ s/<\/font>\n/<\/font><\/li>\n/g;
$line =~ s/\&[^amp]/\&/g;
$line =~ s/<br>/<br \/>/g;
この XML から被登録数をカウントするには、こんな XSLT を使う。
例
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 の被登録数をいっぺんに取り出したりするときに便利なのだ。
それについてはまた次回。