eXma » Diskutieren » Stadtgeschehen
Startseite - Veranstaltungen - Mitglieder - Suche
Vollständige Version anzeigen: DVB-Widget – Der Abfahrtsmonitor
Seiten: 1, 2
yocheckit
bestens! danke! smile.gif
marco
Zitat(tenrapid @ 09 Feb 2008, 19:01)
Ich konnte nicht mehr warten...
Dashboard Widget
*



wie hasten das eigentlich gemacht? bekommt man sowas auch für den speiseplan der mensa hin? was
brauche ich dazu...

ich habs schon probiert mit dieser ausschneide-funk im safari, aber wegen der wechselnden werbung auf
der mensaseite, wandert das teil immer...

ich will auch dashboard-dinger programmieren können...
wombat1st
apple bietet gute unterstützung online: http://developer.apple.com/macosx/dashboard.html

mit ein wenig kenntnis in html und javascript ist es schnell möglich, sinnvolle ergebnisse zu erreichen. falls du leprd nutzt wird die die sache noch einfacher. installiere dir XCode, welches DashCode enthält. das ist ein nettes tool welches dich beim basteln unterstützt.
marco
Zitat(wombat1st @ 27 Feb 2008, 11:01)
apple bietet gute unterstützung online:
http://developer.apple.com/macosx/dashboa
rd.html


mit ein wenig kenntnis in html und javascript ist es schnell möglich, sinnvolle ergebnisse zu erreichen.
falls du leprd nutzt wird die die sache noch einfacher. installiere dir XCode, welches DashCode enthält.
das ist ein nettes tool welches dich beim basteln unterstützt.
*


jo hab ich, aber ich hab trotzdem keine ahnung, wie ich die daten automatisch in das widget
bekomme...
müssen die irgendwie bereitgestellt werden? also auf eine besondere art?
ich will eigentlich nur den einen frame von http://www.studentenwerk-dresden.de/mensen/speiseplan/
in dem man die bergstraße sieht haben...
wie komm ich an die daten ran? hat da jemand ahnung?
marco
Zitat(tjay @ 27 Feb 2008, 12:43)
[url=http://www.studentenwerk-dresden.de/mensen/speiseplan/print.html?
auswahl=m8&wochen=0]http://www.studentenwerk-dresden.de/mensen...ahl=m8&wochen=0[/url]
*

is zwar ni das, was ich meine, aber hat mich auf ne idee gebracht...
marco
Zitat(marco @ 27 Feb 2008, 13:24)
is zwar ni das, was ich meine, aber hat mich auf ne idee gebracht...
*

also der vvo hat es nun endlcih auch als dashboard ding...

http://www.vvo-online.de/de/fahrplan/widgets/index.aspx

nur die dvb trödeln noch rum... säcke... smile.gif
Sigurd
@ marco:

Die Angebote in der Bergstraße lassen sich sicherlich gut mit lynx auslesen, ein kleines Bashscript solle es dir dann auch ermöglichen, die die aktuellen Angebote anzeigen zu lassen.
So bin ich zumindest verfahren, um die Abfahrtszeiten der DVB aufn Rechner zu kriegen, dazu hab den Code, der hier schonmal irgendwo von wicked gepostet wurde noch ein wenig modifiziert.

Wenn ich mal n bissl Zeit hab, versuch ichs auch mal mit der Mensa, das wäre nämlich durchaus recht interessant!

(So zumindest die "Linux-Lösung")
baren
Gibt's denn kein JavaScript zum Einbinden eines solchen Widgets auf einer personalisierten Startseite?
Sigurd
Nicht dass ich wüsste, aber vielleicht macht sich jemand die Mühe und schreibt was dazu. Ich persönlich kann leider kein Java und auch kein Java-Skript no.gif
lusch3
Zitat(Sigurd @ 20 Mar 2008, 14:47)
Nicht dass ich wüsste, aber vielleicht macht sich jemand die Mühe und schreibt was dazu. Ich persönlich kann leider kein Java und auch kein Java-Skript no.gif
*


