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のコードはこうしようかなぁ…うーん…。