6.4.2005

Automatische "Favoriten"

default

nosoftwarepatents

Die "Favoriten" bzw. die "Lesezeichen" oder "Bookmarks" sind eine tolle Erfindung: Man surft hierhin, man surft dorthin, und wenn es einem gefällt, drückt man "Favoriten - Hinzufügen" oder "Bookmark this page" - und schon hat man ein neues kleines Fähnchen in der großen Weltkarte. Nur schade, daß es nicht funktioniert, jedenfalls nicht bei mir.

Ich habe Tausende von Bookmarks, einen Riesenhaufen. Sicher, hin und wieder fange ich an zu sortieren, mache Ordner und Unterordner, usw. Aber auch da sind inzwischen Hunderte von Bookmarks drin, und wenn ich mal eine bestimmte Seite wiederfinden will: Keine Chance - Nadel im Heuhaufen.

Aber: Ich habe einen Server mit einem Webproxy drauf, 'Squid'. Der protokolliert jeden Zugriff und bewahrt die Protokolle ein paar Tage auf. Und ich habe auf dem Server auch 'Apache' laufen, den Webserver. Und nun habe ich mir ein kleines Programm geschrieben, das die Squid-Protokolle liest und danach eine Liste führt, wie oft, in welchen Abständen und wann zuletzt eine Seite geholt wurde. Und aus dieser Liste wird eine HTML-Seite erzeugt, wo mir die entsprechenden Links präsentiert werden, geordnet nach 'neu', 'täglich', 'wöchentlich', usw.

Jeder zugreifende Rechner bekommt nur die Links angezeigt, die er selbst schon geholt hat. Das brauche ich zwar nicht unbedingt für mich selbst, aber z.B. für meine Kundenfirmen. Jeder Arbeitsplatzrechner kriegt dann nur seine eigenen Links, nicht die Links der Kollegen. Ein bißchen Privatsphäre muß schließlich gewahrt bleiben, auch am Arbeitsplatz.

Die Links werden so angezeigt, wie ich sie bevorzuge: Platzsparend, einfach hintereinander weg, jeder Abschnitt ist alphabetisch sortiert, 'http://' und 'www.' wird nicht mit angezeigt, das stört nur.

sqaf-screen

Im Augenblick werden nur die Domains angezeigt, keine einzelnen Seiten. Ich weiß noch nicht, ob ich das eines Tages brauchen werde. Ich weiß auch noch nicht, ob einzelne Seiten nun besser oder schlechter sind als nur die Domains, schließlich will ich nicht wieder einen Heuhaufen haben. Wir werden sehen.

 

Download und Installation

Tarballs:

Benötigte Programme (Dependencies): Apache (Webserver), Squid (HTTP-Cache) und Cron.

Zum Entpacken wird 'bunzip2' benötigt. Im damit erzeugten Directory liegt ein Bash-Skript 'install', das eventuell an die Directories angepaßt werden muß. (Dann muß vermutlich auch der Quelltext angepaßt und neu kompiliert werden.)

Die Installation und das Programm sind bisher nur getestet auf meinem eigenen Server mit Debian-Linux-3.0rc3 ("Woody").

Dateien im Tarball:

COPYING   Die GPL    
README   Im Wesentlichen dieser Text, in Englisch    
crontab   Eine Beispielzeile für /etc/crontab    
install   Das Installationsskript (für Bash)   einmal aufrufen
sqaf   Binary, von crontab gestartet    
sqaf-cgi   Binary, erstes CGI, zeigt die Liste    
sqaf-cgi.pas   Quelltext    
sqaf-click-cgi   Binary, zweites CGI, notiert die Klicks    
sqaf-click-cgi.pas   Quelltext    
sqaf.html   Beispiel für ein Link auf sqaf-cgi   das Link irgendwo eintragen
sqaf.pas   Quelltext    
ucgi.pas   Quelltext    
uhtml.pas   Quelltext    
usqaf.pas   Quelltext    

 

Über das Programm 'SQAF'

Es ist geschrieben in Pascal und kompiliert mit 'Free Pascal Version 1.9.2'. Es wird veröffentlicht unter der 'GNU Public License' (GPL).

Im Tarball sind sowohl die Quelltexte enthalten, als auch die Programme in kompilierter Form (als Binaries), für Leute, die keine Lust haben, sich extra mit Pascal zu beschäftigen.

