Add new features to ansible-vault-manager Add search engines to qutebrowser Add location to waybar weather
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env nix-shell
 | |
| #!nix-shell -i python -p python3 python3Packages.requests
 | |
| 
 | |
| import json
 | |
| import os
 | |
| import requests
 | |
| from datetime import datetime
 | |
| 
 | |
| WEATHER_CODES = {
 | |
|     '113': '☀️',
 | |
|     '116': '⛅️',
 | |
|     '119': '☁️',
 | |
|     '122': '☁️',
 | |
|     '143': '🌫',
 | |
|     '176': '🌦',
 | |
|     '179': '🌧',
 | |
|     '182': '🌧',
 | |
|     '185': '🌧',
 | |
|     '200': '⛈',
 | |
|     '227': '🌨',
 | |
|     '230': '❄️',
 | |
|     '248': '🌫',
 | |
|     '260': '🌫',
 | |
|     '263': '🌦',
 | |
|     '266': '🌦',
 | |
|     '281': '🌧',
 | |
|     '284': '🌧',
 | |
|     '293': '🌦',
 | |
|     '296': '🌦',
 | |
|     '299': '🌧',
 | |
|     '302': '🌧',
 | |
|     '305': '🌧',
 | |
|     '308': '🌧',
 | |
|     '311': '🌧',
 | |
|     '314': '🌧',
 | |
|     '317': '🌧',
 | |
|     '320': '🌨',
 | |
|     '323': '🌨',
 | |
|     '326': '🌨',
 | |
|     '329': '❄️',
 | |
|     '332': '❄️',
 | |
|     '335': '❄️',
 | |
|     '338': '❄️',
 | |
|     '350': '🌧',
 | |
|     '353': '🌦',
 | |
|     '356': '🌧',
 | |
|     '359': '🌧',
 | |
|     '362': '🌧',
 | |
|     '365': '🌧',
 | |
|     '368': '🌨',
 | |
|     '371': '❄️',
 | |
|     '374': '🌧',
 | |
|     '377': '🌧',
 | |
|     '386': '⛈',
 | |
|     '389': '🌩',
 | |
|     '392': '⛈',
 | |
|     '395': '❄️'
 | |
| }
 | |
| 
 | |
| data = {}
 | |
| 
 | |
| place = os.environ.get('WTTR_PLACE', 'Berlin')
 | |
| url = "https://wttr.in/" + place + "?format=j1"
 | |
| weather = requests.get(url).json()
 | |
| 
 | |
| 
 | |
| def format_time(time):
 | |
|     return time.replace("00", "").zfill(2)
 | |
| 
 | |
| 
 | |
| def format_temp(temp):
 | |
|     return (hour['FeelsLikeC']+"°").ljust(3)
 | |
| 
 | |
| 
 | |
| def format_chances(hour):
 | |
|     chances = {
 | |
|         "chanceoffog": "Fog",
 | |
|         "chanceoffrost": "Frost",
 | |
|         "chanceofovercast": "Overcast",
 | |
|         "chanceofrain": "Rain",
 | |
|         "chanceofsnow": "Snow",
 | |
|         "chanceofsunshine": "Sunshine",
 | |
|         "chanceofthunder": "Thunder",
 | |
|         "chanceofwindy": "Wind"
 | |
|     }
 | |
| 
 | |
|     conditions = []
 | |
|     for event in chances.keys():
 | |
|         if int(hour[event]) > 0:
 | |
|             conditions.append(chances[event]+" "+hour[event]+"%")
 | |
|     return ", ".join(conditions)
 | |
| 
 | |
| 
 | |
| data['text'] = WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \
 | |
|     " "+weather['current_condition'][0]['FeelsLikeC']+"°"
 | |
| 
 | |
| data['tooltip'] = f"<b>{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°</b>\n"
 | |
| data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n"
 | |
| data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n"
 | |
| data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n"
 | |
| for i, day in enumerate(weather['weather']):
 | |
|     data['tooltip'] += f"\n<b>"
 | |
|     if i == 0:
 | |
|         data['tooltip'] += "Today, "
 | |
|     if i == 1:
 | |
|         data['tooltip'] += "Tomorrow, "
 | |
|     data['tooltip'] += f"{day['date']}</b>\n"
 | |
|     data['tooltip'] += f"⬆️ {day['maxtempC']}° ⬇️ {day['mintempC']}° "
 | |
|     data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n"
 | |
|     for hour in day['hourly']:
 | |
|         if i == 0:
 | |
|             if int(format_time(hour['time'])) < datetime.now().hour-2:
 | |
|                 continue
 | |
|         data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
 | |
| 
 | |
| 
 | |
| print(json.dumps(data))
 |