Changeset 760
- Timestamp:
- 05/17/06 03:42:54
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plagger/lib/Plagger/Plugin/Filter/TruePermalink.pm
r759 r760 5 5 use DirHandle; 6 6 use YAML; 7 use Plagger::UserAgent; 7 8 use URI; 8 9 use URI::QueryParam; … … 29 30 30 31 Plagger->context->log(debug => "loading $file"); 31 push @{$self->{plugins}}, YAML::LoadFile($file); 32 my $data = YAML::LoadFile($file); 33 if (ref($data) eq 'ARRAY') { 34 push @{$self->{redirectors}}, { follow_link => "^(?:" . join("|", @$data) . ")" }; 35 } else { 36 push @{$self->{plugins}}, $data; 37 } 32 38 } 33 39 … … 82 88 $count += $done; 83 89 $rewritten = $_; 84 $callback->($_);85 90 last; 86 91 } … … 88 93 my $param = URI->new($link)->query_param($plugin->{query_param}) 89 94 or $context->error("No query param $plugin->{query_param} in " . $link); 90 $callback->($param);91 95 $count++; 92 96 $rewritten = $param; … … 95 99 } 96 100 101 unless ($count) { 102 for my $red (@{ $self->{redirectors} }) { 103 next unless $red->{follow_link}; 104 if ($link =~ /$red->{follow_link}/i) { 105 my $url = $self->follow_redirect($link); 106 if ($url && $url ne $link) { 107 $count++; 108 $rewritten = $url; 109 last; 110 } 111 } 112 } 113 } 114 97 115 if ($count) { 116 $callback->($rewritten); 98 117 $context->log(info => "Link $orig rewritten to $rewritten"); 99 118 } 100 119 101 120 return $count; 121 } 122 123 sub follow_redirect { 124 my($self, $link) = @_; 125 126 my $url = $self->cache->get_callback( 127 "redirector:$link", 128 sub { 129 my $ua = Plagger::UserAgent->new; 130 my $res = $ua->simple_request( HTTP::Request->new(GET => $link) ); 131 if ($res->is_redirect) { 132 return $res->header('Location'); 133 } 134 return; 135 }, 136 '1 day', 137 ); 138 139 Plagger->context->log(debug => "Resolving redirection of $link: $url") if $url; 140 141 return $url; 102 142 } 103 143
