#!/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'