· 5 years ago · Jan 05, 2021, 09:46 AM
1#!/usr/bin/env python3
2
3from bs4 import BeautifulSoup as BS
4from datetime import datetime
5import pytz
6import requests
7
8import config # wymagany plik config.py zawierający zmienną KEY przechowującą klucz API oraz CITY, zawierającą nazwę miasta (z polskimi znakami lub bez - nie ma znaczenia)
9
10
11def try_or_fail(func, failname=''):
12 global fails
13 def decorated(*args, **kwargs):
14 try:
15 return func(*args, **kwargs)
16 except requests.ConnectionError:
17 print('Nie udało się połączyć ze stroną ' + args[0] + '!')
18 fails[failname] = True
19 return None
20 return decorated
21
22
23
24format_date = lambda d: '.'.join(reversed(str(d).split('-')))
25DAYS_OF_WEEK = ['poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota', 'niedziela']
26WEATHER_HEADER = 'Dane pogodowe'
27TIME_HEADER = 'Czas w różnych miastach'
28fails = dict()
29
30
31response = try_or_fail(requests.get, failname='weather')(f'https://api.openweathermap.org/data/2.5/weather?q={config.CITY}&appid={config.KEY}&units=metric')
32if not fails.get('weather', False):
33 response = response.json()
34 weather = response['main']
35 wind = response['wind']
36 rain = response['rain']
37 clouds = response['clouds']
38 sys = response['sys']
39 now = datetime.now()
40
41
42
43
44cite = try_or_fail(requests.get, failname='cite')(f'http://whatthecommit.com/index.txt')
45if not fails.get('cite', False):
46 cite = cite.text
47
48raw_nameday = try_or_fail(requests.get, failname='nameday')('https://imienniczek.pl/widget/js')
49if not fails.get('nameday', False):
50 nameday = BS(raw_nameday.text, features='html.parser').find('span', {'id': 'imienniczek'}).get_text()
51
52
53print(f'Jest godzina {str(now.time()).split(".")[0]} dnia {format_date(now.date())} ({DAYS_OF_WEEK[now.weekday()]})')
54if not fails.get('weather', False):
55 print(f'-----> {WEATHER_HEADER} <-----')
56 print(f'Temperatura: {weather["temp"]}\u00b0C (odczuwalna: {weather["feels_like"]}\u00b0C)\nCiśnienie: {weather["pressure"]}hPa\nWilgotność powietrza: {weather["humidity"]}%')
57 print(f'Szybkość wiatru: {wind["speed"]}m/s\nKierunek wiatru: {wind["deg"]}\u00b0\nObjętość opadów (ostatnia godzina): {rain["1h"]}mm\nZachmurzenie: {clouds["all"]}%')
58 print(f'Wschód Słońca: {datetime.utcfromtimestamp(sys["sunrise"]).time()}\nZachód Słońca: {datetime.utcfromtimestamp(sys["sunset"]).time()}')
59 print(f'<----- {len(WEATHER_HEADER)*" "} ----->')
60if not fails.get('cite', False):
61 print(f'Komentarz do następnego commita: \n{cite}\n')
62if not fails.get('nameday', False):
63 print(nameday)
64
65print(f'\n-----> {TIME_HEADER} <-----')
66for tz, city in {'ETC/GMT+8': 'Pekin', 'Australia/Sydney': 'Sydney', 'America/New_York': 'Nowy York', 'Europe/London': 'Londyn'}.items():
67 dt = datetime.now(pytz.timezone(tz))
68 print(f'{city}: godzina {str(dt.time()).split(".")[0]} dnia {format_date(dt.date())} ({DAYS_OF_WEEK[dt.weekday()]})')
69print(f'<----- {len(TIME_HEADER)*" "} ----->')
70
71