menu.jpg  ::  Home ::  Computing ::  Downloads ::  Scooter ::  Links ::  Music ::  Nonsense ::  Mail :: 

Eines Tages hatte ich keine Lust mehr, auf n-tv die Teletext-Tafeln rauf und runter zu zappen, um mir die aktuellen Kurswerte meiner Aktien zu besorgen. Der Sinn stand mir auch nicht danach, mit meinem Netscape ins WWW zu gehen und dort wild mit der Maus klickend Formulare eines Webservers auszufüllen. Da ich an dem Tag auch zufällig krank geschrieben war, habe ich mir mit dem Gespann Linux/Perl die folgende kostenlose und tadellos funktionierende Lösung gebastelt:

Das Skipt prüft zunächst, ob bei Aufruf eine PPP-Verbindung besteht und beendet sich ggfs wieder. Danach lässt es für jedes im Hash genannte Wertpapier einen Request an den Server www.finance.yahoo los, der dann um diversen HTML-Schrott bereinigt in eine zu definierende lokale HTML-Datei eingelesen wird. Diese wird wiederum nach Einlesen aller Kurse von lynx oder w3m angezeigt. Beim nächsten Aufruf wird die lokale HTML-Datei vom Vortag überschrieben.

Diese Lösung liesse sich leicht auf entsprechende andere Server, die Aktienkurse vorhalten, umbiegen.

Dieses Skript kann man - auch ohne grosse Perl-Kenntnisse - leicht auf seine individuellen Gegebenheiten anpassen. Voraussetzungen:

Dieses Skript kannst Du Dir von meiner Download-Site runterladen oder Dir den folgenden Quellcode per Copy'n'Paste aneignen.

--- schnipp ---

   #!/usr/bin/perl
   #
   # Dieses Skript laedt fuer meinen derzeitigen Aktienbestand die einzelnen
   # Websites von "http://de.finance.yahoo.com" temporaer herunter und legt
   # die massgeblichen Daten in einer "$local_file" ab.
   # Die Wertpapier-Kennummern (mit durch Punkt getrennte Kurzbezeichnung des
   # Handelsortes) sowie Kurzbezeichnungen der jeweiligen Aktien befinden sich
   # im Hash "%wp".
   # Sofern ein Textmodus-Webbrowser installiert ist, zeigt dieser nach
   # erfolgter Uebertragung die "$local_file" an.
   #
   # Author: Martin Bock <mbock@bigfoot.de>
   # Date:   18-Jun-2000
   
   # Zu ladende Module
   #
   use LWP::Simple;
   
   # Globale Variablen
   #
   $local_file = "$ENV{\"HOME\"}/Daten/Finanzen/Yahoo-Stocks.html";
   $tmp_file = "/tmp/Yahoo-temp.html";
   $pid_file = "/var/run/ppp0.pid";
   $datum = localtime();
   
   $url1 = "http://de.finance.yahoo.com/q?s=";
   $url2 = "&d=t&o=t";
   
   %wp = qw(
            amd            863186.F
            bcopper        867948.MU
            corel          878009.F
            mips           915255.F
            oracle         871460.F
            redhat         923989.F
            rwe            703700.F
            sgi            872981.F
            sun            871111.F
            va             929398.F
            );
   
   # Eine vollkommen nutzlose Message
   #
   print "getstocks * (C) Martin Bock <mbock\@bigfoot.de> * 18-Jun-2000\n\n";
   
   # Abfragen, ob online, ansonsten terminieren
   #
   if (!-e "$pid_file") {
       print "Du musst erst eine PPP-Verbindung herstellen - breche ab...\n";
       exit 1;
   }
   
   # Ggfs vorhandene $local_file und $tmp_file loeschen
   #
   foreach $i ("$tmp_file", "$local_file") {
       if (-e "$i") {
           unlink $i;
       }
   }
   
   # $local_file als HTML-File vorbereiten
   #
   open (LOCAL, ">>$local_file") ||
       die "Kann $local_file nicht oeffnen";
   
   print LOCAL "<html>\n<head>\n";
   print LOCAL "<title>Yahoo-Stocks vom $datum</title>\n";
   print LOCAL "</head>\n<body>\n<h1>Yahoo-Stocks vom $datum</h1>";
   print LOCAL "\n<hr><br>";
   
   close(LOCAL) ||
       die "Kann $local_file nicht schliessen: $!";
   
   # URL zusammenbasteln, an Yahoo losschicken und deren Server-Request
   # ueber $tmp_file(s) in $local_file einlesen
   #
   while (($wpname,$wpnr) = each(%wp)) {
       $url = "$url1$wpnr$url2";
   
       $result = get "$url";
   
       open (TMP, ">>$tmp_file") ||
           die "Kann $tmp_file nicht anlegen: $!";
       print TMP "$result\n";
       close(TMP) ||
           die "Kann $tmp_file nicht schliessen: $!";
   
       print "Habe $wpname eingelesen...\n";
   
       open (TMP, "$tmp_file") ||
           die "Kann $tmp_file nicht oeffnen: $!";
       open (LOCAL, ">>$local_file") ||
           die "Kann $local_file nicht oeffnen: $!";
   
       print LOCAL "<pre>\n"; # Tag eingeben, da Ergebnis huebscher
       while (<TMP>) {
           print LOCAL "$_\n" if /Mehr Infos:/ .. /\<p\>\<hr width="90%"\>\;/;
       }
   
       close (TMP) ||
           die "Kann $tmp_file nicht schliessen: $!";
       close (LOCAL) ||
           die "Kann $local_file nicht schliessen: $!";
   
       if (-e $tmp_file) {
           unlink $tmp_file;
       }
   }
   
   # $local_file als HTML-File abschliessen
   #
   open (LOCAL, ">>$local_file") ||
       die "Kann $local_file nicht oeffnen: $!";
   
   print LOCAL "\n</body>\n</html>";
   
   close(LOCAL) ||
       die "Kann $local_file nicht schliessen: $!";
   
   # $local_file zwecks Ausgabe aufrufen
   #
   print "\n$local_file ansehen (y/n)?";
   $show = <STDIN>;
   chomp $show;
   
   if ($show eq 'y') {
   
       if (-e "/usr/bin/w3m") {
           $viewer = "/usr/bin/w3m";
       } elsif (-e "/usr/bin/lynx") {
           $viewer = "/usr/bin/lynx";
       } else {
           print "Habe keinen Textmodus-Browser gefunden, breche ab...";
           exit 1;
       }
   
       if (-r "$local_file") {
           exec("$viewer $local_file");
       } else {
           print "Kann Datei $local_file nicht lesen, breche ab...";
       }
   
   }
   exit 0;

--- schnapp ---


Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU Emacs on Mon Aug 01 19:35:22 CEST 2000

Valid CSS