| 1 |
package Plagger::Plugin::Filter::RSSTimeZoneString; |
|---|
| 2 |
use strict; |
|---|
| 3 |
use base qw( Plagger::Plugin ); |
|---|
| 4 |
|
|---|
| 5 |
my %tz = qw( |
|---|
| 6 |
SET +0100 CET +0100 MEZ +0100 MEWT +0100 |
|---|
| 7 |
MET +0100 BST +0100 FWT +0100 ECT +0100 |
|---|
| 8 |
SWT +0100 FST +0200 MEST +0200 UKR +0200 |
|---|
| 9 |
CEST +0200 EET +0200 SST +0200 EEST +0300 |
|---|
| 10 |
BT +0300 ZP4 +0400 ZP5 +0500 ZP6 +0600 |
|---|
| 11 |
HKT +0800 WST +0800 WADT +0800 CCT +0800 |
|---|
| 12 |
KST +0900 JST +0900 KDT +1000 EAST +1000 |
|---|
| 13 |
GST +1000 EADT +1100 IDLE +1200 NZST +1200 |
|---|
| 14 |
NZT +1200 NZD +1300 NZDT +1300 WET -0000 |
|---|
| 15 |
WAT -0100 AT -0200 FNT -0200 BRST -0200 |
|---|
| 16 |
BRT -0300 ADT -0300 EWT -0400 MNT -0400 |
|---|
| 17 |
AST -0400 ACT -0500 YDT -0800 YST -0900 |
|---|
| 18 |
HDT -0900 HST -1000 CAT -1000 AHST -1000 |
|---|
| 19 |
NT -1100 IDLW -1200 |
|---|
| 20 |
); |
|---|
| 21 |
|
|---|
| 22 |
my $tz_RE = join '|', keys %tz; |
|---|
| 23 |
|
|---|
| 24 |
sub register { |
|---|
| 25 |
my($self, $context) = @_; |
|---|
| 26 |
$context->register_hook( |
|---|
| 27 |
$self, |
|---|
| 28 |
'aggregator.filter.feed' => \&filter, |
|---|
| 29 |
); |
|---|
| 30 |
} |
|---|
| 31 |
|
|---|
| 32 |
sub filter { |
|---|
| 33 |
my($self, $context, $args) = @_; |
|---|
| 34 |
|
|---|
| 35 |
while ($args->{content} =~ s!($tz_RE)</(pubDate|lastBuildDate)>!$tz{$1}</$2>!) { |
|---|
| 36 |
$context->log(info => "Fixed bad timezone $1 to $tz{$1}"); |
|---|
| 37 |
} |
|---|
| 38 |
} |
|---|
| 39 |
|
|---|
| 40 |
1; |
|---|
| 41 |
|
|---|
| 42 |
__END__ |
|---|
| 43 |
|
|---|
| 44 |
=head1 NAME |
|---|
| 45 |
|
|---|
| 46 |
Plagger::Plugin::Filter::RSSTimeZoneString - Fix bad RFC822 timezone string in RSS 2.0 |
|---|
| 47 |
|
|---|
| 48 |
=head1 SYNOPSIS |
|---|
| 49 |
|
|---|
| 50 |
- module: Filter::RSSTimeZoneString |
|---|
| 51 |
|
|---|
| 52 |
=head1 DESCRIPTION |
|---|
| 53 |
|
|---|
| 54 |
This plugin fixes a bad timezone string in pubDate of RSS 2.0 (or |
|---|
| 55 |
0.91) feeds to a correct one. |
|---|
| 56 |
|
|---|
| 57 |
Namely, when you create RSS feeds with POSIX C<ctime> function for |
|---|
| 58 |
example, it'll create a following pubDate format if you're on the box |
|---|
| 59 |
under Japanese standard time: |
|---|
| 60 |
|
|---|
| 61 |
Fri, 03 Mar 2006 03:52:42 JST |
|---|
| 62 |
|
|---|
| 63 |
which is B<invalid> in RFC 822. (RFC 822 only allows timezone strings |
|---|
| 64 |
for North America, like PST and CST). |
|---|
| 65 |
|
|---|
| 66 |
This plugin fixes the string to: |
|---|
| 67 |
|
|---|
| 68 |
Fri, 03 Mar 2006 03:52:42 +0900 |
|---|
| 69 |
|
|---|
| 70 |
=head1 AUTHOR |
|---|
| 71 |
|
|---|
| 72 |
Tatsuhiko Miyagawa |
|---|
| 73 |
|
|---|
| 74 |
=head1 SEE ALSO |
|---|
| 75 |
|
|---|
| 76 |
L<Plagger>, L<DateTime::Format::Mail>, L<Time::Zone>, L<Plagger::Plugin::Filter::RSSLiberalDateTime> |
|---|
| 77 |
|
|---|
| 78 |
=cut |
|---|