- 2008-03-31 (月) 5:57
- Perl
Perlの練習のために、GoogleMapに検索クエリを投げて、返ってくるHTMLから特定のタグに はさまれた部分を抜き出すスクリプトを書いた。
<
div>
</p>
<h1>!/usr/bin/perl -w</h1>
<p>use Jcode;
use LWP::Simple qw(get);</p>
<h1>binmode STDOUT, ':encoding(utf-8)';</h1>
<p>sub url_encode($) {
my $str = shift;
$str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$str =~ tr/ /+/;
return $str;
}</p>
<p>sub url_decode($) {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return $str;
}</p>
<p>sub getShop {
my ($query) = jcode(@_)->utf8;
$query = url_encode($query);
my $r = get("http://maps.google.co.jp/maps?q=$query". "&view=text");</p>
<h1>open(OUT, "> api.html");</h1>
<h1>print(OUT "$r");</h1>
<h1>close(OUT);</h1>
<pre><code>if($r =~ /<div class="bn"><a.*?>(.*?)<\/a>/){
my $res = jcode($1)->utf8;
$res =~ s/<.*?>//g;
return $res;
}else{
return "Not Found!";
}
</code></pre>
<p>}</p>
<p>print "検索語を入力:";
$input = <stdin>;
chomp $input;</p>
<p>my $mes = getShop($input);
print "$mes \n";
とりあえず、URLエンコード・デコードはこれから使えそうなので、メモ程度にルーチンに。
getShop()関数では、例えば「吉野家 本郷三丁目」と検索すると、検索結果として 一番上に表示される店の名前を抜き出して返してくれる。ifの条件の中をいじれば 好きな部分を抜き出せるでしょう。
単純に正規表現の練習ですね。改行も含めてマッチさせるには、後ろに「s」というオプションを つけると良い模様。結局必要なかったけどw

