XML::Simpleを使ってみる

正規表現でもいいけど XML::Simple もいいぜよ。』なーんて書いてもらっていたので、XML::Simpleを使ってみる。XML::Simpleは、XMLPerlの構造体にしてくれるモジュール。要するに、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のコードはこうしようかなぁ…うーん…。