diff options
| author | veradec <glitchmill.dyj3d@simplelogin.co> | 2026-10-25 22:06:42 +0530 |
|---|---|---|
| committer | veradec <glitchmill.dyj3d@simplelogin.co> | 2026-10-25 22:06:42 +0530 |
| commit | b518cd156166b16d8c7acca8e63efc65ebe13383 (patch) | |
| tree | 1ebc1fa6367f47e738162a048c246de12cb96862 /radio_tui/stations.py | |
Diffstat (limited to 'radio_tui/stations.py')
| -rw-r--r-- | radio_tui/stations.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/radio_tui/stations.py b/radio_tui/stations.py new file mode 100644 index 0000000..8da3f58 --- /dev/null +++ b/radio_tui/stations.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +import csv +import json +from dataclasses import dataclass +from pathlib import Path + + +@dataclass(frozen=True, slots=True) +class Station: + name: str + page_url: str + stream_url: str | None + stream_available: bool + + @property + def playable(self) -> bool: + return bool(self.stream_url) + + +def data_dir() -> Path: + return Path(__file__).resolve().parent.parent + + +def load_stations(path: Path | None = None) -> list[Station]: + json_path = path or data_dir() / "telugu-radio-stations.json" + with json_path.open(encoding="utf-8") as handle: + payload = json.load(handle) + + stations: list[Station] = [] + for item in payload["stations"]: + stations.append( + Station( + name=item["name"], + page_url=item["page_url"], + stream_url=item.get("stream_url") or None, + stream_available=bool(item.get("stream_available")), + ) + ) + return stations + + +def export_csv(stations: list[Station], path: Path) -> None: + with path.open("w", encoding="utf-8", newline="") as handle: + writer = csv.DictWriter( + handle, + fieldnames=["name", "page_url", "stream_url", "stream_available"], + ) + writer.writeheader() + for station in stations: + writer.writerow( + { + "name": station.name, + "page_url": station.page_url, + "stream_url": station.stream_url or "", + "stream_available": station.stream_available, + } + ) |
