Seite 1 von 1

Wetter Script

Verfasst: Donnerstag 17. September 2009, 14:35
von defcon
Hallo
ich hab dieses Wetterscript, und wollte die Ausgabe auf deutsch. Die Daten werden von einer xml von Google abgerufen.
Damit die Temperatur in Celsius angezeigt wird, hab ich temp_f in temp_c umgeändert.
Trotzdem werden die Temperaturen in Fahrenheit und die Texte immernoch in Englisch ausgegeben.

Schauts euch mal bitte an woran das liegen könnte.

Danke und Gruß

Script:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import urllib
from string import maketrans
from xml.sax import handler, parseString

class ElementProcesser(handler.ContentHandler):
  def startElement(self, name, attrs):
    if name == "city":
      print attrs["data"]
    elif name == "current_conditions":
      print "    Currently:"
    elif name == "condition":
      print "        " + attrs["data"]
    elif name == "day_of_week":
      print "    " + self.getDayOfWeek(attrs["data"])
    elif name == "temp_c":
      print "        Temp: " + attrs["data"] + " C"
    elif name == "low":
      print "        L:    " + attrs["data"] + " C"
    elif name == "high":
      print "        H:    " + attrs["data"] + " C"

  def getDayOfWeek(self,day):
    if day == "Mo.":
      return "Montag"
    elif day == "Di.":
      return "Dienstag"
    elif day == "Mi.":
      return "Mittwoch"
    elif day == "Do.":
      return "Donnerstag"
    elif day == "Fr.":
      return "Freitag"
    elif day == "Sa.":
      return "Samstag"
    elif day == "So.":
      return "Sonntag"
    else:
      return day

f = urllib.urlopen("http://www.google.com/ig/api?weather=Karlsruhe")
xml = f.read()
f.close()

trans=maketrans("\xE4\xC4\xF6\xD6\xFC\xDC\xDF","aAoOuUs")
xml = xml.translate(trans)

Verfasst: Donnerstag 17. September 2009, 14:42
von defcon
Ok, nächste Kuriosität..
Ich änder die TLD von .com auf .de ab, und schon bekomme ich Fehlermeldungen (bei .com nicht).

Code: Alles auswählen

./weather.py 
Karlsruhe, BW
    Currently:
        Meistens bewolkt
        Temp: 19 C
Traceback (most recent call last):
  File "./weather.py", line 52, in <module>
    parseString(xml,ElementProcesser())
  File "/usr/lib64/python2.6/xml/sax/__init__.py", line 49, in parseString
    parser.parse(inpsrc)
  File "/usr/lib64/python2.6/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib64/python2.6/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib64/python2.6/xml/sax/expatreader.py", line 211, in feed
    self._err_handler.fatalError(exc)
  File "/usr/lib64/python2.6/xml/sax/handler.py", line 38, in fatalError
    raise exception
xml.sax._exceptions.SAXParseException: <unknown>:1:522: not well-formed (invalid token)

Verfasst: Donnerstag 17. September 2009, 14:46
von jbs
temp_c liefert die Grad in C
low und high sind aber immer Fahrenheit, weshalb du das umrechnen musst.

``day`` nimmt englische Werte an und deshalb solltest du es lieber mit englischen Namen vergleichen

Schau dir mal bitte einmal pep 8 an und nutze dicts für die vergleiche


Außerdem ist es ein Unterschied, ob du die Seite mit einem Browser oder über python öffnest. Der Browser sagt google, dass du deutsch bist.

Verfasst: Donnerstag 17. September 2009, 15:02
von BlackJack
@defcon: Warum denn SAX und nicht ElementTree?

`getDayOfWeek()` ist keine Methode und das lässt sich mit einem Dictionary, das die kurzen auf die langen Namen abbildet eleganter lösen als mit den ganzen ``elif``\s.

Das ersetzen der Umlaute ist ziemlich fragil, da sollte man lieber ordentlich mit Unicode arbeiten.

Das macht Google allerdings auch nicht, denn dass die Latin-1 in dem XML verwenden, ohne das ordnungsgemäss zu deklarieren ist einfach falsch. Der Parser beschwert sich also zurecht, dass er kaputtes XML bekommt.

@jbs: Also ich habe hier so eine XML-Datei von Google rumliegen von vor ein paar Tagen (da hat schon einmal jemand so ein Skript schreiben wollen -- Hausaufgabe!?) und da sind die Temperaturen bei der Vorhersage eindeutig in Grad Celsius angegeben. Etwas weiter am Anfang steht aber auch '<unit_system data="SI" />' -- steht da bei Dir etwas anderes?

Verfasst: Donnerstag 17. September 2009, 15:09
von jbs
oh, da hab ich auf die schnelle celsius und fahrenheit verwechselt...

Verfasst: Donnerstag 17. September 2009, 15:21
von defcon
BlackJack hat geschrieben:@defcon: Warum denn SAX und nicht ElementTree?
Weil ..
1) ich noch absoluter Anfänger bin und das nicht kenne
2) ich das script schon fertig so runtergeladen habe, nur eben englisch.

;)

Verfasst: Donnerstag 17. September 2009, 15:22
von jbs
wo hast du das denn her?

Verfasst: Donnerstag 17. September 2009, 15:30
von ms4py
Damit bekommst du auf jeden Fall deutsche Texte:

Code: Alles auswählen

http://www.google.com/ig/api?weather=Karlsruhe&hl=de

Verfasst: Donnerstag 17. September 2009, 16:07
von defcon
@ice2k
ich weiß, dann bekomme ich aber die Fehlermeldungen aus dem 2. Post.

@jbs
von hier: http://pbrisbin.com:8080/scripts.html

Verfasst: Donnerstag 17. September 2009, 16:19
von snafu
Zum kaputten XML: Falls du mit externen Modulen leben kannst, hilft dir der fehlertolerante Parser BeautifulSoup (Debian-Paket python-beautifulsoup) bestimmt weiter.

Verfasst: Donnerstag 17. September 2009, 16:53
von Dav1d
da gibts was, was für dich interressant sein könnte:

http://www.python-forum.de/topic-20185.html

Verfasst: Donnerstag 17. September 2009, 17:32
von defcon
Ohjesses... als Einsteiger ist das natürlich harter Tobak.
Ich muss da erstmal durchsteigen und das auch verstehen.

Trotzdem Danke.