root/trunk/plagger/lib/Plagger/Plugin/Filter/RSSTimeZoneString.pm

Revision 752 (checked in by miyagawa, 14 years ago)

update RSSTimeZoneString document

  • Property svn:keywords set to Id Revision
Line 
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
Note: See TracBrowser for help on using the browser.