« LOVERSみてきた。 | メイン | iMacは顎だった。 »

BlogSurfのRSS取得プログラムをPOEで書き直す。

BlogSurfのRSS取得プログラムをPOEを使って書き直してみた。
POEとは、

multitasking and networking framework for perl

な、もので、非同期・ノンブロックなプログラムを書くときに非常に便利なフレームワークです。
これで、LivedoorとかJugemの様に重たいサーバがあった場合のRSS取得がスムーズになるハズ。

書いたプログラムの概要はこんな感じ。
負荷対策のようなものを考えないとな。あとは。

#!/usr/bin/perl
use strict;
use POE qw(Component::Client::HTTP);
use HTTP::Request;

$|++;

POE::Component::Client::HTTP->spawn(
	Agent     => '***/1.10',
	Alias     => 'ua',
	Timeout   => 60
);
POE::Component::Client::HTTP->spawn( Alias => 'ua' );

sub __changes_xml{
	return "http://ping.bloggers.jp/changes.xml?last=310&filter=^plaza.rakuten.co.jp";
}

sub __set_request{
	my($url)=@_;
	return HTTP::Request->new(GET=>$url);
}

#ping.bloggers.jpからchanges.xmlをゲット
sub _start{
	my $kernel = $_[KERNEL];
	$kernel->post(
		"ua" => "request",
		"parse_changes",
		&__set_request(&__changes_xml)
	);
}

sub parse_changes{
	my $response=$_[ARG1]->[0];
	return 0 unless $response && $response->is_success;
	my $changes = $response->contentからURLリストを抜き出す
	foreach my $url (@$changes){
		#print "Changes : " . $url,"\n";
		$_[KERNEL]->post(
			"ua" => "request",
			"parse_blog",
			&__set_request($url)
		);
	}
}

sub parse_blog{
	my $response=$_[ARG1]->[0];
	return 0 unless $response && $response->is_success;
	my $url = $response->contentからRSS AutoDiscovery
	return 0 unless $url;
	$_[KERNEL]->post(
		"ua" => "request",
		"parse_rss",
		&__set_request($url)
	);
}

sub parse_rss{
	my $response=$_[ARG1]->[0];
	return 0 unless $response && $response->is_success;
	RSSを処理
}

POE::Session->create(
	package_states => [ main => [ "_start","parse_changes","parse_blog","parse_rss"] ]
);

POE::Kernel->run();
exit;


参考
NDO::Weblogの記事「Shibuya.pm でデモした POE による pingbot のソース
CPANのPOEとPOE::Component::Client::HTTP

トラックバック

この一覧は、次のエントリーを参照しています: BlogSurfのRSS取得プログラムをPOEで書き直す。:

» Re: blog.nomadscafe.jp: BlogSurfのRSS取得プログラムをPOEで書き直す。 from [LL]
PerlではPOEを使うと非同期プログラムが手軽にかけます。蛇足ですが、Debianでは、aptを使ってPOEをインストールすると楽です。BlogSurfのRSS取得プログラムをPOEを使って書き直してみた。POEとは、 multitasking... [詳しくはこちら]

» xangoとsennaでカバトット from グニャラくんのグニャグニャ備忘録
Xango! ブログ検索で使われている xangoとsennaに興味あり。 最初... [詳しくはこちら]