Hallo,
ich baue gerade an einem Perl-Script, welches sich via LWP::UserAgent an die Bank-Seite klemmt und eine Übersicht über den aktuellen Kontostand liefert. Das klappt auch ganz gut, in ca. 8 Sekunden bin ich immer im Bilde. Allerdings macht das Script schön Gebrauch von diversen CPAN-Modulen, SSL und Co. Das bedeutet, es ist nicht so ohne weiteres auf diversen anderen Installationen zum Laufen zu bewegen ohne massive Installationsarbeit. Ich suche nun interessierte Mitstreiter, die Lust haben, diese Installation etwas zu entwirren und/oder auf ihrem eigenem Enviroment zum Laufen bekommen. Vielleicht wird dann auch mal was Nützliches für die Welt draus. Wäre doch prima - mein erstes OpenSource-Kunstwerk ;-)
Das gute Stück findet ihr unter http://www.pummel.de/advance, bei Fragen immer her damit.
Mit freundlichen Grüßen
Jens Puruckherr
P.S: Ich bin selber kein Perl-Guru, also seht mir schlimme Fehler bitte nach.
mit dem automatischen abholen von kontoauszügen habe ich mich auch mal beschäftigt und nur einen kleinen hack erstellt leider ist's momentan dabei geblieben, geplant ist aber ein modul zur synchronisierung mit beliebiger buchhaltungssoftware.
noch was nettes zum lesen / schreiben von konfigurationen, es wird ein perl objekt serialisiert/gelesen d.h. es sind strukturierte daten möglich:
== config files ==================================================
my $CONF = &load_data("file.conf");
$CONF->{'attr'}='value'; $CONF->{'hash'}->{'a'}='b'; . . &safe_data("file.conf",$CONF);
sub load_data { my ($rcfile) = @_; use vars qw($data); if (-r "$rcfile") { debug_msg("lade daten $rcfile"); do "$rcfile"; } else { $data = {}; } return $data; }
sub safe_data { my ($rcfile,$data) = @_; debug_msg("schreibe daten $rcfile"); $Data::Dumper::Purity = 1; $Data::Dumper::Deepcopy = 1; $Data::Dumper::Indent = 1; if (open(FD, ">$rcfile")) { print FD Data::Dumper->Dumpxs([$data], ['data'])."\n1;\n"; close FD; } else { error_msg("fehler beim schreiben $rcfile!"); } } ==================================================================
nun das konto-hack:
== getauszug ===================================================== #!/usr/bin/perl
use Net::SSLeay;
($_,$response,%headers) = Net::SSLeay::post_https('ww2.homebanking-sachsen.de', 443, "/cgi/login.cgi/Spk_Leipzig", '', Net::SSLeay::make_form('KtoNr'=>'xxxxxxxxxx','PIN'=>'yyyyy'));
($url)=/action="/cgi/kontostand.cgi/(.*)"/i; print "$url\n\n";
($_,$response,%headers) = Net::SSLeay::post_https('ww2.homebanking-sachsen.de', 443, "/cgi/kontostand.cgi/$url", '', Net::SSLeay::make_form('FILE'=>'kontostand.html'));
($_,$response,%headers) = Net::SSLeay::post_https('ww2.homebanking-sachsen.de', 443, "/cgi/kontoumsaetzewahl.cgi/$url",'', Net::SSLeay::make_form());
($_,$response,%headers) = Net::SSLeay::post_https('ww2.homebanking-sachsen.de', 443, "/cgi/kontoumsaetze.cgi/$url", '', Net::SSLeay::make_form("AnfangsDatum"=>"01.01.2002", "EndDatum"=>"31.12.2002","FUNKTION"=>"3"));
(@ret) = /(<tr>.*?</tr>)/isg;
($_,$response,%headers) = Net::SSLeay::post_https('ww2.homebanking-sachsen.de', 443, "/cgi/beenden.cgi/$url", '', Net::SSLeay::make_form());
open FH, ">umsaetze".time.".html"; print FH "<html><body><table>\n\n"; for ($i=0; $i < $#ret; $i++) { print FH $ret[$i]."\n"; } print FH "\n\n</table></body></html>\n\n"; close FH; ==================================================================
Am Dienstag, 16. Juli 2002 23:47 schrieb Thomas Baum:
mit dem automatischen abholen von kontoauszügen habe ich mich auch mal beschäftigt und nur einen kleinen hack erstellt leider ist's momentan dabei geblieben, geplant ist aber ein modul zur synchronisierung mit beliebiger buchhaltungssoftware.
Soweit wollt ich nicht gehen, nur das langweiloge Ein-/Ausloggen via Webinterface umgehen.
noch was nettes zum lesen / schreiben von konfigurationen, es wird ein perl objekt serialisiert/gelesen d.h. es sind strukturierte daten möglich:
Oha, es wird immer tiefer und breiter ;-)
sub load_data { my ($rcfile) = @_; use vars qw($data); if (-r "$rcfile") { debug_msg("lade daten $rcfile"); do "$rcfile";
^^^^^^^^^^^^^ was heisst das?
Ansonsten: Die Spasskasse hat zum Glück ein einfacheres Webintrerface gebaut, glaube ich mich zu erinnern. Die Advance-Bank kommt schon mit Frames, Redirects und Cookies daher. Ich habe die Möglichkeiten vin Net::SSLay nicht im einzelnen untersucht, das mir der LWP::UserAgent vorher in die Hände fiel ;-) Das HTML::TableExtract Modulöö scheint mir auch recht brauchbar um das chaotische HTML auf der Seite mit den Umsätzen aufzudröseln (kommt in Version 0.3). Da ist sogut wie jede optische Tabellenzelle eine einzelne Tabelle. huhuhu. Ich kann ja mal den Code posten - aber den will wohl keiner sehen.
OK. ich schaue mir den Net::SSLeay mal genauer an, vielleicht kann ich mir dadurch ein anderes Modul sparen, da ich glaube, dieses wird eh vom LWP::UserAgent dynamisch aufgerufen.
Mit freundlichen Grüßen
Jens Puruckherr
Oha, es wird immer tiefer und breiter ;-)
sub load_data { my ($rcfile) = @_; use vars qw($data); if (-r "$rcfile") { debug_msg("lade daten $rcfile"); do "$rcfile";
^^^^^^^^^^^^^ was heisst das?
die konfig wird als perl-code gedumpt, und dann dort ausgeführt, sicher nicht 100% sicher, aber da gibt's ja noch unix-file-rechte und 'use strict', ich vergass : "use Data::Dumper;" sonst geht nix!
meiner meinung nach reichen zum extrahieren von html-stückchen eigentlich normale reg-exprs!
bye thomas
Hallo,
Am Donnerstag, 18. Juli 2002 15:00 schrieb Thomas Baum:
die konfig wird als perl-code gedumpt, und dann dort ausgeführt, sicher nicht 100% sicher, aber da gibt's ja noch unix-file-rechte und 'use strict', ich vergass : "use Data::Dumper;" sonst geht nix!
Oha, wieder was gelernt.
meiner meinung nach reichen zum extrahieren von html-stückchen eigentlich normale reg-exprs!
Ok, dann extrahier mir mal aus der 7. Tabelle in der 2. Ebene die Spalten 1,3,5,6 und 7. Oder so. Die Zeilen wo nix drin steht will ich aber nicht. Die Tabelle hat keine <th>-Tags und keinen Namen. Soll ich mal den html-code der Seite posten? Und: falls sich die Position der Tabelle mal verschieben sollte, brauche ich nur die Koordinaten anpassen. Ok, wenn dass Layout komplett umgestrickt wird ist's eh zu spät... Ich finde den TableExtract richtig gut, er hat mir einen Haufen Arbeit erspart.
Mit freundlichen Grüßen
Jens Puruckherr
lug-dd@mailman.schlittermann.de