diff options
Diffstat (limited to 'live.py')
-rw-r--r-- | live.py | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -0,0 +1,68 @@ +import requests +import time +from mastodon import Mastodon + +# === Config === +MASTODON_BASE_URL = "https://chatwithus.live" +MASTODON_ACCESS_TOKEN = "07w3Emdw-cv_TncysrNU8Ed_sHJhwtnvKmnLqKlHmKA" +ICECAST_STATUS_URL = "http://cast3.my-control-panel.com:7454/status-json.xsl" +LIVE_MOUNTPOINT = "/live" +CHECK_INTERVAL = 30 # seconds +LIVE_MIN_INTERVAL = 600 # 10 minutes + +mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_BASE_URL +) + +last_title_posted = None +last_post_time = 0 + +def get_live_stream_title(): + try: + r = requests.get(ICECAST_STATUS_URL, timeout=5) + r.raise_for_status() + data = r.json() + sources = data.get("icestats", {}).get("source", []) + + if isinstance(sources, dict): + sources = [sources] + + for source in sources: + listenurl = source.get("listenurl", "") + title = source.get("title") or source.get("server_name") + title = title.strip() if title else None + listeners = int(source.get("listeners", 0)) + + print(f"[DEBUG] {listenurl=} {title=} {listeners=}") # Keep for troubleshooting + + if LIVE_MOUNTPOINT in listenurl and title and listeners > 0: + return title + except Exception as e: + print(f"[ERROR] Icecast fetch failed: {e}") + return None + +def main(): + global last_title_posted, last_post_time + print("🎙️ Watching /live only. Toots only when DJs are on deck.") + + while True: + now = time.time() + title = get_live_stream_title() + + if title and title != last_title_posted and (now - last_post_time) > LIVE_MIN_INTERVAL: + toot_msg = f"🔴 Live now on Genesis Radio: {title}! Tune in: http://stream.genesis-radio.net:7454/stream" + try: + mastodon.status_post(toot_msg, visibility='public') + print(f"[TOOTED] {toot_msg}") + last_title_posted = title + last_post_time = now + except Exception as e: + print(f"[ERROR] Mastodon post failed: {e}") + else: + print("🔍 No new live DJ activity.") + + time.sleep(CHECK_INTERVAL) + +if __name__ == "__main__": + main() |