das eine hat mit dem anderen aber ÜBERHAUPT nix zu tun....
Gizz
und endlich gibts das auch für die vista sidebar...
chelys
ich wollte nicht extra einen neuen Thread aufmachen, deswegen... gibt es eine Kalender-gadget für iGoogle, dass auch automatisch die Feiertage anzeigt? Scheint eine Marktlücke zu sein
Zappelfry
Yay, endlich für Igoogle
baren
bild kann nicht angezeigt werden

Abfahrtszeiten als Firefox-Sidebar. Weder für das Skinnen noch für die Weiterentwicklung werde ich in den nächsten drei Monaten groß Zeit (=keine) haben.
tjay
ja... und wo gibts das?
baren
Noch nirgendwo, weil man die Haltestelle bisher nur im Quelltext ändern kann. Mal schauen, wie einfach das aus dem Opera-Widget zu portieren ist.
Mit der Umsetzung von Cross-Site-XML würde dann sowas aber ja sowieso überflüssig.
WU5
Unser Sigurd hat jetzt ein "Hardware-Widget" für unsere Bar gebastelt:

bild kann nicht angezeigt werden

bild kann nicht angezeigt werden

Gibt es sonst noch andere neue "Entwicklungen"?
jl
KNM
Zitat(WU5 @ 26 Aug 2008, 13:53)
Unser Sigurd hat jetzt ein "Hardware-Widget" für unsere Bar gebastelt:

bild kann nicht angezeigt werden

bild kann nicht angezeigt werden

Gibt es sonst noch andere neue "Entwicklungen"?
jl
*


Gibts das auch für iGoogle, BÜDDE!
Sigurd
das wird aber noch n bissl gemoddet, gerade das Gaffer zeugt davon, dass diese Lösung nur ein Provisorium ist.

@KNM: Nee, aber auf Wunsch vielleicht auch bald bei euch shifty.gif

---

Weitere Infos gibts hier:

Meine Homepage

- Der Sigurd im Urlaub

PS: An Version 1.2 wird gerade gearbeitet happy.gif
wicked
tja, wenn ich dafür mal zeit hätte würd ich gern eine komfortable verbindungsauskunft in qam mit einbauen...
aber der wu5-abfahrtsmonitor ist ja eh viel stilvoller wink.gif
aktsizr
Ä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'
JanLo
Hallo,

Für die Jünger der Dockapp-unterstützenden WindowManager, hier noch eine weitere Version in C++:
http://helios.wh2.tu-dresden.de/~losinshi/wm-vvo/

So sieht es dann aus:
bild kann nicht angezeigt werden bild kann nicht angezeigt werden

Jan
buggy
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ß
abadd0n
15:41:07 <cantrella> abadd0n: danke das hab ich auch schon gefunden aber das muss ich erst kompliieren und das is noch für kde 4.1 und funzt nich richtig
15:45:02 <cantrella> http://www.informatik.htw-dresden.de/~s58030/kde/

#a
stabilo
Offenbar hat sich auf den Seiten von der DVB was geändert. Der Monitor für die Linux-Konsole gibt nur noch leere Strings raus - ziemlich uninformativ ist das.

