#!/usr/bin/perl
#use Date::Format;
use warnings;
use strict;
use vars
qw(@DoW @MoY %MoY);
@DoW = qw(Sun Mon Tue Wed Thu Fri Sat
);
@MoY = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
);
@MoY{@MoY} = (1..12);
my %GMT_ZONE = (GMT => 1, UTC => 1, UT => 1, Z => 1);
my $wims_ref='http://127.0.0.1/wims';
my $file='' ;
my ($out, $modif, $text);
push (@ARGV,split(' ', $ENV{'wims_exec_parm'})) if ($ENV{'wims_exec_parm'}) ;
while ($_ = shift (@ARGV))
{
last if (!/^--/);
if (/^--wims=(.*)$/) { $wims_ref = $1; }
elsif (/^--file=(.*)$/) { $file = $1 ; }
elsif (/^--out=(.*)$/) { $out = $1 . "/" ; }
elsif (/^--type=(.*)$/) { $modif = $1 ; }
} ;
$wims_ref =~ s,/wims
.cgi
,, ;
my $head= "<\?xml version=\"1.0\" encoding=\"ISO-8859-1\"\?>
<rss version=\"2.0\">
<channel>
<title>WIMS</title>
<link>$wims_ref</link>
<description>NEWS</description>
\n"
;
my $tail="</channel></rss>";
open(IN
, "$file.$modif") or die $file ;
my @lignes = <IN>;
my ($cnt, $used)= (1,'') ;
my @ta;
my $date= convdate($l[0]) ;
next if !($l[1]) ;
my @ta=split(" ", $l[1]) ;
next if !($l[1]) || ($used =~ /$l[1]/) || ($cnt > 100) ;
$cnt ++ ;
$used .= " " . $l[1] ;
$text .=
"<item>
<title>$l[1]</title>
<link>$wims_ref/wims.cgi?module=$ta[0]</link>
<guid isPermaLink=\"true\">$wims_ref/wims.cgi?module=$ta[0]</guid>
<description>$ta[0] version $ta[1]</description>
<pubDate>$date</pubDate>
</item>\n" ;
}
out("$out$modif.xml" , $head . $text . $tail) ;
sub convdate { my ($d)= @_ ;
$d =~ s/(\d{4,4})(\d{2,2})(\d{2,2})/$1-$2-$3 03:00:00/ ;
time2str(str2time($d));
}
sub out { my ($bloc, $text) = @_ ;
open (OUT
, ">$bloc") || die $bloc ;
}
########################### from HTML::date.pm
sub time2str (;$)
{
my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($time);
sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
$DoW[$wday],
$mday, $MoY[$mon], $year+1900,
$hour, $min, $sec);
}
sub str2time ($;$)
{
# fast exit for strictly conforming string
if ($str =~ /^[SMTWF][a-z][a-z], (\d\d) ([JFMAJSOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$/) {
my $t = Time::Local::timegm($6, $5, $4, $1, $MoY{$2}-1, $3-1900);
};
}
my @d = parse_date($str);
$d[0] -= 1900; # year
$d[1]--; # month
};
}
}
my $offset = 0;
# offset already zero
}
elsif ($tz =~ /^([-+])?(\d\d?):?(\d\d)?$/) {
$offset = 3600 * $2;
$offset += 60 * $3 if $3;
$offset *= -1 if $1 && $1 eq '-';
}
else {
$offset = Time::Zone::tz_offset($tz);
}
$t < 0 ? undef : $t - $offset;
};
}
sub parse_date ($)
{
# More lax parsing below
s/^\s+//; # kill leading space
s/^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*//i; # Useless weekday
my($day, $mon, $yr, $hr, $min, $sec, $tz, $ampm);
# Then we are able to check for most of the formats with this regexp
(($day,$mon,$yr,$hr,$min,$sec,$tz) =
/^
(\d\d?) # day
(\w+) # month
(\d+) # year
(?:
(?:\
s+|:) # separator before clock
(\d\d?):(\d\d) # hour:min
(?::(\d\d))? # optional seconds
)? # optional clock
([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone
(?:\(\w+\))? # ASCII representation of timezone in parens.
/x)
||
# Try the ctime and asctime format
(($mon, $day, $hr, $min, $sec, $tz, $yr) =
/^
(\w{1,3}) # month
(\d\d?) # day
(\d\d?):(\d\d) # hour:min
(?::(\d\d))? # optional seconds
(?:([A
-Za
-z
]+)\
s+)? # optional timezone
(\d+) # year
\
s*$
# allow trailing whitespace
/x)
||
# Then the Unix 'ls -l' date format
(($mon, $day, $yr, $hr, $min, $sec) =
/^
(\w{3}) # month
(\d\d?) # day
(?:
(\d\d\d\d) | # year
(\d{1,2}):(\d{2}) # hour:min
(?::(\d\d))? # optional seconds
)
/x)
||
# ISO 8601 format '1996-02-29 12:00:00 -0100' and variants
(($yr, $mon, $day, $hr, $min, $sec, $tz) =
/^
(\d{4}) # year
[-\/]?
(\d\d?) # numerical month
[-\/]?
(\d\d?) # day
(?:
(?:\
s+|[-:Tt
]) # separator before clock
(\d\d?):?(\d\d) # hour:min
(?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional)
)? # optional clock
([-+]?\d\d?:?(:?\d\d)?
|Z|z)? # timezone (Z is "zero meridian", i.e. GMT)
/x)
||
# Windows 'dir' 11-12-96 03:52PM
(($mon, $day, $yr, $hr, $min, $ampm) =
/^
(\d{2}) # numerical month
-
(\d{2}) # day
-
(\d{2}) # year
(\d\d?):(\d\d)([APap][Mm]) # hour:min AM or PM
/x)
||
# Translate month name to number
$mon = $MoY{$mon} ||
$MoY{"\u\L$mon"} ||
($mon >= 1 && $mon <= 12 && int($mon)) ||
# If the year is missing, we assume first date before the current,
# because of the formats we support such dates are mostly present
# on "ls -l" listings.
my $cur_mon;
$yr += 1900;
$cur_mon++;
$yr-- if $mon > $cur_mon;
}
# Find "obvious" year
my $m = $cur_yr % 100;
my $tmp = $yr;
$yr += $cur_yr - $m;
$m -= $tmp;
$yr += ($m > 0) ? 100 : -100
}
# Make sure clock elements are defined
# Compensate for AM/PM
if ($ampm) {
$hr = 0 if $hr == 12 && $ampm eq 'AM';
$hr += 12 if $ampm eq 'PM' && $hr != 12;
}
return($yr, $mon, $day, $hr, $min, $sec, $tz)
$tz = "Z" if $tz =~ /^(GMT|UTC?|[-+]?0+)$/;
} else {
$tz = "";
}
$yr, $mon, $day, $hr, $min, $sec, $tz);
}