Changeset 494

Show
Ignore:
Timestamp:
04/02/06 12:54:53
Author:
miyagawa
Message:
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Plugin/CustomFeed/Simple.pm

    r481 r494  
    1919    my($self, $context, $args) = @_; 
    2020 
    21     if ($args->{feed}->meta->{follow_link}) { 
     21    if (my $match = $args->{feed}->meta->{follow_link}) { 
     22        $args->{match} = $match; 
    2223        return $self->aggregate($context, $args); 
    2324    } 
     
    4748    $feed->link($url); 
    4849 
    49     my $re = $args->{feed}->meta->{follow_link}; 
     50    my $re = $args->{match}; 
    5051 
    5152    my $parser = HTML::TokeParser->new(\$content); 
  • trunk/plagger/lib/Plagger/Plugin/Filter/EntryFullText.pm

    r491 r494  
    1010use Plagger::Date; # for metadata in plugins 
    1111use Plagger::Util qw( decode_content ); 
    12  
     12use Plagger::Plugin::CustomFeed::Simple; 
    1313use Plagger::UserAgent; 
    1414 
     
    1717    $context->register_hook( 
    1818        $self, 
     19        'customfeed.handle'  => \&handle, 
    1920        'update.entry.fixup' => \&filter, 
    2021    ); 
     
    3536    my $dir = $self->assets_dir; 
    3637    my $dh = DirHandle->new($dir) or $context->error("$dir: $!"); 
    37     for my $file (grep -f $_->[0] && $_->[0] =~ /\.pl$/, 
     38    for my $file (grep -f $_->[0] && $_->[0] =~ /\.(?:yaml)$/, 
    3839                  map [ File::Spec->catfile($dir, $_), $_ ], $dh->read) { 
    3940        $self->load_plugin(@$file); 
     
    4546 
    4647    Plagger->context->log(debug => "loading $file"); 
     48 
     49    my $load_method = $file =~ /\.pl$/ ? 'load_plugin_perl' : 'load_plugin_yaml'; 
     50    push @{ $self->{plugins} }, $self->$load_method($file, $base); 
     51} 
     52 
     53sub load_plugin_perl { 
     54    my($self, $file, $base) = @_; 
    4755 
    4856    open my $fh, $file or Plagger->context->error("$file: $!"); 
     
    6674    my $plugin = $plugin_class->new; 
    6775    push @{ $self->{plugins} }, $plugin; 
     76} 
     77 
     78sub load_plugin_yaml { 
     79    my($self, $file, $base) = @_; 
     80    my $data = YAML::LoadFile($file); 
     81 
     82    return Plagger::Plugin::Filter::EntryFullText::YAML->new($data, $base); 
     83} 
     84 
     85sub handle { 
     86    my($self, $context, $args) = @_; 
     87 
     88    my $handler = first { $_->custom_feed_handle($args) } @{ $self->{plugins} }; 
     89    if ($handler) { 
     90        $args->{match} = $handler->custom_feed_follow_link; 
     91        return $self->Plagger::Plugin::CustomFeed::Simple::aggregate($context, $args); 
     92    } 
    6893} 
    6994 
     
    113138package Plagger::Plugin::Filter::EntryFullText::Site; 
    114139sub new { bless {}, shift } 
     140sub custom_feed_handle { 0 } 
     141sub custom_feed_follow_link { } 
    115142sub handle_force { 0 } 
    116143sub handle { 0 } 
     144 
     145package Plagger::Plugin::Filter::EntryFullText::YAML; 
     146sub new { 
     147    my($class, $data, $base) = @_; 
     148    bless {%$data, base => $base }, $class; 
     149} 
     150 
     151sub site_name { 
     152    my $self = shift; 
     153    $self->{base}; 
     154} 
     155 
     156sub custom_feed_handle { 
     157    my($self, $args) = @_; 
     158    $args->{feed}->url =~ /$self->{custom_feed_handle}/; 
     159} 
     160 
     161sub custom_feed_follow_link { 
     162    $_[0]->{custom_feed_follow_link}; 
     163} 
     164 
     165sub handle_force { 
     166    my($self, $args) = @_; 
     167    $self->{handle_force} 
     168        ? $args->{entry}->link =~ /$self->{handle_force}/ : 0; 
     169} 
     170 
     171sub handle { 
     172    my($self, $args) = @_; 
     173    $args->{entry}->link =~ /$self->{handle}/; 
     174} 
     175 
     176sub extract { 
     177    my($self, $args) = @_; 
     178 
     179    if (my @match = $args->{content} =~ /$self->{extract}/s) { 
     180        my @capture = split /\s+/, $self->{extract_capture}; 
     181        my %data; @data{@capture} = @match; 
     182        if ($data{date} && $self->{extract_date_format}) { 
     183            @data{date} = Plagger::Date->strptime($self->{extract_date_format}, $data{date}); 
     184        } 
     185        return \%data; 
     186    } 
     187} 
    117188 
    1181891;