Leider hab ich keine Zeit, eine schicke GUI (evtl als Applet in der Gnome Leiste) zu basteln, aber hier schonmal ein kleines quick'n'dirty Python interface:
CODE
import urllib2, re, htmlentitydefs
def getHaltestellen():
"""Gibt alle Haltestellen in Dresden zurück (Liste aus Strings)"""
text = "".join(urllib2.urlopen("http://www.dvbag.de/fahrplan/default.asp").readlines())
return re.findall("""<option value="([^"]+)".""", text[text.find("<select name=\"searchtxt\"") :text.find("<input type=\"submit\" value=\"Anzeigen\"")])
def getHaltestellenInfo(hst):
"""Gibt die Info über die Haltestelle hst zurück (Liste aus Listen aus drei Strings). hst sollte dabei eine Haltestelle aus getHaltestellen() sein."""
text = "".join(urllib2.urlopen("http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=" + hst).readlines())
return eval(substEntities(text))
def substEntities(text):
"""Ersetzt Markup Languages Entities"""
text = re.sub("(&#\d{3,4};)", numsub, text)
text = re.sub("(&([a-zA-Z]{2,});)", namesub, text)
return text
def namesub(matchobj):
try:
return chr(htmlentitydefs.name2codepoint[matchobj.group(0)[1:-1]])
except KeyError:
return ""
def numsub(matchobj):
return chr(int(matchobj.group(0)[2:-1]))
meine Anfrage getHaltestellenInfo(getHaltestellen()[38]) sieht dann so aus:
[['81', 'Bahnhof Neustadt', '14'], ['81', 'Wilschdorf', '17'], ['328', 'Radeburg Busbahnhof', '34'], ['81', 'Wilschdorf', '34'], ['81', 'Bahnhof Neustadt', '34'], ['81', 'Wilschdorf', '54'], ['328', 'Dresden Bahnhof Neustadt', '54'], ['81', 'Bahnhof Neustadt', '54'], ['81', 'Wilschdorf', '74'], ['81', 'Bahnhof Neustadt', '74']]
Die Rückgabe ist also eine Python Datenstruktur, lässt sich also hervorragend auswerten.
Spaß viel!
edit:
ahso, evtl. müsst ihr noch die Sonderzeichen anders kodieren: encode('utf-8') z.B.
edit again: Welche Ironie... als ich das schrieb, hab ich meine Straßenbahn verpasst...
Dieser Beitrag wurde von Sultaaan: 19 Dec 2007, 17:39 bearbeitet