Eine Witzesammlung aus dem Netz in fortune cookies umwandeln

fortune

Das Computerprogramm Fortune zeigt fortune cookies (Glückskekse) und andere humorvolle Aphorismen an. Die fortune cookies werden in indizierten Textdateien im Verzeichnis /usr/share/fortune gespeichert. Die bei der Installation von fortune mitgelieferten cookies können Sie durch weitere cookie-Sammlungen aus dem Internet und natürlich durch eigene fortune cookies ersetzen oder ergänzen.

Wie ich meine cookies um eine Witzesammlung aus dem Internet per Skript erweitert habe, möchte ich in diesem Beitrag erläutern.Fortune cookies werden in einer Textdatei gespeichert. In dieser Datei werden die einzelnen cookies durch Zeilen getrennt, die nur ein „%“-Zeichen enthalten. Mittels /usr/sbin/strfile muss die Datei indiziert werden, damit fortune darauf zugreifen kann.

Beispiel

%
Erster dummer Spruch
%
Zweiter dummer Spruch
%
Dritte dummer Spruch
%
Vierter dummer Spruch

Mittels /usr/sbin/strfile <spruechefile> <spruechefile>.dat wird ein Index auf die Textdatei erzeugt.

Eigene Witzesammlung

Auf www.haha.at gibt es viele deutschsprachige Witze. Mit dem folgenden Script laden Sie alle Witze von www.haha.at herunter und wandeln sie in das für fortune benötigte Format um. Die Umwandlung der html-Dateien erfolgt mit sed. Die sed-Befehle sind, weil etwas umfangreicher, in zwei Dateien, ~/bin/sed/haha.sed und ~/bin/sed/htmluml2chr.sed, abgelegt.

Wer dies ausprobieren will, der lade sich die Dateien haha-witze(.txt), haha.sed und htmluml2chr.sed herunter und speichere sie in den Verzeichnissen ~/bin/ bzw. ~/bin/sed/. Das Script legt die Witze im aktuellen Verzeichnis ab, daher sollte ein (neues) Verzeichnis für die Witze angelegt werden, in dieses Verzeichnis gewechselt (cd NeuesVerzeichnis) und haha-witze ausgeführt werden. (chmod +x ~/bin/haha-witze nicht vergessen oder mit sh haha-witze starten.) Anschließend kopieren sie die Witze-Dateien mit root-Rechten (sudo cp * /usr/share/fortune/) in das Verzeichnis für die fortune cookies.

Mit fortune [Witzkategorie] rufen Sie gezielt Witze aus der entsprechenden Kategorie ab.

Beispiel

thomas@r1:~/NeueWitze> fortune Kinder

Klein Fritzchen kommt in die Apotheke und fragt: „Ich haette gerne eine Creme.“

Darauf der Apotheker: „Ja haettest du gerne ein After Shave?“ Darauf Fritzchen: „Nein, nein, schon fuer das Gesicht!“

Anmerkung: Die Qualität der Formatierung, Rechtschreibung und Grammatik schwankt sehr stark, da die Witze zumindest teilweise aus „Spenden“ stammen, die wohl nicht redaktionell geprüft werden.

haha-witze

#! /bin/bash
#
# QaD Script zum Laden der Witze von www.haha.at und umsetzten in
# fortune(6) files.

# Die fortune(6) Dateien werden im aktuelle Verzeichnis angelegt.

# 1. Schritt: Laden des Index der Witze,
# 2. Schritt: Extrahieren der Witzkategiorien und -anzahlen mit sed
# 3. Schritt: Holen der Witze mit getwitze kategorie anzahl
# (Eine Witzkategorie muss mindestens 3 Zeichen lang sein.)

function getwitze() {

test -e $1 && rm $1

for ((j=0; j<$2; j+=10))
do
   wget --directory-prefix=$1/ \
	--output-document=- \
	http://www.haha.at/witze/witze/$1/$j \
   | sed -f $HOME/bin/sed/haha.sed \
   | sed -f $HOME/bin/sed/htmluml2chr.sed >>./$1

done

/usr/sbin/strfile ./$1

}

KAT="None"
ANZ=0
wget --output-document=- http://www.haha.at/witze/index.php \
| sed -n 's!^<a.*/\([^/]\{3,\}\)/"[^(]*(\([0-9]*\)).*!\1 \2!p' \
| until [ -z "$ANZ" ] ; \
do \
	read KAT ANZ ; \
	getwitze $KAT $ANZ ; \
done

$HOME/bin/sed/htmluml2chr.sed

s/&auml;/ae/g
s/&ouml;/oe/g
s/&uuml;/ue/g
s/&Auml;/Ae/g
s/&Ouml;/Oe/g
s/&Uuml;/Ue/g
s/&quot;/"/g
s/&szlig;/sz/g

$HOME/bin/sed/haha.sed

1,/linksrechts/d
/option/d
/pagertable/,/<\/body>/d
s!^<hr .*<\/a>!!
s!<div>!%!
s!<br[^>]*>!\n!g
/^$/ d
1 d
/<\/div>/,$ d

Fr 25. Apr 19:28:43 CEST 2008