#!/usr/bin/perl -w ########################################################## # Ingo Strauch, 2000 (strauch@toots.physik.rwth-aachen.de) ########################################################## # # Dieses Programm fragt die Seite der aktuellen Fonds-Kurse # der DGZ Bank ab und mailt eine Uebersicht, sobald die # Kurse des Tages verfuegbar sind, bzw. stellt nach einer # waehlbaren Zeit die Arbeit ein. # ########################################################## # # Anpassen sollte man seinen Einstiegskurs ($myrate), die # angelegte Summe ($myamount) und den Namen des Fonds... # An einem Samstag oder Sonntag gibt's keine Aktualisierungen, # das Programm bricht dann sofort ab. # Am besten, man startet das Skript als Cronjob (da bietet sich # 16:00 an, der frueheste Zeitpunkt fuer Updates), danach # prueft es die Seite alle 5 Minuten, wenn die Tageskurse noch # nicht zur Verfuegung stehen. 42 Durchlaeufe a 5min entsprechen # dabei 3,5 Stunden, d.h. bis 20:00. Das kann man ja so ein- # stellen, wie man das gerne haette... # ########################################################## use LWP::UserAgent; $myrate=40.0; $myamount=1000; $i=0; &date(); if ($wday==0 or $wday==6) { $i=42; } #i.e. no new rates on saturday or sunday while ($i < 54) # i.e. 54*5min = 4.5h { &date(); @infos = &page_snippet('http://www.deka.de/servlet/aktKurse?typ=Alle&suchbegriff=EuropaBond'); my ($datum, $heute, $gestern) = @infos; if ( isvalid($datum) ) { &mail(@infos); last; } else { sleep (300); ++$i; } } ################################################## sub date { ################################################## ($dummy, $min, $hour, $day, $mon, $year, $wday, $dummy, $dummy) = localtime (time); if ($min < 10) { $min= '0'.$min; } if ($hour < 10) { $hour= '0'.$hour; } if ($day < 10) { $day= '0'.$day; } if (++$mon < 10) { $mon= '0'.$mon; } $year=$year+1900; $today = $day.'.'.$mon++.'.'.$year; } ################################################## sub isvalid { ################################################## my $datum = $_[0]; # return true if page is from today, false otherwise if ($today eq $datum) { return 1; } else { return 0; } } ################################################## sub mail { ################################################## my ($datum, $heute, $gestern) = @_; my $aend = ($heute-$gestern)/$gestern*100; my $ges = ($heute-$myrate)/$myrate*100; my $dm = $myamount*(1 + ($heute-$myrate)/$myrate); my $text = sprintf "Kurs des Deka EuropaBond TF Fonds vom %s\n\nHeute : %8.2f \t Gestern : %7.2f\nAenderung: %+8.2f%% \t Gesamt : %+7.2f%%\nIn DM : %8.2f \t Gewinn/Verlust: %+7.2f\n", $datum, $heute, $gestern, $aend, $ges, $dm, $dm-$myamount; open(PIPE, "| /usr/lib/sendmail -t") || die("Cannot connect to sendmail"); print PIPE "From: Fonds Spy \\n"; print PIPE "To: strauch\@toots.physik.rwth-aachen.de\n"; print PIPE "Subject: Deka Fond Update $datum $hour:$min\n\n"; print PIPE "$text\n.\n"; close(PIPE) || die "Sendmail failed"; } ################################################## sub page_snippet { ################################################## my ($url) = @_; my $rgx1 = 'Deka-EuropaBond TF'; my $rgx2 = 'Preise vom .{10}'; my @result; my $dummy; my $inhalt; my $kurse; my $heute; my $gestern; my $datum; my $req = HTTP::Request->new('GET', $url); my $resp = LWP::UserAgent->new->request($req); if($resp->is_error()) { return [$resp->code, $resp->message]; } ($dummy, $inhalt ) = split ( /$rgx1/, $resp->content()); ($dummy, $dummy, $kurse, $dummy) = split ( /\<\/b\>/, $inhalt, 4); ($heute, $gestern) = split (/\/, $kurse,2); $heute =~ s/ //g; $gestern =~ s/ //g; $heute =~ s/,/./g; $gestern =~ s/,/./g; $resp->content() =~ /$rgx2/si; ($dummy, $dummy, $datum) = split (/ /, $&,3); push @result, $datum,$heute,$gestern; return @result; }