From 771c724425f346e5131cc8ed552b87aa0ef03588 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Tue, 16 Aug 2005 07:20:23 +0000 Subject: [PATCH] Added XML output --- perl/sct6 | 43 ++++++++++++++++++++++++++++++++---------- perl/sctweb | 54 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 74 insertions(+), 23 deletions(-) diff --git a/perl/sct6 b/perl/sct6 index 9178a71..dc5aad2 100755 --- a/perl/sct6 +++ b/perl/sct6 @@ -7,11 +7,13 @@ # You'll need to change the url below if you go anywhere but TAMUK. use strict; -use LWP::UserAgent; -use HTML::TableExtract; use Date::Calc::Object qw(Day_of_Week Decode_Day_of_Week Decode_Month Week_of_Year Monday_of_Week Day_of_Week_Abbreviation Delta_Days Add_Delta_Days Nth_Weekday_of_Month_Year Gmtime Mktime); use Date::Calendar::Profiles qw($Profiles); use Date::Calendar::Year; +use HTML::TableExtract; +use LWP::UserAgent; +use IO::File; +use XML::Writer; use vars qw($ua %opts %faculty); my ($response); @@ -269,7 +271,7 @@ sub get_schedule { $end =~ s/ ?[AP]M//; $row->[4] =~ s/([A-Za-z]{3,9})/(Decode_Month($1)<10?"0":"").Decode_Month($1)/eg; $row->[4] =~ s/(\d\d?) (\d\d), (\d\d\d\d)/$3$1$2/g; - $row->[4] =~ s/ - /\n/; + $row->[4] =~ s/ - /-/; $row->[3] =~ s/(ON|MAIN) CAMPUS\n|Palo Alto Building \d* //ig; $row->[3] =~ s/\n/ /g; push @schedule, { @@ -277,16 +279,11 @@ sub get_schedule { title => $title, instructor => $row->[6], days => $row->[2], - 'time' => $row->[1], + #'time' => $row->[1], begin => $begin, end => $end || undef, duration => $row->[4], location => $row->[3], - #session => $row->[1], - #credits => $row->[3], - #callnumber => $row->[4], - #gradetype => $row->[5], - #message => $row->[10], }; } } @@ -482,6 +479,29 @@ sub do_vcalendar_schedule { print "END:VCALENDAR\r\n"; } +sub do_xml_schedule { + my $file = shift if (defined $_[0] and $_[0] !~ /^\d/); + my ($output, $writer); + if($file) { + $output = new IO::File(">$file"); + $writer = new XML::Writer(OUTPUT => $output, DATA_MODE => 1); + } else { + $writer = new XML::Writer(DATA_MODE => 1); + } + my @schedule = get_schedule(@_); + $writer->startTag("schedule"); + foreach my $class (@schedule) { + $writer->startTag("class"); + foreach my $key (sort keys %$class) { + $writer->dataElement($key, $class->{$key}); + } + $writer->endTag("class"); + } + $writer->endTag("schedule"); + $writer->end(); + close $output if $file; +} + sub do_html_schedule { my @showheaders = ("Section ID/Title", "Instructor", "Days", "Time", "Duration", "Location"); my $shade = "dark"; @@ -492,6 +512,7 @@ sub do_html_schedule { foreach my $row (@schedule) { map { s/\n/
/g; $_} %$row; $row->{'time'} =~ s/-/-/; + $row->{'duration'} =~ s/-/\n/g; $row->{'duration'} =~ s/\d\d(\d\d)(\d\d)(\d\d)/$2-$3-$1/g; print ''; $shade = ($shade eq "dark"?"light":"dark"); @@ -508,7 +529,7 @@ sub do_html_schedule { print "" . $row->{'instructor'} . ""; #} print "" . $row->{'days'} . ""; - print "" . $row->{'time'} . ""; + print "" . $row->{'begin'}."-".$row->{'end'} . ""; print "" . $row->{'duration'} . ""; print "" . $row->{'location'} . ""; print "\n"; @@ -587,6 +608,8 @@ if ($arg eq "-s") { do_csv_schedule(@ARGV); } elsif ($arg eq "-v") { do_vcalendar_schedule(@ARGV); +} elsif ($arg eq "-x") { + do_xml_schedule(@ARGV); } elsif ($arg eq "-g") { die "Grade support currently broken.\n"; do_html_grades(@ARGV); diff --git a/perl/sctweb b/perl/sctweb index a60f0a2..8f514bb 100755 --- a/perl/sctweb +++ b/perl/sctweb @@ -13,6 +13,8 @@ use HTML::TableExtract; use Date::Calc::Object qw(Day_of_Week Decode_Day_of_Week Week_of_Year Monday_of_Week Day_of_Week_Abbreviation Delta_Days Add_Delta_Days Nth_Weekday_of_Month_Year Gmtime Mktime); use Date::Calendar::Profiles qw($Profiles); use Date::Calendar::Year; +use IO::File; +use XML::Writer; use vars qw($ua %opts %faculty); my ($response); @@ -275,18 +277,18 @@ sub get_schedule { push @schedule, { id => $classid, title => $row->[0], - session => $row->[1], + #session => $row->[1], instructor => $row->[2], credits => $row->[3], - callnumber => $row->[4], - gradetype => $row->[5], + crn => $row->[4], + #gradetype => $row->[5], days => $row->[6], - 'time' => $row->[7], + #'time' => $row->[7], begin => $begin, end => $end || undef, duration => $row->[8], location => $row->[9], - message => $row->[10], + #message => $row->[10], }; } } @@ -314,24 +316,24 @@ sub get_schedule { $row->[2] =~ s/(.*\S)\s*//; $session = $1; $row->[2] =~ s/(\d\d)-(\d\d)-(\d\d)/20$3$1$2/g; - $row->[2] =~ s/ *to */\n/g; + $row->[2] =~ s/ *to */-/g; $row->[3] = capitalize($row->[3]); $row->[3] =~ s/([A-Z]r?)$/$1./; push @schedule, { id => $classid, title => $row->[0], - session => $session, + #session => $session, instructor => $row->[3], credits => $row->[4], - callnumber => $row->[5], - gradetype => $row->[6], + crn => $row->[5], + #gradetype => $row->[6], days => $days, - 'time' => $times, + #'time' => $times, begin => $begin, end => $end || undef, duration => $row->[2], location => $row->[1], - message => $row->[7], + #message => $row->[7], }; } } @@ -527,6 +529,29 @@ sub do_vcalendar_schedule { print "END:VCALENDAR\r\n"; } +sub do_xml_schedule { + my $file = shift if (defined $_[0] and $_[0] !~ /^\d/); + my ($output, $writer); + if($file) { + $output = new IO::File(">$file"); + $writer = new XML::Writer(OUTPUT => $output, DATA_MODE => 1); + } else { + $writer = new XML::Writer(DATA_MODE => 1); + } + my @schedule = get_schedule(@_); + $writer->startTag("schedule"); + foreach my $class (@schedule) { + $writer->startTag("class"); + foreach my $key (sort keys %$class) { + $writer->dataElement($key, $class->{$key}); + } + $writer->endTag("class"); + } + $writer->endTag("schedule"); + $writer->end(); + close $output if $file; +} + sub do_html_schedule { my @showheaders = ("Section ID/Title", "Instructor", "Days", "Time", "Duration", "Location"); my $shade = "dark"; @@ -536,7 +561,8 @@ sub do_html_schedule { print "\n"; foreach my $row (@schedule) { map { s/\n/
/g; $_} %$row; - $row->{'time'} =~ s/-/-/; + #$row->{'time'} =~ s/-/-/; + $row->{'duration'} =~ s/-/
/; $row->{'duration'} =~ s/\d\d(\d\d)(\d\d)(\d\d)/$2-$3-$1/g; print ''; $shade = ($shade eq "dark"?"light":"dark"); @@ -553,7 +579,7 @@ sub do_html_schedule { print "" . $row->{'instructor'} . ""; #} print "" . $row->{'days'} . ""; - print "" . $row->{'time'} . ""; + print "" . $row->{'begin'}."-".$row->{'end'} . ""; print "" . $row->{'duration'} . ""; print "" . $row->{'location'} . ""; print "\n"; @@ -650,6 +676,8 @@ if ($arg eq "-s") { do_csv_schedule(@ARGV); } elsif ($arg eq "-v") { do_vcalendar_schedule(@ARGV); +} elsif ($arg eq "-x") { + do_xml_schedule(@ARGV); } elsif ($arg eq "-g") { do_html_grades(@ARGV); } elsif ($arg eq "-t") { -- 2.30.2