|
DVB-Widget – Der Abfahrtsmonitor
Antworten
|
|
 10 Feb 2010, 09:02
|

Automatix         
Punkte: 5198
seit: 09.11.2005
|
In der letzten Zeit kommen da beinahe täglich Veränderungen bei, immer wieder begleitet von Ausfällen des Servers. Und die geben nicht mal einen Header mit, dass man vielleicht mal die Kodierung automatisch erkennen und verändern lassen kann. Aufgrund meines Projektes "Abfahrtsmonitor im Wu5" bin ich da immer relativ gut auf dem Laufenden. Mein bescheidenes Stückchen Code: CODE #!/bin/bash # # Skript zum Holen, Konvertieren und Skalieren der Abfahrtsdaten # # 28.01.2010, by Merlin Weisig ###################
rm -f /home/wu5/*.dat
function getdata { CACHE=1 for HALTESTELLE in "Zellescher%20Weg" "Strehlener%20Platz" "Lenneplatz" "Wasaplatz" do lynx -source 'http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst='$HALTESTELLE'&vz=3' | recode HTML_4.0 | gawk -vRS='\\],\\[' -vFS='"(,")*' 'BEGIN { print " \033[0;37m| Linie | Richtung | Min" } { printf (" \033[0;37m|\033[1;36m %-4s\033[0;37m|\033[1;33m %-17s\033[0;37m|\033[1;32m %-3s\n", $2, $3, $4); }' >> dvb$CACHE.dat FILL=1 while [ $FILL -le 13 ] do echo " " >> /home/wu5/dvb$CACHE.dat FILL=$((FILL + 1)) done CACHE=$((CACHE + 1)) done }
###################
function lostcon { for i in "1" "3" do FILL=1 while [ $FILL -le 5 ] do echo " " >> /home/wu5/dvb$i.dat FILL=$((FILL + 1)) done echo -e "\033[1;31m Derzeit besteht leider keine Verbindung zum Netzwerk! \033[1;37m " >> /home/wu5/dvb$i.dat FILL=1 while [ $FILL -le 18 ] do echo " " >> /home/wu5/dvb$i.dat FILL=$((FILL + 1)) done done for i in "2" "4" do FILL=1 while [ $FILL -le 24 ] do echo " " >> /home/wu5/dvb$i.dat FILL=$((FILL + 1)) done done }
###################
function scaledata { I=1 while [ $I -le 24 ] do WERT1=$(head -n$I /home/wu5/dvb1.dat | tail -n1) WERT2=$(head -n$I /home/wu5/dvb2.dat | tail -n1) echo -e " $WERT1 $WERT2" >> /home/wu5/dvb_a.dat WERT1=$(head -n$I /home/wu5/dvb3.dat | tail -n1) WERT2=$(head -n$I /home/wu5/dvb4.dat | tail -n1) echo -e " $WERT1 $WERT2" >> /home/wu5/dvb_b.dat I=$(($I + 1)) done }
###################
PING=`ping -c1 -w1 8.8.8.8 > /dev/null 2>&1; echo $?` if [ "$PING" = "0" ];then getdata scaledata else lostcon fi exit
/Edit: Vielleicht sollte man erwähnen, dass man eine aktuelle Version von awk benötigt, da diese sonst die Zeichen falsch zählt. (Byte vs. Zeichen) Dieser Beitrag wurde von Sigurd: 10 Feb 2010, 13:30 bearbeitet
--------------------
Barbarus hic ego sum, quia non intellegor ulli.
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|