| Plagger documentation | Contained in the Plagger distribution. |
Plagger::Plugin::Subscription::PingServer - Subscription from ping servers
- module: Subscription::PingServer
config:
fetch_items: 20
servers:
- url: http://ping.bloggers.jp/changes.xml?last=100
This plugin allows you to pingserver your subscription in config.yaml.
Kazuhiro Osawa
| Plagger documentation | Contained in the Plagger distribution. |
package Plagger::Plugin::Subscription::PingServer; use strict; use base qw( Plagger::Plugin ); use List::Util qw(first); use Plagger::UserAgent; use XML::LibXML; sub register { my($self, $context) = @_; $context->register_hook( $self, 'subscription.load' => \&load, ); } sub load { my($self, $context) = @_; my $servers = $self->conf->{servers}; $servers = [ $servers ] unless ref $servers; my %cache; for my $server (@{ $servers }) { my $agent = Plagger::UserAgent->new; my $response = $agent->fetch($server->{url}); if ($response->is_error) { $context->log(error => "GET $server->{url} failed: " . $response->http_status . " " . $response->http_response->message); return; } my $link; my $doc = XML::LibXML->new->parse_string($response->content); my $items = $self->conf->{fetch_items} || 20; for my $node ( $doc->findnodes('/weblogUpdates/weblog')) { my $url = first { $_ } $node->findvalue('@url'); next unless $url; next if $cache{$url}++; $context->log(debug => "get url: $url"); my $feed = Plagger::Feed->new; $feed->url($url); $feed->link($url); $feed->title(first { $_ } $node->findvalue('@name') || $url); last if $context->subscription->add($feed) >= $items; } } } 1; __END__