diff options
Diffstat (limited to 'playlist_generator/generate_daily.py')
| -rw-r--r-- | playlist_generator/generate_daily.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/playlist_generator/generate_daily.py b/playlist_generator/generate_daily.py index 508871c..0bb8f3c 100644 --- a/playlist_generator/generate_daily.py +++ b/playlist_generator/generate_daily.py @@ -7,6 +7,7 @@ from dotenv import load_dotenv from datetime import datetime, timedelta import yt_dlp import time +from frame_generator import generate_daily_random_frames load_dotenv() @@ -22,6 +23,12 @@ HEARDLE_SALT = ( NTFY_URL = os.getenv("NTFY_URL") NTFY_TOKEN = os.getenv("NTFY_TOKEN") +def fetch_instance_info() -> dict: + if not API_URL: + raise ValueError("Missing API_URL in environment.") + response = requests.get(f"{API_URL}/info") + return response.json() + def send_notification(message: str): if not NTFY_URL or not NTFY_TOKEN: return @@ -67,6 +74,19 @@ def fetch_daily() -> dict: return payload +def fetch_daily_mv() -> dict: + if not API_URL: + raise ValueError("Missing API_URL in environment.") + + url = f"{API_URL}/todayMV" + response = requests.get(url, timeout=15) + response.raise_for_status() + payload = response.json() + if "date" not in payload or "data" not in payload: + raise ValueError(f"Unexpected /todayMV response shape: {payload}") + + return payload + def download_random_segment_mp3(youtube_id: str, output_file="today.mp3") -> str: url = f"https://www.youtube.com/watch?v={youtube_id}" @@ -137,6 +157,9 @@ def read_json(file_path, default=None): return default def main(): + info = fetch_instance_info() + dailyMV = info.get("dailyMV", False) + new_data = False daily_data = fetch_daily() attempt = 0 @@ -171,5 +194,50 @@ def main(): delete_from_r2(f"kheardle/{three_days_ago}.mp3") send_notification(f"K-HEARDLE: Deleted old clip for {three_days_ago}") + if dailyMV: + print("Starting Daily MV Generation") + mv_data = fetch_daily_mv() + mv_decoded = decode_data(mv_data["data"], mv_data["date"]) + mv_youtube_id = mv_decoded["youtubeId"] + mv_date = mv_data["date"] + + mv_output_dir = f"frames_mv_{mv_date}" + try: + generate_daily_random_frames( + f"https://www.youtube.com/watch?v={mv_youtube_id}", + mv_output_dir, + count=3, + ) + except Exception: + print(f"Failed to generate MV frames for {mv_youtube_id}") + send_notification(f"K-HEARDLE: Failed to generate MV frames for {mv_youtube_id}") + return + + mv_frame_files = sorted( + f for f in os.listdir(mv_output_dir) + if f.startswith("frame-") and f.endswith(".jpg") + ) + if len(mv_frame_files) < 3: + print(f"Only generated {len(mv_frame_files)} MV frames for {mv_youtube_id}") + send_notification(f"K-HEARDLE: Only generated {len(mv_frame_files)} MV frames for {mv_youtube_id}") + return + + try: + for i, fname in enumerate(mv_frame_files[:3], start=1): + local_path = os.path.join(mv_output_dir, fname) + object_key = f"kheardle/k-heardle-mvs/{mv_date}/{i}.jpg" + upload_to_r2(local_path, object_key) + print(f"Uploaded {object_key}") + except Exception: + print(f"Failed to upload MV frames for {mv_date}") + send_notification(f"K-HEARDLE: Failed to upload MV frames for {mv_date}") + return + finally: + for fname in mv_frame_files: + delete_file(os.path.join(mv_output_dir, fname)) + os.rmdir(mv_output_dir) + write_json("save_mv.json", mv_data) + send_notification(f"K-HEARDLE: Successfully generated MV frames for {mv_date} UTC") + if __name__ == "__main__": main() |
