Du befindest dich hier: FSI Informatik » Informationen » linuxkurs » Aufgabensammlung » Mensaskript   (Übersicht)

Mensaskript

Schreiben wir nun ein etwas praktischeres Script:

#!/usr/bin/perl

use v5.12;
use strict;
use warnings;
use utf8;

use open qw( :std :locale );

use HTML::TreeBuilder ();
use WWW::Mechanize ();

my $URL = 'http://www.werkswelt.de/?id=sued';

my @color = ("\e[31m","\e[33m","\e[32m");
my $color_reset = "\e[m";

sub get_food {
    my $idx = shift;
    my ($html) = @_;

    foreach my $line (split /\n/, $html) {
        next unless $line =~ /^Speiseplan <br>/;

        $line =~ m{<h4>(.+?)</h4>} or die;
        say "$color[$idx]$1$color_reset";

        while ($line =~ m{(Essen \d+)</br>(.+?)</br>}g) {
            my $food = $1;
            my $name = $2;

            $name =~ s{<sup>.+?</sup>}{}g;
            $name =~ s{\([\d\w,]+\)}{}g;
            $name =~ s{\s+}{ }g;
            say "  $color[$idx]$food:$color_reset $name";
        }
    }
}

my $mech = WWW::Mechanize->new;

$mech->get($URL);
get_food(0,$mech->content);

for (my $i = 0; $i < 2; $i++) {
    my $next = $mech->current_form->find_input(undef, 'submit', 3);
    $mech->click_button(input => $next);
    get_food($i+1, $mech->content);
}

Dieses Perl-Skript lädt den Mensaspeiseplan aus dem Internet und filtert mit einem regulären Ausdruck (wie grep!) den aktuellen Plan heraus.

Sinnvollerweise sollte das Script als mensa im Verzeichnis ~/bin gespeichert werden und so wie oben ausführbar gemacht werden (Rechte!). Nun kannst du jeden Tag mittels mensa den Mensa-Speiseplan anschauen.