/[suikacvs]/markup/h2h/implementation/classic/generate-atom-feed.pl
Suika

Contents of /markup/h2h/implementation/classic/generate-atom-feed.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Sat Nov 1 13:25:50 2008 UTC (16 years, 1 month ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +5 -4 lines
File MIME type: text/plain
*** empty log message ***

1 wakaba 1.5 #!/usr/bin/perl5.8.7
2 wakaba 1.1 use strict;
3     use utf8;
4    
5 wakaba 1.5 use lib qw</home/wakaba/work/manakai2/lib
6 wakaba 1.4 /home/httpd/html/www/markup/html/whatpm>;
7 wakaba 1.1
8     our $REPOSITORY_PATH = q</home/wakaba/public_html/d/>;
9     our $FEED_NAME = q<冬様もすなる☆日記というもの>;
10     our $FEED_TAG = q<urn:x-suika-fam-cx:fuyubi:>;
11     our $BASE_URI = q<http://suika.fam.cx/~wakaba/d/>;
12     our $BASE_LANG = 'ja';
13     our $FEED_CURRENT_PATH = $REPOSITORY_PATH.'current.'.$BASE_LANG.'.atom';
14     our $AUTHOR_NAME = q<わかば>;
15     our $AUTHOR_URI = q<http://suika.fam.cx/~wakaba/who?>;
16     our $AUTHOR_MAIL = q<w@suika.fam.cx>;
17    
18 wakaba 1.4 use Message::DOM::DOMImplementation;
19 wakaba 1.1
20     my ($year, $month) = @ARGV;
21     $year += 0;
22     $month += 0;
23    
24     my $atom = q<http://www.w3.org/2005/Atom>;
25     my $fe = q<http://suika.fam.cx/www/2006/feature/>;
26     my $cfg = q<http://suika.fam.cx/www/2006/dom-config/>;
27     my $html = q<http://www.w3.org/1999/xhtml>;
28     my $xml = q<http://www.w3.org/XML/1998/namespace>;
29     my $xhtml2 = q<http://www.w3.org/2002/06/xhtml2/>;
30     my $h2h = q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/H2H/>;
31    
32 wakaba 1.4 my $impl = Message::DOM::DOMImplementation->new;
33 wakaba 1.1
34 wakaba 1.4 my $feed_doc = $impl->create_atom_feed_document
35 wakaba 1.1 ($FEED_TAG.$year.':'.$month.':');
36     $feed_doc->dom_config->set_parameter ($cfg.'create-child-element' => 1);
37    
38     my $atom_feed = $feed_doc->document_element;
39     $atom_feed->set_attribute_ns ($xml, 'xml:base', $BASE_URI);
40     $atom_feed->set_attribute_ns ($xml, 'xml:lang', $BASE_LANG);
41     $atom_feed->title_element->text_content ($FEED_NAME);
42    
43    
44     for my $author_el ($atom_feed->append_child
45     ($feed_doc->create_element_ns ($atom, 'author'))) {
46     $author_el->name ($AUTHOR_NAME);
47     $author_el->uri ($AUTHOR_URI) if defined $AUTHOR_URI;
48     $author_el->email ($AUTHOR_MAIL) if defined $AUTHOR_MAIL;
49     }
50    
51     for my $link_el ($atom_feed->append_child
52     ($feed_doc->create_element_ns ($atom, 'link'))) {
53     $link_el->rel ('alternate');
54     $link_el->href (sprintf 'd%04d%02d.%s.html', $year, $month, $BASE_LANG);
55     $link_el->type ('text/html');
56     $link_el->hreflang ($BASE_LANG);
57     }
58    
59     for my $link_el ($atom_feed->append_child
60     ($feed_doc->create_element_ns ($atom, 'link'))) {
61     $link_el->rel ('self');
62     $link_el->href (sprintf 'd%04d%02d.%s.atom', $year, $month, $BASE_LANG);
63     $link_el->type ('application/atom+xml');
64     $link_el->hreflang ($BASE_LANG);
65     }
66 wakaba 1.2
67     my $dir_name = $REPOSITORY_PATH.sprintf ('%04d', $year);
68     my $dym = sprintf 'd%04d%02d', $year, $month;
69     opendir my $dir, $dir_name or die "$0: $dir_name: $!";
70     for my $file_name (sort {$a cmp $b}
71     grep {substr ($_, 0, 7) eq $dym and
72     substr ($_, -(6 + length ($BASE_LANG)))
73     eq '.'.$BASE_LANG.'.atom'}
74     readdir $dir) {
75 wakaba 1.4 open my $entry_file, '<:utf8', $dir_name.'/'.$file_name
76 wakaba 1.2 or die "$0: $dir_name/$file_name: $!";
77 wakaba 1.4 local $/ = undef;
78     my $entry_text = <$entry_file>;
79     my $entry_doc = $impl->create_document;
80     $entry_doc->inner_html ($entry_text);
81 wakaba 1.2 $atom_feed->append_child
82     ($feed_doc->adopt_node ($entry_doc->document_element));
83     }
84     close $dir;
85 wakaba 1.1
86     my $feed_file_name = $REPOSITORY_PATH.sprintf ('d%04d%02d', $year, $month)
87     . '.'.$BASE_LANG.'.atom';
88    
89 wakaba 1.5 require Encode;
90    
91 wakaba 1.1 open my $feed_file, '>', $feed_file_name
92     or die "$0: $feed_file_name: $!";
93 wakaba 1.5 warn qq<Write to "$feed_file_name"\n>;
94 wakaba 1.4 my $data = Encode::encode ('utf-8', $feed_doc->inner_html);
95 wakaba 1.1 print $feed_file $data;
96     close $feed_file;
97     system 'chmod', 'go+r', $feed_file_name;
98     $? == -1 and die "$0: chmod $feed_file_name: $!";
99    
100     open my $feed_file, '>', $FEED_CURRENT_PATH
101     or die "$0: $FEED_CURRENT_PATH: $!";
102     warn qq<Write to "$FEED_CURRENT_PATH"\n>;
103     print $feed_file $data;
104     close $feed_file;
105    
106    
107    
108    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24