#!/usr/bin/perl use strict; use warnings; use CGI qw( param header ); use LWP::UserAgent (); use Data::Dumper qw( Dumper ); use XML::Simple(); #################### # LWP::UserAgent my $ua = LWP::UserAgent->new; $ua->timeout(10); $ua->env_proxy; ########## #################### # XML::Simple my $xmls = new XML::Simple( AttrIndent => 0, ContentKey => 'content', ForceArray => 1, KeepRoot => 1, NoAttr => 0, NoEscape => 1, NoIndent => 0, NoSort => 1, NormaliseSpace => 0, NSExpand => 1, NumericEscape => 0, RootName => 'xml', SuppressEmpty => undef, XMLDecl => '', ); ########## #################### # localtime. my @lt = localtime; $lt[5]+=1900; $lt[4]+=1; ########## #################### # Verfügbare Klassen. if( param('mode') eq 'klassen' ) { my $klassen = {}; my $xml_hash = {'mmbbs' => [{'xmlns' => 'uri:de.dev5-media.mmbbs.stundenplan','klassen'=>[{'klasse'=>[]}]}]}; #################### # Lade Navigationsleiste vom Stundenplanprogramm. my $response = $ua->get('http://www.bbs-h.de/plan0910/klassen/frames/navbar.htm'); my $navbar_html = $response->decoded_content; ########## #################### # Sind Klassen im Quelltext eingetragen? if( $navbar_html =~ m'var classes = \[([^\]]*)\];' ) { my $classes_html = $1; # Klassen als JavaScript Code. my $i = 0; # Zählindex für Klassen-IDs. #################### # Für jede Klasse... foreach my $class_html (split ',', $classes_html) { if( $class_html =~ m'"([^"]+)"' ) { $klassen->{"$1"} = int($i); } $i++; } ########## } else { print header( -type => 'text/plain', -status => '500 Internal Server Error' ); print 'Klassen konnten nicht ermittelt werden.'; exit 1; } ########## #################### # Daten aufbereiten. foreach my $klasse (sort keys %$klassen) { my $tmp = {}; $tmp->{'id'} = "$klassen->{$klasse}"; $tmp->{'content'} = "$klasse"; # Für alle Klassen, die es gitb... if( $klasse !~ m/^CCNA|DR\w+|MB|BSFHR$/ ) { $tmp->{'email'} = lc("$klasse").'@mmbbs.eduplaza.de'; } push @{ $xml_hash->{'mmbbs'}->[0]->{'klassen'}->[0]->{'klasse'} }, $tmp; } ########## # print header('text/plain'), Dumper($xml_hash); #################### # Ergebnis ausgeben und Ende. print header( -type => 'text/xml', -status => '200 OK' ); print $xmls->XMLout($xml_hash); exit 0; ########## } ########## #################### # Verfügbare Kalenderwochen. elsif( param('mode') eq 'wochen' ) { my $wochen = {}; my $xml_hash = {'mmbbs' => [{'xmlns' => 'uri:de.dev5-media.mmbbs.stundenplan'}]}; #################### # Lade Navigationsleiste vom Stundenplanprogramm. my $response = $ua->get('http://www.bbs-h.de/plan0910/klassen/frames/navbar.htm'); my $navbar_html = $response->decoded_content; ########## #################### # Sind Wochen im Quelltext eingetragen? if( $navbar_html =~ m~~s ) { last unless $_; $_ =~ m~^(.*)~s } my $weeks_html = $1; $weeks_html =~ s/\s+$//g; $weeks_html =~ s/[\r\n]+$/\n/g; ########## #################### # Für jede Woche... foreach my $week_html (split /\n/, $weeks_html) { if( $week_html =~ m'