Mercurial > pycweather
view pycweather/weather.py @ 3:a754b01955c7
1st stage of work for final 0.2.0
| author | Vlad Glagolev <enqlave@gmail.com> |
|---|---|
| date | Mon, 27 Jul 2009 00:02:10 +0400 |
| parents | |
| children | 5e26e170a121 |
line wrap: on
line source
# -*- coding: utf-8 -*- # # This file is part of PycWeather # # Copyright (c) 2009 Vlad Glagolev <enqlave@gmail.com> # All rights reserved. # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ pycweather/weather.py: Weather class """ from cStringIO import StringIO from urllib2 import urlopen from lxml.etree import parse, tostring, fromstring, XMLSyntaxError from pycweather import __version__ # correct url to the XOAP service XOAP_URL = "http://xoap.weather.com/" class Weather: def __init__(self): self.xsl = None self.id = None self.key = None def auth(self, credentials): try: self.id, self.key = credentials.split(":") except: print "Invalid credentials" def search(self, location): data = urlopen(XOAP_URL + "search/search?where=%s" % location) tree = data.read() try: xml = fromstring(tree) except XMLSyntaxError: print "XML syntax error occured while parsing content: ", tree return -1 if not xml.getchildren(): print "No location has been found!" elif xml.tag == "error": print "Error: %s" % xml.getchildren()[0].text else: print "Code | Location\n--------+----------" for loc in xml.xpath("loc"): print loc.get("id") + ": " + loc.text print "--\nTo catch weather information use: pycweather -c <code>" def load(self, xsl_file): try: self.xsl = parse(xsl_file) except XMLSyntaxError: print "XML syntax error occured while parsing XSL stylesheet" except: print "Unable to read XSL file" def preview(self, code, days, unit): try: data = urlopen(XOAP_URL + \ "weather/local/%s?cc=*&dayf=%d&unit=%s&par=%s&key=%s" % \ (code, days, unit, self.id, self.key)) except: print "Unable to connect to %s" % XOAP_URL return -1 tree = data.read() try: xml = fromstring(tree) except XMLSyntaxError: print "XML syntax error occured while parsing content: ", tree return -1 if xml.tag == "error": print "Error: %s" % xml.xpath("err")[0].text return -1 else: document = parse(StringIO(tostring(xml))) print document.xslt(self.xsl)
