1
0
Files
witbierbot/witbierbot.py
2019-02-25 16:50:08 +01:00

72 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Read weather predictions for the next days, and if it's high enough,
recommend that Dennis buys witbier.
"""
import datetime
import json
import os
import textwrap
import sys
from collections import defaultdict
from urllib.request import urlopen
def load_weather():
url = 'https://api.openweathermap.org/data/2.5/forecast?q=Leiden' \
+ '&units=metric' \
+ '&appid=' + os.environ['API_KEY']
result = urlopen(url)
return json.load(result)
def get_maxima(weather):
days = defaultdict(float)
for day in weather['list']:
instant = datetime.datetime.fromtimestamp(day['dt'])
date = instant.date()
days[date] = max(days[date], day['main']['temp_max'])
return days
def notify(best_day, best_temp):
best_day = best_day.strftime('%d/%m')
message = f'''\
Lief DB,
De komende dagen wordt het wederom prachtig weer. Zo wordt het
op {best_day} maar liefst {best_temp} °C!
Met zulke mooie berichten kan het niet anders dan dat er
binnenkort witbier verkocht wordt. Toch? Ik kijk er in ieder
geval naar uit.
Knuffels,
Witbierbot.
'''
message = textwrap.dedent(message)
print(message)
def main():
if len(sys.argv) > 1:
with open(sys.argv[1]) as f:
weather = json.load(f)
else:
weather = load_weather()
maxima = get_maxima(weather)
best, temp = max(maxima.items(), key=lambda x: x[1])
if temp > 10:
notify(best, temp)
if __name__ == '__main__':
main()