diff options
Diffstat (limited to 'hyprsunset_qt/sun.py')
| -rw-r--r-- | hyprsunset_qt/sun.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/hyprsunset_qt/sun.py b/hyprsunset_qt/sun.py index bc611f9..254fa38 100644 --- a/hyprsunset_qt/sun.py +++ b/hyprsunset_qt/sun.py @@ -3,6 +3,7 @@ from __future__ import annotations import json +import urllib.request from datetime import datetime, tzinfo from pathlib import Path from typing import Optional @@ -29,3 +30,24 @@ def write_cache(payload: dict, path: Path) -> None: path = Path(path) path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(payload, indent=2)) + + +GEO_URL = "http://ip-api.com/json" +SUN_URL = "https://api.sunrise-sunset.org/json?lat={lat}&lng={lon}&formatted=0" + + +def _http_get(url: str, timeout: float = 10.0) -> str: + with urllib.request.urlopen(url, timeout=timeout) as resp: + return resp.read().decode() + + +def geolocate() -> tuple[str, str]: + """Return (lat, lon) as strings from IP geolocation.""" + data = json.loads(_http_get(GEO_URL)) + return str(data["lat"]), str(data["lon"]) + + +def fetch_sun(lat: str, lon: str) -> dict: + """Fetch sunrise/sunset JSON for coords. Caller handles caching.""" + url = SUN_URL.format(lat=lat, lon=lon) + return json.loads(_http_get(url)) |
