Initial commit
This commit is contained in:
commit
88b9722052
16
README
Normal file
16
README
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Python Weather
|
||||||
|
|
||||||
|
v 0.1
|
||||||
|
Leander Hutton
|
||||||
|
leander@one-button.org
|
||||||
|
|
||||||
|
This is a little script that retrieves weather information and prints it at the console. No more bother of opening a web browswer!
|
||||||
|
|
||||||
|
Usage: weather -[z,w] -[c,f] -e (optional) <zipcode || woeid>
|
||||||
|
-[z.w] : use ZipCode (z) or WOEID (w)
|
||||||
|
-[c,f] : units Celcius (c default) or Fahrenheit (f)
|
||||||
|
-e : print extended forcast information
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
urllib2
|
||||||
|
xml.dom
|
116
weather
Executable file
116
weather
Executable file
|
@ -0,0 +1,116 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
import urllib2
|
||||||
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
WEATHER_URL_ZIP = 'http://xml.weather.yahoo.com/forecastrss?p=%s&u=%s'
|
||||||
|
WEATHER_URL_WOEID = 'http://xml.weather.yahoo.com/forecastrss?w=%s&u=%s'
|
||||||
|
WEATHER_NS = 'http://xml.weather.yahoo.com/ns/rss/1.0'
|
||||||
|
|
||||||
|
# Portions of this function borrowed from Yahoo's developer page.
|
||||||
|
# http://developer.yahoo.com/python/python-xml.html
|
||||||
|
def getWeather(location, locationtype, units):
|
||||||
|
if locationtype == 'zip':
|
||||||
|
url = WEATHER_URL_ZIP % (location,units)
|
||||||
|
dom = minidom.parse(urllib2.urlopen(url))
|
||||||
|
forecasts = []
|
||||||
|
|
||||||
|
elif locationtype == 'woeid':
|
||||||
|
url = WEATHER_URL_WOEID % (location,units)
|
||||||
|
dom = minidom.parse(urllib2.urlopen(url))
|
||||||
|
forecasts = []
|
||||||
|
|
||||||
|
else:
|
||||||
|
print "Not a valid location code"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
for node in dom.getElementsByTagNameNS(WEATHER_NS, 'forecast'):
|
||||||
|
forecasts.append({
|
||||||
|
'date': node.getAttribute('date'),
|
||||||
|
'low': node.getAttribute('low'),
|
||||||
|
'high': node.getAttribute('high'),
|
||||||
|
'condition': node.getAttribute('text')
|
||||||
|
})
|
||||||
|
conditions = dom.getElementsByTagNameNS(WEATHER_NS, 'condition')[0]
|
||||||
|
return {
|
||||||
|
'current_condition': conditions.getAttribute('text'),
|
||||||
|
'current_temp': conditions.getAttribute('temp'),
|
||||||
|
'forecasts': forecasts,
|
||||||
|
'title': dom.getElementsByTagName('title')[0].firstChild.data
|
||||||
|
}
|
||||||
|
|
||||||
|
def printForecast(forecasts, units):
|
||||||
|
|
||||||
|
print("\nExtended Forecast: \n")
|
||||||
|
for day in forecasts:
|
||||||
|
for item in day:
|
||||||
|
if item == "high":
|
||||||
|
print "High" + '\t' + day[item] + units.upper()
|
||||||
|
elif item == "low":
|
||||||
|
print "Low" + '\t' + day[item] + units.upper()
|
||||||
|
elif item == "condition":
|
||||||
|
print day[item] + '\n'
|
||||||
|
else:
|
||||||
|
print day[item]
|
||||||
|
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print ("Usage: weather -[z,w] -[c,f] -e (optional) <zipcode || woeid>")
|
||||||
|
print ("-[z.w] : use ZipCode (z) or WOEID (w)")
|
||||||
|
print ("-[c,f] : units Celcius (c default) or Fahrenheit (f) ")
|
||||||
|
print ("-e : print extended forcast information ")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
units='c'
|
||||||
|
extendedforecast=False
|
||||||
|
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], "hezwcf", ["help", "halp", "location"])
|
||||||
|
if not opts:
|
||||||
|
print ("No options supplied")
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
for opt, arg in opts:
|
||||||
|
if opt in ("-h", "--help", "--halp"):
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
elif opt == "-c":
|
||||||
|
units='c'
|
||||||
|
elif opt == "-f":
|
||||||
|
units='f'
|
||||||
|
elif opt == "-z":
|
||||||
|
locationtype="zip"
|
||||||
|
elif opt == "-w":
|
||||||
|
locationtype="woeid"
|
||||||
|
elif opt == "-e":
|
||||||
|
extendedforecast=True
|
||||||
|
else:
|
||||||
|
print ("Unknown option.")
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
if not args:
|
||||||
|
print ("No location specified")
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
else:
|
||||||
|
location=args[0]
|
||||||
|
|
||||||
|
current_conditions = getWeather(location, locationtype, units)
|
||||||
|
forecasts = current_conditions['forecasts']
|
||||||
|
|
||||||
|
print (current_conditions['title'])
|
||||||
|
print ("Currently %s%s%s and %s" % (current_conditions['current_temp'],unichr(176),units.upper(),current_conditions['current_condition']))
|
||||||
|
if extendedforecast is True:
|
||||||
|
printForecast(forecasts, units)
|
||||||
|
|
||||||
|
except getopt.GetoptError,e:
|
||||||
|
print e
|
||||||
|
usage()
|
||||||
|
sys.exit(3)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user