Der Compiler ist erhältlich unter http://www.freepascal.org/ und ziemlich einfach zu installieren.

Man kann es auch mit anderen Versionen von Free-Pascal kompilieren, z.B. ist in Debian Free-Pascal Version 1.1.10 enthalten. Für Versionen vor 1.9 müssen die Verweise auf die Unit 'oldlinux' ersetzt werden durch 'linux', und es muß neu kompiliert werden.

Es ist geschrieben, um auf einem Linux-Server zu laufen, und es benötigt dort 'squid' und 'apache'. Es erzeugt wartungsfreie Favoriten (Lesezeichen), getrennt fuer jeden Arbeitsplatzrechner, die mit Hilfe eines CGIs im Browser des Surfers präsentiert werden.

Es besteht aus drei Teilen, dem Programm, das z.B. nachts einmal läuft und die Liste führt, aus einem CGI, das die Links präsentiert, und einem weiteren CGI, das prüft, ob die jeweilige Seite durch Anklicken geholt wird, oder ob sie nur nebenbei mitgeholt wird, z.B. von irgendeinem Bilder-Server oder Anzeigen-Server. Letztere Links werden als 'uninteressant' ganz unten einsortiert.

 

Die drei Teile:

  • sqaf
    • wird gestartet durch /etc/crontab
    • liest /var/log/squid/access.log
    • aktualisiert eine Liste /usr/lib/cgi-bin/WORLD_WRITABLE/sqaf.list
  • sqaf.cgi
    • wird verlinkt von einer HTML-Seite (z.B. von sqaf.html im Tarball)
    • wird im Browser angeklickt (so daß es von 'apache' gestartet wird)
    • generiert eine Seite mit URLs, die letztens von 'diesem Computer' geholt wurden (basierend auf der IP-Adresse des Computers, auf dem der Browser läuft)
    • Die Links auf der erzeugten Seite zeigen nicht direkt ins Internet, sondern erstmal auf ein weiteres CGI: sqaf-click.cgi
  • sqaf-click.cgi
    • generiert eine leere Seite mit einem Hinweis, und leitet den Browser sofort um auf die eigentliche URL
    • aktualisiert einen Klickzähler in der Liste /usr/lib/cgi-bin/WORLD_WRITABLE/sqaf.list

 

Die Linkseite (die 'Favoriten', geliefert von sqaf.cgi):

  • Neue Links (d.h. Links die zum ersten Mal in /var/log/squid/access.log erscheinen) werden ganz oben auf der Seite angezeigt
  • Links, die regelmäßig und durch Anklicken geholt werden (täglich, wöchentlich, monatlich, jährlich) werden darunter in vier getrennten Absätzen angezeigt
  • Links die regelmäßig geholt werden, die aber nie angeklickt werden, werden ganz unten auf der Seite angezeigt als 'außerhalb'. Sie werden nämlich - offensichtlich - auf dieser Linkseite gar nicht gebraucht
  • Direct darüber, also immer noch ziemlich weit unten, werden die Links angezeigt, die ein einziges Mal geholt wurden, und dann nie wieder

 

Die Liste 'sqaf.list'

Jede URL hat eine Zeile:

  • Tag des letzten Zugriffs (Tag-Nummer seit 1.Jan 1970)
  • Mittlerer Zeitabstand zwischen den Tagen mit Zugriffen (in Tagen)
  • Anzahl der Tage mit Zugriffen (Zähler)
  • Anzahl Klicks (Zähler)
  • Anfordernder Rechner (IP-Adresse)
  • URL (in dieser Version nur die Domain)

 

Änderungen an sqaf.cgi (das Heuhaufen-Problem):

  • Version 0.1.1: Links, die nur ein einziges Mal geholt wurden, bilden einen nutzlosen Heuhaufen und werden nicht mehr angezeigt. Was nur einmal geholt wird und dann nie wieder, ist ab sofort kein 'Favorit' mehr.
  • Version 0.1.2: Links, die mehr als zehnmal öfter geholt als angeklickt werden ('extrem außerhalb'), fallen weg.
  • Version 0.1.3: Links, die 'außerhalb' sind und außerdem seltener als monatlich geholt werden, fallen auch noch weg.
abatz.de Jörn Abatz - Technische Software Impressum