init
This commit is contained in:
26
Readme.md
Normal file
26
Readme.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# w is for Veður.is
|
||||
|
||||
This scripts calls the http://www.vedur.is API (Icelandic Meteorological Office) and retrievs the weather information for selected location.
|
||||
|
||||
## Configure
|
||||
|
||||
The time range can be specified by seletcting the end point.
|
||||
|
||||
`mytime += timedelta(hours=6)
|
||||
`
|
||||
|
||||
The default location can be also changed:
|
||||
|
||||
`location = 1 # Reykjavik`
|
||||
|
||||
## Notification
|
||||
|
||||
On posix systems, an onscreen notification is available.
|
||||
|
||||
|
||||
`from gi.repository import Notify`
|
||||
|
||||
### Term of use
|
||||
|
||||
Don't DDoS vedur.is please.
|
||||
|
102
w.py
Normal file
102
w.py
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
# TODO: aliast in bashrc
|
||||
# TODO pass argv to set time interval and maybe even the location ;D
|
||||
# FIXME, there is a bug with NULL/None values
|
||||
import requests, os, sys
|
||||
from xml.etree import ElementTree
|
||||
import urllib
|
||||
from datetime import date, datetime, time, timedelta
|
||||
from pprint import pprint
|
||||
import platform
|
||||
|
||||
|
||||
os.system('clear')
|
||||
|
||||
location = 1 # Reykjavik
|
||||
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
justnow = datetime.strptime(now, "%Y-%m-%d %H:%M:%S")
|
||||
mytime = datetime.strptime(now, "%Y-%m-%d %H:%M:%S")
|
||||
# set the time range for the upcoming forecast
|
||||
mytime += timedelta(hours=6)
|
||||
|
||||
xmlurl = 'http://xmlweather.vedur.is'
|
||||
|
||||
url = xmlurl + '?op_w=xml&type=obs&lang=en&view=xml&ids=' + str(location)
|
||||
|
||||
response = requests.get(url, stream=True)
|
||||
response.raw.decode_content = True
|
||||
events = ElementTree.iterparse(response.raw)
|
||||
|
||||
|
||||
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
||||
for elem, event in events:
|
||||
|
||||
if event.tag == 'name':
|
||||
print "Location: ", event.text
|
||||
name = event.text
|
||||
|
||||
if event.tag == 'time':
|
||||
print "Time: ", event.text, "UTC"
|
||||
|
||||
if event.tag == 'T':
|
||||
print "Temperature: ", event.text, "°C"
|
||||
temperature = event.text
|
||||
|
||||
if event.tag == 'W':
|
||||
print "Conditions: ", event.text
|
||||
conditions = event.text
|
||||
|
||||
if event.tag == 'F':
|
||||
print "Wind: ", event.text, "m/s", " » " ,int(event.text) * 3.6, "km/h"
|
||||
wind = event.text
|
||||
|
||||
|
||||
|
||||
url_update = xmlurl + '?op_w=xml&type=forec&lang=en&view=xml&ids=' + str(location)
|
||||
|
||||
response_update = requests.get(url_update, stream=True)
|
||||
response_update.raw.decode_content = True
|
||||
events_update = ElementTree.iterparse(response_update.raw)
|
||||
|
||||
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
||||
print "\n>>>> Upcoming: \n"
|
||||
|
||||
|
||||
for elem, even in events_update:
|
||||
|
||||
if even.tag == 'T':
|
||||
|
||||
temp = even.text
|
||||
|
||||
if even.tag == 'W':
|
||||
condi = even.text
|
||||
|
||||
if even.tag == 'F':
|
||||
wind = even.text
|
||||
|
||||
if even.tag == 'ftime':
|
||||
|
||||
time = datetime.strptime(even.text,'%Y-%m-%d %H:%M:%S')
|
||||
|
||||
if time >= justnow and time < mytime:
|
||||
print "Time:", time, "UTC"
|
||||
print "Temperature: ", temp, "°C"
|
||||
print "Wind: ", wind, "m/s", " » " ,int(wind) * 3.6, "km/h"
|
||||
print "Conditions:", condi, "\n"
|
||||
#break # the fall
|
||||
|
||||
|
||||
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
||||
|
||||
# the part for notification on linux, extra check up for mac
|
||||
if os.name is "posix" and platform.system() == "Linux":
|
||||
from gi.repository import Notify
|
||||
|
||||
notification_text = (name + "\n" + temperature + " C\n" + str(int(wind) *3.6) + " km/h\n Conditions: " + str(conditions))
|
||||
Notify.init("Weather")
|
||||
|
||||
Hello = Notify.Notification.new("Vedur.is", notification_text)
|
||||
Hello.show()
|
||||
sys.exit()
|
Reference in New Issue
Block a user