bumblebee-status/bumblebee/modules/weather.py

46 lines
1.5 KiB
Python
Raw Normal View History

# pylint: disable=C0111,R0903
"""Displays the temperature on the current location based on the ip
Requires the following python packages:
* urllib
"""
import bumblebee.input
import bumblebee.output
import bumblebee.engine
import json
from urllib.request import urlopen
class Module(bumblebee.engine.Module):
def __init__(self, engine, config):
super(Module, self).__init__(engine, config,
bumblebee.output.Widget(full_text=self.temperature)
)
self._timer = 0
self._temperature = 0
def temperature(self, widget):
return "{}°C".format(self._temperature)
def update(self, widgets):
if self._timer == 0:
location_url = 'http://ipinfo.io/json'
location = json.loads(urlopen(location_url).read())
# city = location['city']
# country = location['country']
coord = location['loc'].split(',')
# weather_url = 'http://api.openweathermap.org/data/2.5/weather?q={city},{country}'.format(city=city, country=country)
weather_url = 'http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid=9c672428ac92772c6437191a43a5b13f&units=metric'.format(lat=coord[0], lon=coord[1])
weather = json.loads(urlopen(weather_url).read())
self._temperature = weather['main']['temp']
self._timer += 1
return
if self._timer < 300:
self._timer += 1
return
self._timer = 0
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4