#!/usr/bin/perl -w
use strict;
use LWP::Simple;
header();
my @now = gmtime();
my $year = $now[5]+1900;
foreach my $y (2006 .. $year) {
getyear($y);
}
footer();
sub getyear {
my $year = shift;
my $page =
get("http://doc.gold.ac.uk/mscac/cal/year.php?year_eventsDate=$year");
while ($page =~ m{
]*>\d+\s*]*>\s*((?: .*? \s*)+)}sgx
) {
my ($date, $stuff) = ($1, $2);
#print $stuff . "\n";
$date =~ s/\-//g;
while ($stuff =~ /(\d\d:\d\d)\s+-\s+(\d\d:\d\d)\s+([^<]+)/sg) {
my ($start, $stop, $detail) = ($1, $2, $3);
$start =~ s/://g;
$stop =~ s/://g;
$start =~ s/(\d\d\d\d).*/$1/;
$stop =~ s/(\d\d\d\d).*/$1/;
event($date, $start, $stop, $detail)
}
}
}
sub header {
print "BEGIN:VCALENDAR
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:mscac
X-WR-TIMEZONE:Europe/London
BEGIN:VTIMEZONE
TZID:Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19700329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
";
}
sub event {
my ($date, $start, $stop, $detail) = @_;
my $dtstart = "${date}T${start}";
my $dtstop = "${date}T${stop}";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
gmtime(time);
my $now = sprintf("%04d%02d%02dT%02d%02d%02dZ",
$year + 1900,
$mon + 1,
$mday,
$hour,
$min,
$sec
);
print "BEGIN:VEVENT
DTSTART;TZID=Europe/London:${dtstart}00
DTEND;TZID=Europe/London:${dtstop}00
DTSTAMP:$now
CREATED:$now
LAST-MODIFIED:$now
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:$detail
TRANSP:OPAQUE
END:VEVENT
";
}
sub footer {
print "END:VCALENDAR\n\n";
}
|