aboutsummaryrefslogtreecommitdiff
path: root/radio_tui/stations.py
diff options
context:
space:
mode:
authorveradec <glitchmill.dyj3d@simplelogin.co>2026-10-25 22:06:42 +0530
committerveradec <glitchmill.dyj3d@simplelogin.co>2026-10-25 22:06:42 +0530
commitb518cd156166b16d8c7acca8e63efc65ebe13383 (patch)
tree1ebc1fa6367f47e738162a048c246de12cb96862 /radio_tui/stations.py
init: init radio_tuiHEADmaster
Diffstat (limited to 'radio_tui/stations.py')
-rw-r--r--radio_tui/stations.py58
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,
+ }
+ )