Commit | Line | Data |
b3ef54ec |
1 | #!/usr/bin/env perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | use utf8; |
6 | |
7 | use File::Spec::Functions qw(rel2abs splitpath splitdir catpath catdir catfile canonpath); |
8 | use XML::Feed; |
9 | |
10 | my $feed = XML::Feed->parse(URI->new('http://yapgh.blogspot.com/feeds/posts/default?alt=rss')) |
11 | or die XML::Feed->errstr; |
12 | |
13 | my ($volume, $dirs) = splitpath(rel2abs(__FILE__)); |
14 | |
15 | my @directories = splitdir(canonpath($dirs)); |
16 | pop(@directories); |
17 | my $parent_dir = catpath($volume, catdir(@directories)); |
18 | my $output_path = catdir($parent_dir, 'pages'); |
19 | |
20 | die("Error: Output path '$output_path' not found.") unless(-d $output_path); |
21 | |
22 | my $fh; |
23 | my %available_tags = (); # tags to filenames |
24 | my %tag_overview = (); # tags to short content |
25 | |
26 | printf("path for placing files is: %s\n", $output_path); |
27 | |
28 | my $i = 1; |
29 | for my $entry ($feed->entries) |
30 | { |
31 | my $output_file = sprintf("blog-%04d.html-inc", $i); |
32 | my @tags = $entry->tags; |
33 | |
34 | foreach my $tag (sort @tags) |
35 | { |
36 | @{$available_tags{$tag}} = () unless defined ($available_tags{$tag}); |
37 | push(@{$available_tags{$tag}}, $output_file); |
38 | } |
39 | |
40 | open($fh, '>', catfile($output_path, $output_file)); |
41 | binmode($fh, ":utf8"); |
42 | print($fh "<div class=\"blog\">\n<h1 id=\"NAME\">\n", |
43 | $entry->title, |
44 | "\n</h1>\n<div class=\"CONTENT\">\n", |
45 | $entry->content->body, |
46 | "</div>", |
47 | "</div>" |
48 | ); |
49 | close($fh); |
50 | |
51 | printf("created file: %s\n", $output_file); |
52 | |
53 | $i++; |
54 | } |
55 | |
56 | open($fh, '>', catfile($output_path, 'blog-0000.html-inc')); |
57 | binmode($fh, ":utf8"); |
58 | print($fh "<div class=\"blog\"><h1>Articles</h1>\n"); |
59 | $i = 1; |
60 | for my $entry ($feed->entries) |
61 | { |
62 | my $tag_links = ''; |
63 | my @tags = $entry->tags; |
64 | foreach my $tag (sort @tags) |
65 | { |
66 | my $_tag = $tag; |
67 | $_tag =~ s/\W/-/g; |
68 | $tag_links .= sprintf(' <a href="tags-%s.html" style="font-size: 10px">[%s]</a>', $_tag, $tag); |
69 | } |
70 | |
71 | my $text = $entry->content->body; |
72 | $text = $1 if $text =~ /^<div.+<\/div>(.+)<div.+<\/div>$/; |
73 | $text =~ s/<br\s*\/{0,1}>/\n/g; |
74 | $text =~ s/<[@#%\w\s"\/?&=:\-\.;']+>/ /g; |
75 | $text =~ s/^\n*//g; |
76 | $text =~ s/\n*$//g; |
77 | $text =~ s/\n+/\n/g; |
78 | $text =~ s/\n/<br \/>/g; |
79 | $text = $1 if $text =~ /^([^<>]+<br \/>[^<>]+<br \/>[^<>]+<br \/>).*$/; |
80 | $text =~ s/(<br \/>)+$//g; |
81 | |
82 | # overview of all blog entries |
83 | printf($fh '<div>' |
84 | . '<a href="blog-%04d.html">%s</a><br />' |
85 | . '<span style="font-size: 10px">%s</span><br />' |
86 | . '<span style="font-size: 10px">Tags:</span>%s<br />' |
87 | . '%s<br /><a href="blog-%04d.html" style="font-size: 12px">[more]</a><br /><br />' |
88 | . '</div>' |
89 | . '<hr />', |
90 | $i, $entry->title, $entry->issued->strftime('%A, %d %B %Y'), $tag_links, $text, $i |
91 | ); |
92 | |
93 | # preparing the %tag_overview hash for tag-overview-pages |
94 | @tags = $entry->tags; |
95 | foreach my $tag (sort @tags) |
96 | { |
97 | @{$tag_overview{$tag}} = () unless defined ($tag_overview{$tag}); |
98 | push(@{$tag_overview{$tag}}, |
99 | sprintf('<div>' |
100 | . '<a href="blog-%04d.html">%s</a><br />' |
101 | . '<span style="font-size: 10px">%s</span><br />' |
102 | . '<span style="font-size: 10px">Tags: %s</span><br />' |
103 | . '%s<br /><a href="blog-%04d.html" style="font-size: 12px">[more]</a><br /><br />' |
104 | . '</div>', |
105 | $i, $entry->title, $entry->issued->strftime('%A, %d %B %Y'), $tag_links, $text, $i |
106 | )); |
107 | } |
108 | |
109 | $i++; |
110 | } |
111 | print($fh "</div>\n"); |
112 | close($fh); |
113 | printf("created file: %s\n", 'blog-0000.html-inc'); |
114 | |
115 | |
116 | # csv: "tagname: file1,file2\n" |
117 | open($fh, '>', catfile($output_path, 'tags-index')); |
118 | binmode($fh, ":utf8"); |
119 | foreach my $tag (sort keys %available_tags) |
120 | { |
121 | printf($fh "%s: %s\n", $tag, join(',', @{$available_tags{$tag}})); |
122 | } |
123 | close($fh); |
124 | printf("created file: %s\n", 'tags-index'); |
125 | |
126 | # overview pages for tags |
127 | foreach my $tag (sort keys %tag_overview) |
128 | { |
129 | my $_tag = $tag; |
130 | $_tag =~ s/\W/-/g; |
131 | open($fh, '>', catfile($output_path, 'tags-' . $_tag . '.html-inc')); |
132 | binmode($fh, ":utf8"); |
133 | print($fh '<div class="blog"><h1>Results for tag: ' . $tag . '</h1>' |
134 | . join('<hr />', @{$tag_overview{$tag}}) |
135 | . '</div>'); |
136 | close($fh); |
137 | printf("created file: %s\n", 'tags-' . $_tag . '.html-inc'); |
138 | } |
139 | |