vwd-cron.pl

Beschreibung

Dieses Script fragt den vwd-Ticker (http://www.vwd.com/) ab und speichert alle neu hinzugekommenen Nachrichten in einem Textfile. Es wird als cron-Job aufgerufen. Auf diese Weise verpasst man keine Meldung und kann immer dann lesen, wenn man Zeit hat.

Systemvoraussetzungen

Da es sich um ein Perl-Script handelt, muß man natürlich Perl haben;-) Ich habe es unter Perl 5 geschrieben und übernehme keine Garantie, daß es unter früheren Versionen läuft. Auch sonst übernehme ich keine Garantie für irgendwas. Desweiteren wird lynx benutzt, um die Webseiten abzufragen. Schließlich benötigt der Rechner, auf dem das Script läuft, natürlich einen Netzzugang, das Script nimmt an, daß ein solcher ohne weiteres genutzt werden kann.

Typischerweise sollte ein Unix-Shell-Account (wie man ihn oft an Unis bekommt) alle Voraussetzungen erfüllen.

Anleitung

Gestartet wird das Script als cron. Man gebe crontab -e ein und füge dort
0,20,40 * * * * $HOME/bin/vwd-cron.pl
hinzu (ggf. Pfad korrigieren). Zuvor ist das Script ggf. anzupassen. In der ersten Zeile muß man den korrekten Pfad zu Perl (which perl) einsetzen; in der zweiten den zu lynx, so dieser nicht schon vorgegeben ist, dann einfach die ganze Zeile löschen. Das Script legt zwei Dateien an, hier ggf. die Pfade nach eigenen Vorstellungen ändern; vwd.log (Zeile drei) enthält die laufende Nummer des Tickers, diese Datei darf nicht gelöscht werden, sie liegt im Verzeichnis, von dem aus das Script aufgerufen wird; .procmail/vwd.txt (Zeile vier) enthält die gespeicherten Meldungen und darf jederzeit entfernt werden (vorher lesen nicht vergessen;-), das Verzeichnis .procmail wurde gewählt, damit man sich die Datei per Mailserver zuschicken lassen kann, etwa:

## Send .procmail/
:0
* ^From.*3.14@piology\.org
* ^Subject: send .procmail$
| ( echo "Subject: .procmail/" ; echo "To: 3.14" ;\
    test -s procmail.log -o -s vwd.txt && ( echo ;\
    zip -Djlmq - $MAILDIR/* | uuencode pm.zip ) ) | $SENDMAIL -oi -t

Die Sache mit dem touch dient dazu, anhande der Zeit des Files vwd.txt festzustellen, daß das Script auch arbeitet; dieser Aufruf kann also gefahrlos gestrichen werden. Die Stellen, die ggf. anzupassen sind, hebe ich farblich hervor.

Das vollständige Script vwd-cron.pl

#!/usr/bin/perl -w
$ENV{"PATH"} .= ":/usr/bin";
$logfile  = "vwd.log";
$datafile = ".procmail/vwd.txt";
$lockfile = "vwd-cron.pl.lock";

# Make sure only one copy is running
exit if (-e $lockfile);
open(OUT,">$lockfile") or die "Cannot lock: $!";close(OUT);

if (not -s $logfile) { # First run, save current position
  exit unless ($nowtic=&CURRENT);
} else { # Now we have to stay up-to-date
  open(IN,"<$logfile");$nowtic=<IN>;close(IN);
  &GETTIC($nowtic,0);
  $lasttic=&CURRENT;
  while ($lasttic > $nowtic) {&GETTIC(++$nowtic,1);}
}

# Save information for next session in $logfile (this file SHOULD NOT be removed)
# and unlock
open(OUT,">$logfile");print(OUT $nowtic);close(OUT);
unlink($lockfile);

# Find current position
sub CURRENT {
  $id=0;
  $_=`lynx -dump http://www.vwd.de/`;
  while (m%http://www\.vwd\.de/frameset/news/[^/]+/(\d+)\.html%g) {$id=$1 if ($1>$id)}
  return $id;  
}

# Save message
sub GETTIC {
  $_ = `lynx -dump -width=70 -pseudo_inlines -nolist -dont_wrap_pre http://www.vwd.de/print.prl?id=$_[0]`;
  s/^\s*//s;
  s/\s*Copyright\s+[-0-9]+,\s+vwd\s+Vereinigte\s+Wirtschaftsdienste\s+GmbH.\s+Alle\s+Rechte.*$//s;
  s/^\s\s\s//mg;
  s%\A((?:[^\n]*\n){30}).*%$1\[Rest at http://www.vwd.de/print.prl?id=$_[0]\]%s
    if (/MITTEILUNG UEBERMITTELT VON BUSINESS WIRE|Ad-hoc Mitteilung (?:verarbeitet und )?übermittelt durch die DGAP|Ad-hoc announcement sent by DGAP/);
  $new=$_;
  $new=~s/[^\n]*//;
  if ($_[1] && $new ne $lastpage && /^(?!WDH\/)/)
    {open(OUT,">>$datafile");print(OUT "$_\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");close(OUT);}
  $lastpage=$new;
}


Valid CSS!Valid HTML 4.01!
© Boris 'pi' Piwinger, September 14, 2000