#!/usr/bin/perl
#!perl
#
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# Generate Google SiteMaps
#
##############################
# Libraries.
use strict;
use lib qw(.);
use Yuki::YukiWikiDB;
use utf8;
use Encode ();
use Encode::Guess;
use HTTP::Lite;
use Fcntl;
#
## 変数
#
my $url = 'http://ponytail.jpn.org/lightnovel/';
my $sitemap = 'sitemap.xml';
my $modifier_dir_data = '.';
my $dataname = "$modifier_dir_data/wiki"; # データ本体
my $infoname = "$modifier_dir_data/info"; # 更新日時やアクセス数などの情報
my $info_ConflictChecker = 'ConflictChecker';
my $modifier_rss_timezone = '+09:00';
my %database;
my %infobase;
################################################
&main;
exit(0);
################################################
sub main {
&open_db;
&print_sitemaps_header;
foreach my $page (keys %database){
my $encode_page = &encode($page);
my $lastmod = &get_info($page, $info_ConflictChecker);
my $dc_date = &mod_to_dcdate($lastmod);
&print_sitemaps_url($encode_page,$dc_date) if($lastmod);
}
&print_sitemaps_footer;
&close_db;
}
sub print_sitemaps_url {
my ($encode_page,$dc_date) = @_;
print << "EOD"
$url?$encode_page
$dc_date
EOD
}
sub print_sitemaps_footer {
print << "EOL"
EOL
}
sub print_sitemaps_header {
print << "EOL"
EOL
}
sub mod_to_dcdate {
my ($lastmod) = @_;
my ($year, $mon, $day, $time);
$lastmod =~ /... (...)\s*(\d*) (\d\d:\d\d:\d\d) (\d\d\d\d)/;
$year = $4;
$mon = &month_to_digit($1);
$day = $2;
$time = $3;
$day = "0$day" if $day < 10;
return "$year-$mon-$day";
# return "$year-$mon-$day" . 'T' . "$time$modifier_rss_timezone";
}
sub open_db {
tie(%database, "Yuki::YukiWikiDB", $dataname) or print "(tie Yuki::YukiWikiDB_Backup) $dataname\n";
tie(%infobase, "Yuki::YukiWikiDB", $infoname) or print "(tie Yuki::YukiWikiDB) $infoname\n";
}
sub close_db {
untie(%database);
untie(%infobase);
}
sub encode {
my ($encoded) = @_;
$encoded =~ s/(\W)/'%' . unpack('H2', $1)/eg;
return $encoded;
}
sub get_info {
my ($page, $key) = @_;
my %info = map { split(/=/, $_, 2) } split(/\n/, $infobase{$page});
return $info{$key};
}
sub month_to_digit{
my ($mon) = @_;
my %month = ("jan" => "01"
,"feb" => "02"
,"mar" => "03"
,"apr" => "04"
,"may" => "05"
,"jun" => "06"
,"jul" => "07"
,"aug" => "08"
,"sep" => "09"
,"oct" => "10"
,"nov" => "11"
,"dec" => "12"
);
while(my ($key, $tgt) = each(%month)){
$mon =~ s/(.*)$key(.*)/$tgt/i;
}
return $mon;
}