Open Source im professionellen Einsatz
Newsletter abonnieren
HEFTARCHIV | NEWS | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO

Partner-Links:
Shopping
Yatego Deutschlands größte Shoppingmall. 7000 Shops,
2.5 Mio Artikel. Alle Bestseller, Gutscheine und Liveshopping.

Firewall bei Mercateo kaufen.

Ein Preisvergleich bei Hardware lohnt sich.

Bei inkpool.de Laserdrucker und mehr bestellen.

Sie suchen günstige Laptops? Schauen Sie doch mal bei Preisvergleich.org, Preisvergleich.eu, Preisvergleich.ch und Preisvergleich.at vorbei.

Linux Jobs


user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2004  »  03  »  Datenrüssel  

RSS-Feed der aktuellen News von Linux-Magazin Online
Diesen Artikel drucken Diesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren

Ra ru rick, Barbatrick!

Wie in der Barbapapa-Serie kommt nun der Clou: Um aus dieser Session ein an die privaten Erfordernisse angepasstes Skript zu generieren, genügt der Befehl »script« in der Shell - schon spuckt die treue Seele ein Perl-Skript aus, das genau das reproduziert, was man bisher in Handarbeit eingegeben hat.

Listing 1 ist auf diese Weise entstanden. Es ist jedoch an ein paar Stellen angepasst: So gibt der Anwender nun das zu untersuchende Nummernschild auf der Kommandozeile mit »dmv Text« an. Zeile 12 bricht ab, falls kein Parameter angegeben ist. Der Konstruktor des »WWW::Mechanize«-Objekts betreibt den Browser-Simulator mit gesetzter »autocheck«-Option in einem Modus, der das Programm sofort abbricht, falls ein Fehler auftritt, er also beispielsweise eine Webseite nicht findet.

Listing 1:
»dmv«

01 #!/usr/bin/perl
02 ###########################################
03 # dmv -- Automate checking CA plates
04 # Mike Schilli, 2003 (m@perlmeister.com)
05 ###########################################
06 use strict;
07 use warnings;
08 
09 use WWW::Mechanize;
10 use WWW::Mechanize::FormFiller;
11 
12 die "usage: $0 XXXXXXX" unless
13                           defined $ARGV[0];
14 $ARGV[0] =~ s/s+//g;
15 my $agent = WWW::Mechanize->new(
16               autocheck => 1);
17 my $fi = WWW::Mechanize::FormFiller->new();
18 
19 $agent->get('http://www.dmv.ca.gov');
20 $agent->follow(qr(Personalized));
21 $agent->follow(
22      qr(order Special Interest));
23 $agent->form("personalized");
24 $agent->submit();
25 
26 $fi->add_filler('vehicletype' =>
27                 Fixed => 'AUTO' );
28 $fi->add_filler('leased' =>
29                 Fixed => 'N' );
30 $fi->add_filler('platetype' =>
31                 Fixed => 'R' );
32 $fi->add_filler('kidpic' =>
33                 Fixed => '' );
34 $fi->add_filler('Submit2' =>
35                 Fixed => '' );
36 $fi->fill_form($agent->current_form);
37 $agent->submit();
38 
39 for(0..6) {
40     $fi->add_filler("LicPltCharAry$_" =>
41          Fixed =>
42          $_ > length $ARGV[0] ?
43          "" : substr($ARGV[0], $_, 1));
44 }
45 
46 for(0..6) {
47     $fi->add_filler("HalfSpace$_" =>
48                     Fixed => '');
49 }
50 
51 $fi->add_filler('Submit2' => Fixed => '');
52 $fi->fill_form($agent->current_form);
53 
54 $agent->submit();
55 
56 if($agent->content() =~ /not available/) {
57     print "$ARGV[0]: not availablen";
58 } elsif($agent->content() =~
59                   /Complete Order Form/) {
60     print "$ARGV[0]: availablen";
61 } else {
62     print "Unexpected response",
63           $agent->content(), "n";
64 }

