root/branches/feature-server/plagger/lib/Plagger/Plugin/Filter/ResolveRelativeLink.pm

Revision 629 (checked in by miyagawa, 4 years ago)

ResolveRelativeLink?: don't die even if there's no link

  • Property svn:keywords set to Id Revision
Line 
1 package Plagger::Plugin::Filter::ResolveRelativeLink;
2 use strict;
3 use base qw( Plagger::Plugin );
4
5 use HTML::ResolveLink;
6 use Text::Diff;
7
8 sub register {
9     my($self, $context) = @_;
10     $context->register_hook(
11         $self,
12         'update.entry.fixup' => \&filter,
13     );
14 }
15
16 sub filter {
17     my($self, $context, $args) = @_;
18     my $entry = $args->{entry};
19
20     my $base = $entry->permalink || $args->{feed}->link;
21     unless ($base) {
22         $context->log(warn => "No base link found");
23         return;
24     }
25
26     my $resolver = HTML::ResolveLink->new(base => $base);
27     my $html = $resolver->resolve($entry->body);
28
29     if (my $count = $resolver->resolved_count) {
30         $context->log(info => "Resolved $count link(s) in " . $entry->permalink);
31         $entry->body($html);
32     }
33 }
34
35 1;
36
37 __END__
38
39 =head1 NAME
40
41 Plagger::Plugin::Filter::ResolveRelativeLink - Resolve relative links in feed content
42
43 =head1 SYNOPSIS
44
45   - module: Filter::ResolveRelativeLink
46
47 =head1 DESCRIPTION
48
49 Some feeds contain relative URIs in their content in C<<
50 <content:encoded> >> or C<< <description> >> element. That's not a
51 valid thing to do, but because RSS and content module specification
52 doesn't clearly say about it, some feeds still do it.
53
54 This plugins tries to fix the relative links in feed content, using
55 entry's permalink as a base URL.
56
57 =head1 AUTHOR
58
59 Tatsuhiko Miyagawa
60
61 =head1 SEE ALSO
62
63 L<Plagger>, L<HTML::ResolveLink>
64
65 =cut
Note: See TracBrowser for help on using the browser.