Wetter Script

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
defcon
User
Beiträge: 14
Registriert: Donnerstag 20. Januar 2005, 15:22
Wohnort: Bruchsal

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)
defcon
User
Beiträge: 14
Registriert: Donnerstag 20. Januar 2005, 15:22
Wohnort: Bruchsal

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)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
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?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

oh, da hab ich auf die schnelle celsius und fahrenheit verwechselt...
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
defcon
User
Beiträge: 14
Registriert: Donnerstag 20. Januar 2005, 15:22
Wohnort: Bruchsal

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.

;)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

wo hast du das denn her?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Damit bekommst du auf jeden Fall deutsche Texte:

Code: Alles auswählen

http://www.google.com/ig/api?weather=Karlsruhe&hl=de
defcon
User
Beiträge: 14
Registriert: Donnerstag 20. Januar 2005, 15:22
Wohnort: Bruchsal

@ice2k
ich weiß, dann bekomme ich aber die Fehlermeldungen aus dem 2. Post.

@jbs
von hier: http://pbrisbin.com:8080/scripts.html
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zum kaputten XML: Falls du mit externen Modulen leben kannst, hilft dir der fehlertolerante Parser BeautifulSoup (Debian-Paket python-beautifulsoup) bestimmt weiter.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

da gibts was, was für dich interressant sein könnte:

http://www.python-forum.de/topic-20185.html
the more they change the more they stay the same
defcon
User
Beiträge: 14
Registriert: Donnerstag 20. Januar 2005, 15:22
Wohnort: Bruchsal

Ohjesses... als Einsteiger ist das natürlich harter Tobak.
Ich muss da erstmal durchsteigen und das auch verstehen.

Trotzdem Danke.
Antworten