jubuntu79
Anmeldungsdatum: 13. Februar 2011
Beiträge: 465
|
Hallo zusammen, wahrscheinlich gibt es so etwas schon vielfach. Trotzdem hier ein kleines Skript, mit dem man sich die Zwischenstände bzw. Endergebnisse der 1. Fußball-Bundesliga auf das Terminal holen kann. Es wird das Programm w3m benötigt, falls das nicht installiert ist, bricht das Skript mit einem entsprechenden Hinweis ab. Wenn sichergestellt ist, dass w3m installiert ist, kann das Skript durch Weglassen der Zeilen 5-12 verkürzt werden. Mit der Variable $refreshIntervall stellt man ein, alle wieviel Sekunden sich die Zwischenstände aktualisieren. Es gibt sicher noch viel Verbesserungspotential, für entsprechende Hinweise bin ich dankbar.
Zum Beispiel:
Die Anzeige "flackert", wenn aktualisiert wird Man könnte farbliche Markierungen eingebauen (Z.B. Laufende, abgeschlossene Partien, noch nicht angepfiffene Partien; Lieblingsverein; Partien, wo gerade ein Tor gefallen ist) Abhängigkeit von der Formatierung der Webseite, wenn MDR die Formatierung ändert, funktioniert das Skript nicht mehr richtig.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/bin/bash
refreshIntervall=30 #Anzahl Sekunden, nach denen die Ergebnisse aktualisiert werden
#Test, ob w3m installiert ist
w3m=$(which w3m)
if [ ! -x "$w3m" ];
then
clear
echo "FEHLER: w3m wird benötigt: 'sudo apt-get install w3m'"
exit 0
fi
while(true)
do
clear
#Aufruf einer Internetseite mit Live-Ergebnissen
w3m -no-cookie http://mobiltext.wdr.de/602.html | egrep -v 'Uhr|^[0-2]' | egrep '[0-9-]+:[0-9-]+'
echo "Letzte Aktualisierung: $(date +%H:%M:%S) Uhr."
sleep $refreshIntervall
done
|
|
seit1996
Anmeldungsdatum: 18. November 2010
Beiträge: 65
|
jubuntu79 schrieb: Es wird das Programm w3m benötigt, falls das nicht installiert ist, bricht das Skript mit einem entsprechenden Hinweis ab. Wenn sichergestellt ist, dass w3m installiert ist, kann das Skript durch Weglassen der Zeilen 5-12 verkürzt werden.
Warum kein wget? Das hat im Gegensatz zu w3m (immerhin) die Priorität important. Das sind die Pakete, die das Minimum von zu erwartenden, allgemein üblichen und benötigten Programmen darstellen.[1] Mit dieser Begründung würde ich dann entsprechenden die Überprüfung ob wget installiert ist weglassen. Der Einfachheit wegen. [1] http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities
|
seit1996
Anmeldungsdatum: 18. November 2010
Beiträge: 65
|
Okay das w3m arbeitet etwas anders...
|
jubuntu79
(Themenstarter)
Anmeldungsdatum: 13. Februar 2011
Beiträge: 465
|
Hi seit1996, danke für Deine Kommentare. Aus meiner Sicht ist wget hauptsächlich dazu da, Dateien von einem Server zu holen. w3m hingegen ist ein Webbrowser für die Kommandozeile. Aus diesem Grund habe ich mich für w3m entschieden. Kannst Du einen entsprechenden Einzeiler mit wget posten? Würde mich sehr interessieren, wie das mit wget geht... w3m -no-cookie http://mobiltext.wdr.de/602.html | egrep -v 'Uhr|^[0-2]' | egrep '[0-9-]+:[0-9-]+' Gruß jubuntu79
|
seit1996
Anmeldungsdatum: 18. November 2010
Beiträge: 65
|
jubuntu79 schrieb: Aus meiner Sicht ist wget hauptsächlich dazu da, Dateien von einem Server zu holen. w3m hingegen ist ein Webbrowser für die Kommandozeile. Aus diesem Grund habe ich mich für w3m entschieden.
Das ist auch der Witz/das clevere an deinem Skript. Das habe ich nur zuerst nicht erkannt.
Kannst Du einen entsprechenden Einzeiler mit wget posten? Würde mich sehr interessieren, wie das mit wget geht...
Nein. Wie du schon anmerkst, kann wget kein HTML darstellen.
|
saeuerlich
Anmeldungsdatum: 14. Juni 2008
Beiträge: Zähle...
|
Das wäre z.B. ein Einzeiler für curl oder wget: curl -s http://mobiltext.wdr.de/602.html | perl -n0E'say for m|h3.+?>(.*?)<.+?/h3|gs'
oder wget -O - -q http://mobiltext.wdr.de/602.html | perl -n0E'say for m|h3.+?>(.*?)<.+?/h3|gs' Bekanntlich ist das parsen von HTML mittels regulärer Ausdrücke zwar böse und verwerflich aber es ist in diesem Fall auch eine einfache Lösung. Und es vermeidet eine zu installierende Abhängigkeit.
|
seit1996
Anmeldungsdatum: 18. November 2010
Beiträge: 65
|
Möchte noch watch erwähnen.
Spart die Endlosschleife usw. Wobei der Code in ein Skript ausgelagert werden kann, was dann mit watch ausgeführt wird.
|
ceelight
Anmeldungsdatum: 27. März 2007
Beiträge: Zähle...
|
Zusammengefasst würde es ein
| #!/bin/bash
refreshIntervall=30
watch -n $refreshIntervall wget -O - -q http://mobiltext.wdr.de/602.html | perl -n0E'say for m|h3.+?>(.*?)<.+?/h3|gs'
|
auch tun? (Leider gerade kein Linux zum Testen zur Hand im Büro ☹ )
|
saeuerlich
Anmeldungsdatum: 14. Juni 2008
Beiträge: 19
|
watch kann nicht mit Unicode umgehen - für diesen Zweck ist die Variante mit sleep daher wohl vorzuziehen.
|
linux_bluesman
Anmeldungsdatum: 3. Oktober 2009
Beiträge: Zähle...
|
Hey, das ist ja wohl superlustig. Auch wenn ich kein Fußball-Fan bin. Habs gerade unter Debian ausprobiert. Extrem cool wäre jetzt noch eins: Änderungen erfassen und automatisch an das Benachrichtigungsfeld weitergeben!
Dann käme so eine Meldung wie: "München - Mainz 0:7" ohne dass man irgendwas aufrufen müsste. Naja, leider lassen sich die Ergebnisse damit aber nicht beeinflussen.
Das wäre dann die Killer-Applikation für Linux.
|
realzippy
Anmeldungsdatum: 5. Mai 2009
Beiträge: 3137
|
Gibts, als Plasmoid für KDE 😉: "This plasmoid shows the current matches of the 1. Fußball-Bundesliga (German football league). If there is a goal, a notification is shown."
|
linux_bluesman
Anmeldungsdatum: 3. Oktober 2009
Beiträge: 42
|
Ich habe gerade das Skript mit aosd_cat etwas erweitert: Jetzt werden die Ergebnisse riesengroß per On-Screen-Display angezeigt.
Für die On-Screen-Anzeige wird das Paket aosd_cat gebraucht. Die Parameter x, y und n bestimmen die Position und Größe der Schrift.
Vermutlich müssen die Werte für einen Laptop-Bildschirm verkleinert werden, auf meinem Full-HD-Screen passt es. Damit ist die Sache nun auch partytauglich... 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
#!/bin/bash
refreshIntervall=30 #Anzahl Sekunden, nach denen die Ergebnisse aktualisiert werden
#Test, ob w3m installiert ist
w3m=$(which w3m)
if [ ! -x "$w3m" ];
then
clear
echo "FEHLER: w3m wird benötigt: 'sudo apt-get install w3m'"
exit 0
fi
while(true)
do
clear
#Aufruf einer Internetseite mit Live-Ergebnissen, Umleitung der Ausgabe an aosd_cat
w3m -no-cookie http://mobiltext.wdr.de/602.html | egrep -v 'Uhr|^[0-2]' | egrep '[0-9-]+:[0-9-]+'| aosd_cat -x 100 -y -800 -n 70
echo "Letzte Aktualisierung: $(date +%H:%M:%S) Uhr."| aosd_cat -x 100 -y -100 -n 50
sleep $refreshIntervall
done
|
|
saeuerlich
Anmeldungsdatum: 14. Juni 2008
Beiträge: 19
|
Ein Einzeiler, der auch funktioniert, wenn gerade Spiele laufen: wget -O - -q http://mobiltext.wdr.de/602.html | perl -C -n0E'say for m{(?:h3|col35")>[^>]+?>\s?([^<]*?)</}g' Dann verändert sich nämlich das Markup der Seite ein wenig. Letztlich ist aber wohl die Lösung mit w3m stabiler oder man sollte tatsächlich einen HTML-Parser verwenden. zu linux bluesman 5005962:
echo "Letzte Aktualisierung: $(date +%H:%M:%S) Uhr."| aosd_cat -x 100 -y -100 -n 50
Das echo ist überflüssig. Du kannst den Text genauso gut ins Datumsformat integrieren: date "+Letzte Aktualisierung: %H:%M:%S Uhr." aosd_cat ist übrigens auch nicht von Haus aus installiert. Ich würde notify-send verwenden, aber auch das muss erst installiert werden.
|
linux_bluesman
Anmeldungsdatum: 3. Oktober 2009
Beiträge: 42
|
Ich habe aosd_cat durch Herumstöbern gefunden und für mich erfüllt es seinen Zweck, aber vielleicht gibt's ja was Besseres.
Welche Vorteile hat denn notify-send? Geht da der Text direkt ans Benachrichtigungsfeld? Das wäre auch nicht schlecht!
|
linux_bluesman
Anmeldungsdatum: 3. Oktober 2009
Beiträge: 42
|
Das echo ist überflüssig. Du kannst den Text genauso gut ins Datumsformat integrieren: Hm, da macht sich bemerkbar, dass ich bei Shell-Skripten noch ziemlicher Anfänger bin, und dass mir offenbar noch ein paar Grundlagen fehlen ☺
|