package Plagger::Plugin::Filter::Delicious; use strict; use base qw( Plagger::Plugin ); use Digest::MD5 qw(md5_hex); use Plagger::UserAgent; use XML::Feed; sub register { my($self, $context) = @_; $context->register_hook( $self, 'update.entry.fixup' => \&update, ); } sub update { my($self, $context, $args) = @_; my $interval = $self->conf->{interval} || 1; sleep $interval; my $md5 = md5_hex($args->{entry}->permalink); my $url = "http://del.icio.us/rss/url/$md5"; $self->log(info => "Going to fetch $url"); my $ua = Plagger::UserAgent->new; my $res = $ua->fetch($url); if ($res->is_error) { $self->log(error => "Fetch URL $url failed."); return; } my $feed = XML::Feed->parse(\$res->content); unless ($feed) { $context->log(warn => "Feed error $url: " . XML::Feed->errstr); return; } for my $entry ($feed->entries) { my @tag = split / /, ($entry->category || ''); @tag or next; for my $tag (@tag) { $args->{entry}->add_tag($tag); } } my $delicious_users = $feed->entries; if ($delicious_users >= 30 && $self->conf->{scrape_big_numbers}) { my $url = "http://del.icio.us/url/$md5"; $self->log(info => "users count is more than 30. Trying to scrape from $url."); sleep $interval; my $res = $ua->fetch($url); if ($res->is_error) { $context->log(warn => "Fetch error $url: " . $res->http_response->message); return; } $delicious_users = ( $res->content =~ m#