Changeset 758
- Timestamp:
- 05/17/06 02:50:06
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plagger/lib/Plagger/Plugin/Filter/StripRSSAd.pm
r604 r758 17 17 my $dir = $self->assets_dir; 18 18 my $dh = DirHandle->new($dir) or Plagger->context->error("$dir: $!"); 19 for my $file (grep -f $_->[0] && $_->[1] =~ /^[\w\- ]+$/,19 for my $file (grep -f $_->[0] && $_->[1] =~ /^[\w\-\.]+$/, 20 20 map [ File::Spec->catfile($dir, $_), $_ ], sort $dh->read) { 21 21 $self->load_pattern(@$file); … … 28 28 Plagger->context->log(debug => "loading $file"); 29 29 30 if ($file =~ /\.yaml$/) { 31 $self->load_yaml($file, $base); 32 } else { 33 $self->load_regexp($file, $base); 34 } 35 } 36 37 sub load_regexp { 38 my($self, $file, $base) = @_; 39 30 40 open my $fh, $file or Plagger->context->error("$file: $!"); 31 41 my $re = join '', <$fh>; … … 33 43 34 44 push @{$self->{pattern}}, { site => $base, re => qr/$re/ }; 45 } 46 47 sub load_yaml { 48 my($self, $file, $base) = @_; 49 50 my $pattern = eval { YAML::LoadFile($file) } 51 or Plagger->context->error("$file: $@"); 52 53 push @{$self->{pattern}}, { site => $base, %$pattern }; 35 54 } 36 55 … … 45 64 sub update { 46 65 my($self, $context, $args) = @_; 47 my $body = $self->filter($args->{entry}->body, $args->{entry}->link); 48 $args->{entry}->body($body); 49 } 50 51 sub filter { 52 my($self, $body, $link) = @_; 66 my $body = $args->{entry}->body; 53 67 54 68 for my $pattern (@{ $self->{pattern} }) { 55 my $re = $pattern->{re}; 56 if (my $count = $body =~ s!$re!defined($1) ? $1 : ''!egs) { 57 Plagger->context->log(debug => "Stripped $pattern->{site} Ad on $link"); 69 if (my $re = $pattern->{re}) { 70 if (my $count = $body =~ s!$re!defined($1) ? $1 : ''!egs) { 71 Plagger->context->log(info => "Stripped $pattern->{site} Ad on " . $args->{entry}->link); 72 } 73 } elsif (my $cond = $pattern->{condition}) { 74 local $args->{body} = $body; 75 if (eval $cond && $pattern->{strip}) { 76 $args->{feed}->delete_entry($args->{entry}); 77 Plagger->context->log(info => "Stripped Ad entry " . $args->{entry}->link); 78 } elsif ($@) { 79 Plagger->context->log(error => "Error evaluating $cond: $@"); 80 } 58 81 } 59 82 } 60 83 61 $ body;84 $args->{entry}->body($body); 62 85 } 63 86
