initial commit, weather applet for i3blocks

This commit is contained in:
simon 2021-01-24 13:48:26 +07:00
parent 7baa33e332
commit dd1592a7e3
2 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# replace with your values and remove .sample from filename
[api]
openweathermap_api_key = aaaa1111aaaa1111aaaa1111aaaa1111
lat = 40.71
lon = -74.00

85
weather_applet/weather.py Executable file
View File

@ -0,0 +1,85 @@
#!/usr/bin/env python3
import requests
from time import sleep
import configparser
import sys, os
iconlist = {
'01d': '',
'02d': '',
'03d': '',
'04d': '',
'09d': '',
'10d': '',
'11d': '',
'13d': '',
'50d': '🌫',
'01n': '',
'02n': '',
'03n': '',
'04n': '',
'09n': '',
'10n': '',
'11n': '',
'13n': '',
'50n': '🌫'
}
def get_config(config_path):
""" read out the .env file and return config values """
# parse
config_parser = configparser.ConfigParser()
config_parser.read(config_path)
# return false on error
if config_parser.options('api') != ['openweathermap_api_key', 'lat', 'lon']:
print('config parse error')
return False
else:
api_key = config_parser.get('api', 'openweathermap_api_key')
lat = config_parser.get('api', 'lat')
lon = config_parser.get('api', 'lon')
return api_key, lat, lon
def get_data(api_key, lat, lon):
""" get celsius and icon_id based on lat and lon """
url = "https://api.openweathermap.org/data/2.5/weather?&units=metric&appid=" \
+ api_key + "&lat=" + lat + "&lon=" + lon
# try up to 3 times
for i in range(1, 4):
try:
r = requests.get(url, timeout=5)
except:
sleep(int(i) * 30)
else:
break
# parse response
json = r.json()
celsius = round(json['main']['temp'])
celsius_pretty = str(celsius) + "°"
icon_ID = json['weather'][0]['icon']
icon = iconlist.get(icon_ID)
# return
return celsius_pretty, icon
def main():
""" main function to run """
# get config file path relative to script file
config_path = os.path.dirname(sys.argv[0]) + '/config'
api_key, lat, lon = get_config(config_path)
# make the call
celsius_pretty, icon = get_data(api_key, lat, lon)
# print three lines for i3blocks
print(icon, celsius_pretty)
print(icon, celsius_pretty)
print()
# start from here
if __name__ == '__main__':
main()