Update
This commit is contained in:
89
local/share/sway/scripts/weather.py
Executable file
89
local/share/sway/scripts/weather.py
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python
|
||||
"""Script for the Waybar weather module."""
|
||||
|
||||
import getopt
|
||||
import json
|
||||
import locale
|
||||
import sys
|
||||
import urllib.parse
|
||||
from datetime import datetime
|
||||
import requests
|
||||
import configparser
|
||||
from os import path, environ
|
||||
|
||||
config_path = path.join(
|
||||
environ.get('APPDATA') or
|
||||
environ.get('XDG_CONFIG_HOME') or
|
||||
path.join(environ['HOME'], '.config'),
|
||||
"weather.cfg"
|
||||
)
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read(config_path)
|
||||
|
||||
# see https://docs.python.org/3/library/locale.html#background-details-hints-tips-and-caveats
|
||||
locale.setlocale(locale.LC_ALL, "")
|
||||
current_locale, _ = locale.getlocale(locale.LC_NUMERIC)
|
||||
city = config.get('DEFAULT', 'city', fallback='auto')
|
||||
temperature = config.get('DEFAULT', 'temperature', fallback='C')
|
||||
distance = config.get('DEFAULT', 'distance', fallback='km')
|
||||
lng = config.get('DEFAULT', 'locale', fallback=locale.getlocale()[0] or current_locale)
|
||||
|
||||
if current_locale == "en_US":
|
||||
temperature = temperature or "F"
|
||||
distance = distance or "miles"
|
||||
|
||||
argument_list = sys.argv[1:]
|
||||
options = "t:c:d:"
|
||||
long_options = ["temperature=", "city=", "distance="]
|
||||
|
||||
try:
|
||||
args, values = getopt.getopt(argument_list, options, long_options)
|
||||
|
||||
for current_argument, current_value in args:
|
||||
if current_argument in ("-t", "--temperature"):
|
||||
temperature = current_value[0].upper()
|
||||
if temperature not in ("C", "F"):
|
||||
msg = "temperature unit is neither (C)elsius, nor (F)ahrenheit"
|
||||
raise RuntimeError(
|
||||
msg,
|
||||
temperature,
|
||||
)
|
||||
|
||||
elif current_argument in ("-d", "--distance"):
|
||||
distance = current_value.lower()
|
||||
if distance not in ("km", "miles"):
|
||||
msg = "distance unit is neither km, nor miles", distance
|
||||
raise RuntimeError(msg)
|
||||
|
||||
else:
|
||||
city = urllib.parse.quote(current_value)
|
||||
|
||||
except getopt.error as err:
|
||||
print(str(err))
|
||||
sys.exit(1)
|
||||
|
||||
if temperature == "F":
|
||||
temperature_unit = "fahrenheit"
|
||||
|
||||
if temperature == "C":
|
||||
temperature_unit = "celsius"
|
||||
|
||||
if distance == "miles":
|
||||
wind_speed_unit = "mph"
|
||||
|
||||
if distance == "km":
|
||||
wind_speed_unit = "kmh"
|
||||
|
||||
try:
|
||||
headers = {"Accept-Language": f"{lng.replace("_", "-")},{lng.split("_")[0]};q=0.5"}
|
||||
weather = requests.get(f"https://manjaro-sway.download/weather/{city}?temperature_unit={temperature_unit}&wind_speed_unit={wind_speed_unit}", timeout=10, headers=headers).json()
|
||||
except (
|
||||
requests.exceptions.HTTPError,
|
||||
requests.exceptions.ConnectionError,
|
||||
requests.exceptions.Timeout,
|
||||
) as err:
|
||||
print(str(err))
|
||||
sys.exit(1)
|
||||
|
||||
print(json.dumps(weather))
|
||||
Reference in New Issue
Block a user