XML::Simpleを使ってみる
『正規表現でもいいけど XML::Simple もいいぜよ。』なーんて書いてもらっていたので、XML::Simpleを使ってみる。XML::Simpleは、XMLをPerlの構造体にしてくれるモジュール。要するに、XMLを食わせればPerlで扱える形にしてくれるというわけだ。
これを使って、昨日のクローラーのコードを書き換えると次のようになる。
#!/usr/bin/perl -w
# # Crawler 2 # #
use strict;
use Storable 'lock_store';
use LWP::UserAgent;
use XML::Simple;
my $changesXml = 'http://d.hatena.ne.jp/changes.xml';
my $store_file = '/Users/a_aql/Sites/hcx/store.db';
# # # # #
my @array;
my $content = LWP::UserAgent->new->get( $changesXml )->content;
my $xml = XML::Simple->new->XMLin( $content );
foreach my $item ( keys %{$xml->{weblog}} ){
push @array, {
name => $item,
uri => $xml->{weblog}->{$item}->{url}
};
}
lock_store ?@array, $store_file;
exit;正規表現にまつわる部分が無くなって、結構すっきり。アトリビュートの順番が変わってもこっちなら平気なので、汎用性も高くなっている。RingBadgeのコードはこうしようかなぁ…うーん…。