検索文字生成

id:kkobayashi_a:20060406#p1の続き。各タイトルについてはてなのキーワードを検索しようと思うんだけど、さすがに手動でいちいち打ち込むのはめんどいので、クエリー文字列を自動生成することにします。

use strict;
use Encode::Guess qw /euc-jp shiftjis 7bit-jis/;

my $str = $ARGV[0];
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;

print "argv    : $ARGV[0]\n";
print "decoded : $str\n";
print "encoding: ". Encode::Guess::guess_encoding($str)->name . "\n";

まず適当な言葉で検索してみて、文字列のエンコーディングを調べてみる。

$ perl dec.pl http://search.hatena.ne.jp/keyword?word=%C8%FE%C6%FD | nkf -s
argv    : http://search.hatena.ne.jp/keyword?word=%C8%FE%C6%FD
decoded : http://search.hatena.ne.jp/keyword?word=美乳
encoding: euc-jp

EUCらしい。ちなみに、別に美乳が好きなわけではありません*1。好きだけど。

作った。

use strict;
use URI::Escape;
use LWP::Simple;

while(<>){
    tr/\x0A\x0D//d;
    my $url = 'http://search.hatena.ne.jp/keyword?word=' . 
        URI::Escape::uri_escape($_);
    foreach(grep(/<h3>/, split(/\n/, get($url)))){
        m|<h3><a href="http://d.hatena.ne.jp/keyword/(.*?)">|;
        print "$1\n";
    }
}

EUCでキーワード候補を書いたファイルを読み込ませて、キーワード検索の結果を出力。Perlはこういうクイックハックにはぴったりだよなあ。大きなプログラム書くと混乱するけど・・・

*1:暇な人は「美乳テーブル」でぐぐってみてください