Zeile 19 dirigiert den Simulator zur Eingangsseite. Die »follow()«-Methode in Zeile 20 springt wegen des angegebenen regulären Ausdrucks auf einen Link, der den Text »Personalized« enthält. Zeile 21 führt einen weiteren, Regex-gesteuerten Sprung durch. Zeile 23 wählt das Formular mit dem Bezeichner »personalized« aus und die darauf folgende »submit()«-Methode bedient den Submit-Knopf des ansonsten leeren Formulars.

Das in Zeile 17 erzeugte »WWW::Mechanize::FormFiller«-Objekt übernimmt das Ausfüllen des nun erscheinenden Formulars. Die »add_filler()«-Methoden ab Zeile 26 spezifizieren jeweils den Namen eines Felds, das Eingabeverfahren und den Wert. Für hartkodierte Werte findet »Fixed« Anwendung, während »Interactive« den Form-Filler-Code dazu bringt, den Benutzer zur Laufzeit nach dem entsprechenden Wert zu fragen. Wenn der Form Filler weiß, woher er alle Werte für die Formularvariablen bekommt, kann\'s losgehen: Die »fill_ form«-Methode startet mit dem gegenwärtig bearbeiteten »HTML::Form«-Objekt des »WWW::Mechanize«-Agenten den Ausfüllvorgang.

Das Skript steuert die Eingangsseite des DMV an, wühlt sich geduldig durch alle Links und Formulare und trägt schließlich in der For-Schleife ab Zeile 39 die angegebene Zeichenkette in die Auswahlboxen ein. Enthält das gewünschte Nummernschild weniger als sieben Buchstaben, setzt die Logik ab Zeile 42 einfach leere Felder ein. Der Code in Zeile 54 schickt die Daten per SSL an den Server und der Agent nimmt die Ergebnisseite als HTML entgegen.

Es kann nur einen geben

Steht dort etwas wie »not available«, ist die Kombination entweder schon vergeben oder wegen anstößigen Inhalts nicht verfügbar und das Skript gibt eine entsprechende Kurzmeldung aus. Wurde das Kennzeichen genehmigt, erscheint ein Bestellformular, welches das Skript anhand der Zeichenkette »Complete Order Form« erkennt und daraufhin die Meldung » XXX: available« ausspuckt. Die Ausgabe »PERLMAN: not available« bestätigt, dass PERL MAN nun leider schon vergeben und wohl auf lange Sicht nicht verfügbar ist. (mwe)

Infos

[1] Listings zu diesem Artikel: [ftp://ftp.linux-magazin.de/pub/listings/magazin/2004/03/Perl]

[2] Website des kalifornischen Department of Motorvehicles für die Auswahl von personalisierten Kennzeichen: [http://www.dmv.ca.gov]

Der Autor

Michael Schilli arbeitet als Software-Engineer für AOL/Netscape in Mountain View, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) für Addison-Wesley geschrieben und ist unter [mschilli@perlmeister.com] zu erreichen. Seine Homepage ist [http://perlmeister.com].


Copyright © 2002 Linux New Media AG

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Diese Seite zu Mister Wong hinzuf�gen Webnews yigg it! Slashdot it! Twittern!
Ähnliche Artikel
Kleiner Lauschangriff Perlskript wartet für Anrufer auf eine freie Leitung
Browser-Turbo Mehr Dynamik für Webseiten dank Ajax
Angriff auf Pakete Weitere Paketdienste mit Datenlecks
Von Java zu Ajax Google Web Toolkit zum Erstellen dynamischer Webapplikationen
Holzauge, sei wachsam Nagios-Plugins im Eigenbau
Browser ferngesteuert Automatische Regressionstests mit Selenium
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)
 

Impressum |Datenschutzerklärung | © 2010Linux New Media AG
Partner-Sites
Deutschland: [LinuxUser] [EasyLinux] [Linux-Community] [Linux Technical Review] [Ubuntu User]
Europa: [EasyLinux Polen] [Linux Magazine Polen] [Linux Magazine Spanien]
International: [Linux Magazine International] [Linux Pro Magazine] [Ubuntu User] [Linux Magazine Brasilien] [EasyLinux Brasilien]