Benutzt den noch jemand und kann da mal nachschauen. Ich bin grad extrem unter Zeitrdruck mit meinen Beleg und kann mich frühestens am Wochende drum kümmern (wenn ich der einzige bin der das (noch) nutzt, hab ich halt Pech).
aktsizr
Ja, hier. Habs mal fix für dich gefixt, nehms ja auch immernoch immermal. Haben die &quot; 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'
Sigurd
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)
stabilo
@aktsizr Danke!
aktsizr
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'
stabilo
Nice. Danke!
buggy
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.
Sigurd
Nein, die URL ist so in Ordnung. Die läuft hier auch nicht anders, nur dass eben die Haltestelle anders ist, ansonsten aber gleich. Ob der vielen Änderungen würde ich die Ursache zunächst im PHP-Skript suchen, was du ja eigentlich auch mal hättest posten können smile.gif
aktsizr
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.
buggy
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("&quot;", "", $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("&quot;", "", $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;
}

?>
mestta10
Und wie nutze ich diese .php-Datei?
Chris
In das Verzeichnis deines lokalen Webservers legen und dann über http://localhost/dvb.php aufrufen wink.gif
Sigurd
Dazu sollte man vielleicht anmerken, dass der gemeine Windows-Nutzer keinen Webserver hat... rolleyes.gif

Wie auch immer, es führt kein Weg dran vorbei, dass ihr euch mal zum Beispiel mit dem Apachen bekannt macht smile.gif
Es sei denn, jemand würde das hosten...
Chris
Klar .. man könnte im Script z.B. alle <br> durch \n ersetzen und es im Terminal mit dem php-cli aufrufen wink.gif

Hosten, he? Man könnte auf diese Seite gehen: http://www.dvb.de/de/Fahrplan/Abfahrtsmonitor/index.aspx und dann auf die nächste Seite ein Lesezeichen setzen.
mestta10
Also ich würde gern ein Screenlet unter Gnome nutzen. So in etwa wie Qam einst funktionierte... Wenn man erst den Firefox aufmachen muss, kann man ja gleich zur offiziellen Seite gehen. Aber ein kleines Screenlet, dass auf dem Partybildschirm über den Beamer die nächsten Straßenbahnen anzeigt, wäre wirklich toll...
Sigurd
ein gdesklet wäre hier wohl das Mittel der Wahl, allerdings gibts dazu wohl noch keins sad.gif
müsste mal jemand programmieren, ich hab mich mit gdesklets leider noch nie beschäftigt.

allerdings findest du hier im Thread ein dockapp, welches dir auf dem Desktop frei konfigurierbar alles nötige darstellt, ist nur vielleicht etwas klein um es mit dem Beamer an die Wand zu werfen...

/edit: Link dazu...
Socres
ich hatte damit schonmal angefangen:
/index.ph...st&p=1047827599
Stormi
Jo Gemeinde,

für alle Gnome-Freunde hab ich hier mal was feines gebastelt. Benötigt wird Python 2.6 oder 2.7 und PyGTK. Getestet wurde auf Gnome 2.32 oder so.

Das ganze ist absolute Alpha-Ware und der Code so gut wie untergründig, weil wegen Faulheit. Daher auch keine Gewähr oder sowas. Evtl. vorhandene Sprengstoffschwankungen sind produktionsbedingt. Vielleicht mach ich das irgendwann mal in richtig.

Es handelt sich um ein Applet, dass man in ein Gnome-Panel adden kann. Das Applet zeigt die gewählte Haltestelle und die gewählte Richtung nebst verbleibender Zeit für die nächste Bahn im Panel an. Wenn man auf das Ding draufklickt, öffnet sich ein Fenster mit allen Bahnen und allen Richtungen für diese Haltestelle. Wenn der Webservice mal wieder nicht zu erreichen ist, wird "N/A" angezeigt und das Fenster bleibt leer. Evtl. explodiert auch irgendwas. Thats it. Siehe Screenshot:

[attachmentid=34623]

Wie von Gnome Applets gewohnt, besteht es aus zwei Teilen. Eine Installationsroutine gibt es natürlich nicht. Evtl. kommt der Kram bei euch woanders hin, das müsst ihr selbst rausfinden wink.gif

1. dvb_applet.server
Kommt normalerweise in /usr/lib/bonobo/servers/dvb_applet.server
Achtung: Die Datei enthält den Pfad zum Applet (s.u.). Falls der bei euch anders ist, ändert ihn.

2. dvb_applet.py (UTF-8)
Kommt normalerweise in /usr/libexec/dvb_applet.py"
Achtung: Die Datei muss ausführbar sein, also am besten mittels chmod 755 dvb_applet.py jede Menge Backdoors aufmachen haha.

Die Konfiguration der gewünschten Stadt, Haltestelle, Richtung etc. wird direkt im Header des Scripts vorgenommen. Viel Spaß ihr verfluchten Frickelkommunisten.
bunglefever
Zitat(Stormi @ 04 Jan 2011, 01:42)

bla




clap.gifheart.gif
Tavor
noobfrage: aber ich habs alles dahinkopiert etc und zugriffsrechte vergeben, wie bekomm ich das denn dann gestartet bzw. ins panel? über hinzufügen finde ich es nicht nicht, auch die benachrichtigungsanzeigen/felder sind dann plötzlich weg und wenn ichs als datei ausführe schießts mir das gesamte panel ab.

bei windows war das einfacher :P
Stormi
Pro-Tipp: Mal Gnome neugestartet nachdem du die Files in den Verzeichnissen platziert hast? Also mal ausloggen und wieder einloggen oder so.

Ansonsten: Was für ein Linux hast du denn?

Normal klickt man mit rechts auf das Panel -> Add to Panel -> DVB Applet anklicken. Der Eintrag taucht dort auf, sobald die Datei "dvb_applet.server" am richtigen Ort ist und das Panel das auch gecheckt hat.

Das Script direkt auszuführen ist nicht zu empfehlen wink.gif

Auch: Bei längerem Betrieb scheint das Plugin träge zu werden. Kann aber auch daran liegen, dass ich grad world update mache.
Tavor
habe Ubuntu 10.04., gnome 2.3.2, python 2.6

habs nochmal probiert: nach dem gnome neustart fehlen alle applets und es hagelt fehlermeldungen a la
"Das Panel ist beim Laden von »OAFIID:GNOME_NotificationAreaApplet« auf ein Problem gestoßen."
könnte es am kopieren liegen? ich muss mich als root anmelden, weil ich sonst keinen zugriff habe auf die geforderten verzeichnisse habe. außerdem habe ich den /libexec-ordner neu angelegt (gibts nämlich nicht) und da die .py datei reinkopiert. muss die evtl doch woanders rein?
Stormi
Wie ich soeben durch eine wunderschöne Nerdfee lernen durfte, gehört die dvb_applet.py bei Ubuntu nach /usr/lib/gnome-applets.

Dies ist in der dvb_applet.server entsprechend zu vermerken: location="neue/location">

Root-Zugriff auf die Verzeichnisse sollte klar sein.
Tavor
hat geklappt danke für deine mühe, danke liebe nerdfee smile.gif
cantrella
clap.gif und mwah.gif an Stormi und die Nerdfee
Stormi
Wie oben schon erwähnt: Das Plugin scheint nach einigen Stunden zu hängen, was sich darin äußert, dass man das Fenster mit der Linienübersicht nicht mehr aufmachen kann und das Gnome-Panel im Arsch ist oder so. Schätze ich hab vergessen irgendwo zwischendrin aufzuräumen. Falls das bei euch vorkommt, lasst es mich wissen smile.gif
mestta10
Schön, dass es wieder etwas Bewegung hier gibt. Nicht alle haben so viel Platz im Panel. Kann man den Panel-Knopf auch kleiner machen bzw. abgekürzt darstellen?
Stormi
Also 1. gibt es eine neue Version, die hoffentlich nicht mehr sinnlos rumhängt und das Panel dichtmacht, wenn der VVO-Service mal wieder Fehler spuckt: klicksu

2. Für Python-Könner ist der Code zur Anzeige im Panel in Zeile 66 versteckt. Vorschläge zur Optimierung bei wenig Platz werden gerne gehört, aktuell fällt mir grad nichts ein.

3. Es ist ein kompletter rewrite (weil Code==untergründig) geplant. Es soll auch einen Webservice (und einen Daemon) geben, den man auf einem Tomcat o. ä. deployen kann (was den Webservice angeht) und für den es dann verschiedene Front-Ends geben kann, wie zum Beispiel das Plugin. Der Service lässt sich dann in einem Heimnetzwerk prima nutzen, um z. B. auch Windows-Applets für die Sidebar möglich zu machen. Fertigstellung: When it's done.
Chris
Sehr schön. Dann kann man das Ding wenigstens noch verwenden, wenn Gnome-Shell draußen ist.
mcnesium
kann man das ding auch mehrfach mit verschiedenen einstellungen verwenden, wenn man zwei 30" monitore hat und in ner gegend wohnt wo ganz viele bahnen in der nähe fahren?
bunglefever
Zitat(mcnesium @ 05 Jan 2011, 11:40)
kann man das ding auch mehrfach mit verschiedenen einstellungen verwenden, wenn man zwei 30" monitore hat und in ner gegend wohnt wo ganz viele bahnen in der nähe fahren?
*



ich schätze, wenn es einmal stabil is, reicht es, das script zu kopieren und umzubenennen, die jeweiligen Angaben zu ändern und dann alle ins panel einzufügen?

biggrin.gif
anatoL
Ooooh, Software! Davon habe ich schonmal gehört! Also - ich würde ja eher ein config file verwenden (python hat .ini und json parser) und dem tool einen parameter für --config-file=... mitgeben. Falls man bei gnome applets keine Parameter angeben kann -> wrapperskript, das das erledigt.
anatoL
(einen Parser für cmdline options hat es auch ...)
(und default config file wäre dann ~/.dvbdings oder ~/.gnomeWHATEVER/rtfm/keine/ahnung/was/gnome/da/vorgibt )
anatoL
Zitat(Stormi @ 04 Jan 2011, 19:15)
Wie ich soeben durch eine wunderschöne Nerdfee lernen durfte, gehört die dvb_applet.py bei Ubuntu nach /usr/lib/gnome-applets.
*


Also ich würde ja eher /usr/local/lib/gnome-applets nehmen, wenn gnome das zulässt (sollte) - nach /usr/lib gehören m.E. nur Sachen, die einer Paketverwaltung unterliegen.
seb
Zitat(anatoL @ 05 Jan 2011, 12:55)
Also ich würde ja eher /usr/local/lib/gnome-applets nehmen, wenn gnome das zulässt (sollte) - nach /usr/lib gehören m.E. nur Sachen, die einer Paketverwaltung unterliegen.
*


was anatol sagt
Stormi
Wie schon mehrfach geschrieben erhebt der Code keinen Anspruch auf eine irgendwie geartete Qualität, was eben auch die Einstellung der Haltestelle angeht. Diese Einstellung ist in richtig wenn dann nur über das Applet selbst änderbar, alles andere ist natürlich quatsch.

Was den Ablageort angeht, hat er natürlich recht. /usr/local ist sicher besser geeignet, wenn man dem örtlichen Paketmanager nicht ins Handwerk pfuschen will.

Ich habe eine kleine Korrektur am Script vorgenommen, die das Abfrageintervall auf 30 Sekunden heraufsetzt. Die Version von heute früh hatte 10 Sekunden weil wegen Debug wink.gif

Die nächste Version wird dann eher in Richtung "richtig" gehen und ich werde sowohl die Konfiguration, als auch unterschiedliche Anzeigemöglichkeiten (weil wegen Platz) einstellbar über UI einbauen. Evtl. wirds sogar ein Installscript geben. Stay tuned.
Socres
Hier mal eine schmutzige Implementierung eines UPnP-Device welches folgende Möglichkeiten bietet:

SetHaltestelle
SetOrt
GetHaltestelleData

ACHTUNG, DAS IST NUR DEMOSTUFF
Sonderzeichen werden nicht behandelt etc

Kontrolliert werden kann das Device mit jedem Universal-ControlDevice oder mit dem welches ich als nächstes basteln werde, was aber noch ein wenig dauern dürfte.

man braucht folgende libs:
ClingCore
org.json

DVBService.java:
CODE


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package device;

import java.io.*;
import java.util.Date;
import java.net.*;
import org.json.JSONArray;
import org.json.JSONException;

import org.teleal.cling.binding.annotations.*;

@UpnpService(
serviceId = @UpnpServiceId("DVBService"),
serviceType = @UpnpServiceType(value = "DVBService", version = 1)
)

/**
*
* @author kauerauf
*/
public class DVBService {

@UpnpStateVariable(defaultValue = "0")
private String haltestelle = "Sachsenallee";

@UpnpStateVariable(defaultValue = "0")
private String ort = "Dresden";

@UpnpStateVariable(defaultValue = "0")
private String haltestelledata = "";


// @UpnpStateVariable(defaultValue = "0")
// private long letzteakt = 0;

@UpnpAction
public void setHaltestelle(@UpnpInputArgument(name = "SetHaltestelle")
   String newHst) {
 haltestelle = newHst;
}

@UpnpAction
public void setOrt(@UpnpInputArgument(name = "SetOrt")
   String newOrt) {
 ort = newOrt;
}

@UpnpAction(out = @UpnpOutputArgument(name = "GetHaltestelleData"))
public String getHaltestelledata() throws MalformedURLException, IOException, JSONException {
 return getDVBFromServer(ort, haltestelle).toString();
}

// private long getCurrentTime() {
//  Date date = new Date();
//  return date.getTime();
// }

private JSONArray getDVBFromServer(String ort, String hst) throws MalformedURLException, IOException, JSONException {

 String server = "http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?";
 String params = "ort=" + ort + "&hst=\"" + hst + "\"";
 
//  URL url = new URL(server + params);

 URLConnection connection = new URL(server + params).openConnection();

//  URLConnection connection = url.openConnection();
 BufferedReader input = new BufferedReader(
  new InputStreamReader(
   connection.getInputStream()));
 String inputString;
 String DVBDataS = "";
 while((inputString = input.readLine()) != null)
  DVBDataS = DVBDataS + inputString;
 input.close();

 JSONArray DVBData = new JSONArray(DVBDataS);

 return DVBData;
}

}


Main.java
CODE


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package device;

import java.io.IOException;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.teleal.cling.UpnpService;
import org.teleal.cling.UpnpServiceImpl;
import org.teleal.cling.binding.*;
import org.teleal.cling.binding.annotations.*;
import org.teleal.cling.model.*;
import org.teleal.cling.model.meta.*;
import org.teleal.cling.model.types.*;
/**
*
* @author kauerauf
*/
public class Main implements Runnable{

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) throws MalformedURLException, IOException, JSONException {
       // TODO code application logic here
Thread serverThread = new Thread(new Main());
serverThread.setDaemon(false);
serverThread.start();
    }

   public void run() {
try {
    final UpnpService upnpService = new UpnpServiceImpl();
    Runtime.getRuntime().addShutdownHook(new Thread() {
     @Override
     public void run() {
      upnpService.shutdown();
     }
    });
    upnpService.getRegistry().addDevice(
     createDevice()
    );
    } catch(Exception e) {
     System.err.println("Exception: " +e);
     e.printStackTrace(System.err);
     System.exit(1);
     }
    }

   LocalDevice createDevice() throws ValidationException {
    DeviceIdentity identity = new DeviceIdentity(UDN.uniqueSystemIdentifier("DVB Haltestellenauskunft"));
    DeviceType type = new UDADeviceType("Haltestellenauskunft", 1);
    DeviceDetails details = new DeviceDetails("Freundliche DVB Auskunft", new ManufacturerDetails("Stefan Kauerauf"), new ModelDetails("DVB Haltestellenauskunft", "gibt aktuelle Auskunft über abgehende Nahverkehrsmittel", "v1"));
        LocalService<DVBService> dvbservice = new AnnotationLocalServiceBinder().read(DVBService.class);
    dvbservice.setManager(new DefaultServiceManager(dvbservice, DVBService.class));
    return new LocalDevice(identity, type, details, dvbservice);
   }
}


bevor jetzt alle fragen was sie damit sollen, nein die meisten werdens nicht brauchen, aber vielleicht interessierts jemanden oder er möchte irgendwas damit basteln.

€: falls sich einer wundert, wieso ich den überflüssigen JSON-Schnickschnack mache, das ist gedacht um die Daten im Device noch einfach anzupassen. Leider kann UPnP so einfach kein JSONArray Objekt übergeben, dh der String muss dann auf dem ControlDevice wieder in JSON umgewandelt werden.