|
|
|
01 Dec 2008, 05:49
|
Avatar-Untertitel
Punkte: 1459
seit: 03.04.2006
|
Ärgernis: Wie komme ich zum Röschenhof? Fix: CODE scherge ~ # ./t "Messe Dresden" 1. Fahrt am 30.11.2008 23:25 - 23:58 Uhr Zeit Linie Station 23:25 13 ab Dresden Mockritzer Straße 23:33 an Dresden Straßburger Platz 23:35 2 ab Dresden Straßburger Platz 23:49 an Dresden Bahnhof Mitte 23:53 alita ab Dresden Bahnhof Mitte 23:58 an Dresden Messe Dresden 2. Fahrt am 01.12.2008 05:42 - 06:09 Uhr Zeit Linie Station 05:42 9 ab Dresden Mockritzer Straße 05:46 an Dresden Querallee 05:51 75 ab Dresden Querallee 06:09 an Dresden Messe Dresden 3. Fahrt am 01.12.2008 06:07 - 06:29 Uhr Zeit Linie Station 06:07 75 ab Dresden Mockritzer Straße 06:29 an Dresden Messe Dresden 4. Fahrt am 01.12.2008 06:27 - 06:49 Uhr Zeit Linie Station 06:27 75 ab Dresden Mockritzer Straße 06:49 an Dresden Messe Dresden
...
Ubuntu: sudo apt-get install gawk (sollte IMHO der linux standard sein, aber irgendwelche Idioten haben bei Ubuntu (auch Debilian?) mawk installiert.)
> t; chmod +x t; In der t sollte stehen (Editor):
#!/bin/bash
dststation=${1:-Wo will ich meistens hin? - Dein default Wert!} srcstation=${2:-Wo steige ich meistens ein? Dein default Wert!} awk -vrequest="http://efa.vvo-online.de:8080/dvb/XSLT_TRIP_REQUEST2?sessionID=0&requestID=0&language=de&usage=xslt_trip&execInst=normal&command=&ptOptionsActive=-1&itOptionsActive=&itDateDay=`date +%d`&itDateMonth=`date +%m`&itDateYear=`date +%y`&place_origin=Dresden&placeState_origin=empty&type_origin=stop&name_origin=${srcstation/ /%20}&nameState_origin=empty&place_destination=Dresden&placeState_destination=empty&type_destination=stop&name_destination=${dststation/ /%20}&nameState_destination=empty&itdTripDateTimeDepArr=dep&itdTimeHour=`date +%H`&idtTimeMinute=`date +%M`" -vRS="<tr[^>]*>|</tr>" -vFS='<td[^>]*>|</td>|\\("|"\\)' 'BEGIN { route=0; curr=0; s="/inet/tcp/0/efa.vvo-online.de/8080"; print "GET " request " HTTP/1.1\r\nHost: efa.vvo-online.de\r\nUser-Agent: akts!zr\r\nAccept: */*\r\nConnection: close\r\n\r\n" |& s; while (s |& getline) { if($0 ~ /#ROUTE/) { split($0, a, /<a[^>]*>|<\/a>/); routes[++route]=a[2]; continue; } if($0 ~ /"ROUTE_[0-9]"/) { print routes[++curr]; print " Zeit Linie Station"; continue; } if($2 ~ /^[0-9][0-9]:[0-9][0-9]/) { split($11, a, / /); line=a[2]; printf (" %s %5s %s\n", $2, line, $4 " " $6); } } }' | perl -npe 's/([\x80-\xff])/(chr(0xc0 | ((ord($1) >> 6) & 0x3f)).chr(0x80 | (ord($1) & 0x3f)))/eg'
Wenn du keine UTF-8 Console nimmst, dann entferne alles ab (und inklusive) `| perl -npe...'
Is wohl noch watt Beta, aber was solls! Gute Nacht! p.s.: Achso: Es geht auch: ./t "Mein Ziel" "Meine Haltestelle"... daher müssen fortan diese " bei zusammengesetzten begriffen verwendet werden, z.b. ./t "Fritz Foerster Platz" (Wenn einem `./t TU' zu banal is...) p.p.s.: Neue, revidierte Version mit Haltestellenpräzisierung: CODE Wie sieht HSP aus?
scherge ~ # ./t Messe Mock Gehts etwas genauer? Einstieg: Campingplatz Mockritz, Mockethaler Straße, Mockritz, Mockritzer Straße? Ausstieg: Messe Dresden, Ostragehege Messehalle 1?
---
#!/bin/bash
dststation=${1:-Wo will ich meistens hin? - Dein default Wert!} srcstation=${2:-Wo steige ich meistens ein? Dein default Wert!} awk -vrequest="http://efa.vvo-online.de:8080/dvb/XSLT_TRIP_REQUEST2?sessionID=0&requestID=0&language=de&usage=xslt_trip&execInst=normal&command=&ptOptionsActive=-1&itOptionsActive=&itDateDay=`date +%d`&itDateMonth=`date +%m`&itDateYear=`date +%y`&place_origin=Dresden&placeState_origin=empty&type_origin=stop&name_origin=${srcstation/ /%20}&nameState_origin=empty&place_destination=Dresden&placeState_destination=empty&type_destination=stop&name_destination=${dststation/ /%20}&nameState_destination=empty&itdTripDateTimeDepArr=dep&itdTimeHour=`date +%H`&idtTimeMinute=`date +%M`" -vRS="<tr[^>]*>|</tr>" -vFS='<td[^>]*>|</td>|\\("|"\\)' 'BEGIN { isDest=0; route=0; curr=0; s="/inet/tcp/0/efa.vvo-online.de/8080"; print "GET " request " HTTP/1.1\r\nHost: efa.vvo-online.de\r\nUser-Agent: akts!zr\r\nAccept: */*\r\nConnection: close\r\n\r\n" |& s; while (s |& getline) { if($0 ~ /option value="[0-9]+:[0-9]+"/) { if($0 ~ /name_destination/) { isDest = 1; } split($0, a, /<option[^>]*="[0-9]+:[0-9]+">|<\/option>/); if(isDest) for(pos = 2; a[pos]; pos += 2) dest = dest (dest ? ", " : "") a[pos]; else for(pos = 2; a[pos]; pos += 2) src = src (src ? ", " : "") a[pos]; continue; } if($0 ~ /#ROUTE/) { split($0, a, /<a[^>]*>|<\/a>/); routes[++route]=a[2]; continue; } if($0 ~ /"ROUTE_[0-9]"/) { print routes[++curr]; print " Zeit Linie Station"; continue; } if($2 ~ /^[0-9][0-9]:[0-9][0-9]/) { split($11, a, / /); line=a[2]; printf (" %s %5s %s\n", $2, line, $4 " " $6); } } if(src || dest) { print "Gehts etwas genauer?"; if(src) { print "Einstieg: " src "?"; } if(dest) { print "Ausstieg: " dest "?"; } } }' | perl -npe 's/([\x80-\xff])/(chr(0xc0 | ((ord($1) >> 6) & 0x3f)).chr(0x80 | (ord($1) & 0x3f)))/eg'
p.p.p.s.: Noch eine revision (Unter anderem wird jetzt Nummer der S-Bahn angezeigt: CODE #!/bin/bash
dststation=${1:-Default Wohin} srcstation=${2:-Default Einstiegshaltepunkt} awk -vrequest="http://efa.vvo-online.de:8080/dvb/XSLT_TRIP_REQUEST2?sessionID=0&requestID=0&language=de&usage=xslt_trip&execInst=normal&command=&ptOptionsActive=-1&itOptionsActive=&itDateDay=`date +%d`&itDateMonth=`date +%m`&itDateYear=`date +%y`&place_origin=Dresden&placeState_origin=empty&type_origin=stop&name_origin=${srcstation/ /%20}&nameState_origin=empty&place_destination=Dresden&placeState_destination=empty&type_destination=stop&name_destination=${dststation/ /%20}&nameState_destination=empty&itdTripDateTimeDepArr=dep&itdTimeHour=`date +%H`&idtTimeMinute=`date +%M`" -vRS="<tr[^>]*>|</tr>" -vFS='<td[^>]*>|</td>|\\("|"\\)' 'BEGIN { isDest=0; route=0; curr=0; s="/inet/tcp/0/efa.vvo-online.de/8080"; print "GET " request " HTTP/1.1\r\nHost: efa.vvo-online.de\r\nUser-Agent: akts!zr\r\nAccept: */*\r\nConnection: close\r\n\r\n" |& s; while (s |& getline) { if($0 ~ /option value="[0-9]+:[0-9]+"/) { if($0 ~ /name_destination/) isDest = 1; split($0, a, /<option[^>]*>|<\/option>/); if(isDest) for(pos = 2; a[pos]; pos += 2) dest = dest (dest ? ", " : "") a[pos]; else for(pos = 2; a[pos]; pos += 2) src = src (src ? ", " : "") a[pos]; continue; } if($0 ~ /#ROUTE/) { split($0, a, /<a[^>]*>|<\/a>/); routes[++route]=a[2]; continue; } if($0 ~ /"ROUTE_[0-9]"/) { print routes[++curr]; print " Zeit Linie Station"; continue; } if($2 ~ /^[0-9][0-9]:[0-9][0-9]/) { split($11, a, / /); line=a[2]""a[3]; printf (" %s %5s %s\n", $2, line, $4 " " $6); } } if(src || dest) { print "Gehts etwas genauer?"; if(src) print "Einstieg: " src "?"; if(dest) print "Ausstieg: " dest "?"; } }' | perl -npe 's/([\x80-\xff])/(chr(0xc0 | ((ord($1) >> 6) & 0x3f)).chr(0x80 | (ord($1) & 0x3f)))/eg'
Dieser Beitrag wurde von aktsizr: 03 Dec 2008, 18:42 bearbeitet
--------------------
|
|
|
|
|
22 Jan 2009, 12:10
|
Neuling
Punkte: 3
seit: 22.01.2009
|
Hallo zusammen,
hat jemand von euch den Code für das KDE4 Plasmid? Oder sogar gib es irgendwo sogar ein deb Paket für Kubuntu 8.10
Gruß
|
|
|
|
|
10 Feb 2010, 01:11
|
Avatar-Untertitel
Punkte: 1459
seit: 03.04.2006
|
Ja, hier. Habs mal fix für dich gefixt, nehms ja auch immernoch immermal. Haben die " zu " gemacht. Das war alles. Habe gleich noch etwas mehr Platz bei Nr. für alitas gemacht. Ciao. Zitat #!/bin/bash station=${@:-Mockritzer Straße} awk -vRS='\\],\\[|\r\n\r\n' -vFS='"(,")*' -vstation="${station/ /%20}" 'BEGIN { s="/inet/tcp/0/widgets.vvo-online.de/80"; print "GET /abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=" station "&vz=5 HTTP/1.1\r\nHost: widgets.vvo-online.de\r\nAccept: */*\r\nConnection: close\r\n\r\n" |& s; print " Nr. Min. Richtung"; while (s |& getline) { if ($0 ~ /"/) { printf ("%8s %4s %s\n", $2, $4, $3); } } }' | perl -npe 's/&#(\d*);/($1 & ~0x7f ? chr(0xc0 | (($1 >> 6) & 0x3f)).chr(0x80 | ($1 & 0x3f)) : chr($1))/eg'
|
|
|
|
|
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.
|
|
|
|
|
25 Mar 2010, 01:05
|
Avatar-Untertitel
Punkte: 1459
seit: 03.04.2006
|
Zitat(stabilo @ 10 Feb 2010, 11:49) @aktsizr Danke! Ja... sorry - aber die Halunken haben leider den Service nochmals verändert. Ab jetzt muss man den User-Agent setzen. Ich habe das mal unten angepasst. Viel Spass damit! #!/bin/bash station=${@:-Mockritzer Straße} awk -vRS='\\],\\[|\r\n\r\n' -vFS='"(,")*' -vstation="${station/ /%20}" 'BEGIN { s="/inet/tcp/0/widgets.vvo-online.de/80"; print "GET /abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=" station "&vz=5 HTTP/1.1\r\nHost: widgets.vvo-online.de\r\nAccept: */*\r\nUser-Agent: Microsoft-IIS/6.0 (Mossad Edition w/ NSA_is_OK patches)\r\nConnection: close\r\n\r\n" |& s; print " Nr. Min. Richtung"; while (s |& getline) { if ($0 ~ /"/) { printf ("%8s %4s %s\n", $2, $4, $3); } } }' | perl -npe 's/&#(\d*);/($1 & ~0x7f ? chr(0xc0 | (($1 >> 6) & 0x3f)).chr(0x80 | ($1 & 0x3f)) : chr($1))/eg' Dieser Beitrag wurde von aktsizr: 25 Mar 2010, 01:22 bearbeitet
|
|
|
|
|
26 Mar 2010, 09:55
|
Neuling
Punkte: 3
seit: 22.01.2009
|
Zitat(aktsizr @ 25 Mar 2010, 00:05) Ja... sorry - aber die Halunken haben leider den Service nochmals verändert. Ab jetzt muss man den User-Agent setzen. Ich habe das mal unten angepasst. Viel Spass damit!
Ich hab da ne kurze Frage, leider hab ich nicht so viel Plan von bash. Ich hatte mir aber ein php script gebasstelt, welches mir die Information ausliest anhand der Adresse: CODE http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=tudresden&vz=3 jetzt wird mir irgendwie nichts mehr angezeigt, muss ich an die URL noch was dranhängen?? Bei wunsch kann ich den php code auch mal reinstellen.
|
|
|
|
|
26 Mar 2010, 11:41
|
Avatar-Untertitel
Punkte: 1459
seit: 03.04.2006
|
Zitat(buggy @ 26 Mar 2010, 08:55) Ich hab da ne kurze Frage, leider hab ich nicht so viel Plan von bash. Ich hatte mir aber ein php script gebasstelt, welches mir die Information ausliest anhand der Adresse: CODE http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=tudresden&vz=3 jetzt wird mir irgendwie nichts mehr angezeigt, muss ich an die URL noch was dranhängen?? Bei wunsch kann ich den php code auch mal reinstellen. Du nimmst fopen(), dann PHP: CODE ini_set('user_agent', 'buggy w/ NSA patches');
Du nimmst curl, dann PHP: CODE curl_setopt($curlh, CURLOPT_USERAGENT, 'buggy w/ NSA patches');
Du nimmst fsockopen(), dann einfach den HTTP Header: User-Agent: buggy w/ NSA patches zum validen HTTP request hinzufügen. Dieser Beitrag wurde von aktsizr: 26 Mar 2010, 11:45 bearbeitet
|
|
|
|
|
26 Mar 2010, 14:08
|
Neuling
Punkte: 3
seit: 22.01.2009
|
Danke für die Tipps, werde heute abend mal sehen, wenn ich Zeit hab. Hier mal das PHP Script; p.s. bin kein experte ;-) CODE <?php $haltestelle ="tudresden"; $url = "http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=1.$haltestelle.&vz=1"; $data = file_get_contents($url); $rest = substr($data, 1, -1); $rest = str_replace(""", "", $rest); $split = preg_split("/,/", $rest, 0, PREG_SPLIT_NO_EMPTY ); $y=0; echo $haltestelle."<br>---------------<br>"; for ( $x = 0; $x < count ( $split ) / 3; $x++ ) { echo $split[$y]." ".$split[$y+1]." ".$split[$y+2]."<br>"; $y = $y+3; } ?> EDIT:Oben waren ein paar Fehler drin ging schon mit der URL Zusammensetzung los. Keine Ahnung, warum er es damals immer geschluckt hat. So Sieht es jetzt aus: CODE <?php $haltestelle ="tudresden"; $url = "http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=".$haltestelle."&vz=1"; function get_results($url) { $ch = curl_init($url); curl_setopt ($ch, CURLOPT_URL, "$url"); curl_setopt ($ch, CURLOPT_REFERER, "$url_ref"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0"); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); $result = curl_exec ($ch); curl_close ($ch); return $result; } $data = get_results($url); $rest = substr($data, 1, -1); $rest = str_replace(""", "", $rest); $split = preg_split("/,/", $rest, 0, PREG_SPLIT_NO_EMPTY ); $y=0; echo $haltestelle."<br>---------------<br>"; for ( $x = 0; $x < count ( $split ) / 3; $x++ ) { echo $split[$y]." ".$split[$y+1]." ".$split[$y+2]."<br>"; $y = $y+3; }
?> Dieser Beitrag wurde von buggy: 27 Mar 2010, 00:47 bearbeitet
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|