summaryrefslogtreecommitdiffstats
path: root/lass/2configs/services/radio/weather_for_ips.py
blob: c44c5e46a588eef4c26d444daf50e22ab67fa389 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import geoip2.database
import fileinput
import json
import requests
import os
import random


geoip = geoip2.database.Reader(os.environ['MAXMIND_GEOIP_DB'])
seen = {}
output = []
for ip in fileinput.input():
    if "80.147.140.51" in ip:
        output.append(
            'Weather report for c-base, space. '
            'It is empty space outside '
            'with a temperature of -270 degrees, '
            'a lightspeed of 299792 kilometers per second '
            'and a humidity of Not a Number percent. '
            f'The probability of reincarnation is {random.randrange(0, 100)} percent. '
        )
    else:
        try:
            location = geoip.city(ip.strip())
            if location.city.geoname_id not in seen:
                seen[location.city.geoname_id] = True
                weather_api_key = os.environ['OPENWEATHER_API_KEY']
                url = (
                    f'https://api.openweathermap.org/data/2.5/onecall'
                    f'?lat={location.location.latitude}'
                    f'&lon={location.location.longitude}'
                    f'&appid={weather_api_key}'
                    f'&units=metric'
                )
                resp = requests.get(url)
                weather = json.loads(resp.text)
                output.append(
                    f'Weather report for {location.city.name}, {location.country.name}. '
                    f'It is {weather["current"]["weather"][0]["description"]} outside '
                    f'with a temperature of {weather["current"]["temp"]:.1f} degrees, '
                    f'a wind speed of {weather["current"]["wind_speed"]:.1f} meters per second '
                    f'and a humidity of {weather["current"]["humidity"]} percent. '
                    f'The probability of precipitation is {weather["hourly"][0]["pop"] * 100:.0f} percent. '
                )
        except:  # noqa E722
            pass

print('\n'.join(output))