diff options
| author | Pinapelz <yukais@pinapelz.com> | 2026-06-23 13:46:01 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2026-06-23 13:46:01 -0700 |
| commit | d5e5de44acdad962d0943dbb42e060a4600f9362 (patch) | |
| tree | dd2dba62b057a1ed2896ca7865e591a1e881286b /playlist_generator | |
| parent | 51b7fca52585944a12ca74a2281f3f47068870c9 (diff) | |
change playlist_generator to merge with existing songs.ts by default
Diffstat (limited to 'playlist_generator')
| -rw-r--r-- | playlist_generator/generate_daily.py | 2 | ||||
| -rw-r--r-- | playlist_generator/playlist_generator.py | 31 | ||||
| -rw-r--r-- | playlist_generator/pyproject.toml | 1 | ||||
| -rw-r--r-- | playlist_generator/uv.lock | 11 |
4 files changed, 37 insertions, 8 deletions
diff --git a/playlist_generator/generate_daily.py b/playlist_generator/generate_daily.py index 56e9103..508871c 100644 --- a/playlist_generator/generate_daily.py +++ b/playlist_generator/generate_daily.py @@ -166,7 +166,7 @@ def main(): send_notification(f"K-HEARDLE: Failed to upload clip for {date}") return write_json("save.json", daily_data) - send_notification(f"K-HEARDLE: Successfully generated daily playlist for {date}") + send_notification(f"K-HEARDLE: Successfully generated daily track for {date} UTC") three_days_ago = (datetime.now() - timedelta(days=3)).strftime("%Y-%m-%d") delete_from_r2(f"kheardle/{three_days_ago}.mp3") send_notification(f"K-HEARDLE: Deleted old clip for {three_days_ago}") diff --git a/playlist_generator/playlist_generator.py b/playlist_generator/playlist_generator.py index 1bcc0b7..a02881a 100644 --- a/playlist_generator/playlist_generator.py +++ b/playlist_generator/playlist_generator.py @@ -1,10 +1,15 @@ #!/usr/bin/python3 import argparse -from random import shuffle import yt_dlp - +import json5 +import re class PlaylistGenerator: + + def __init__(self, song_db: list[dict]): + self.song_db = song_db + self.known_ids = set() + def get_urls_from_file(self, path: str) -> list[str]: with open(path) as f: lines = f.readlines() @@ -30,11 +35,21 @@ class PlaylistGenerator: return list(info.values()) def build_playlist_string(self, video_info: list[dict[str]]) -> str: - output = "" + output = "export const songs = [\n" for info in video_info: + video_id = info["id"] + if video_id in self.known_ids: + continue + self.known_ids.add(video_id) artist = self.escape_quotes(self.get_artist(info)) title = self.escape_quotes(self.get_title(info)) output += f'{{ artist: "{artist}", name: "{title}", youtubeId: "{info["id"]}" }},\n' + for song in self.song_db: + if song["youtubeId"] in self.known_ids: + continue + output += f'{{ artist: "{song["artist"]}", name: "{song["name"]}", youtubeId: "{song["youtubeId"]}" }},\n' + self.known_ids.add(song["youtubeId"]) + output += "]" return output def get_artist(self, info): @@ -64,13 +79,15 @@ class PlaylistGenerator: def main(): parser = argparse.ArgumentParser() parser.add_argument("urls_file") - parser.add_argument("output_file") + parser.add_argument("output_file", default="../server/data/songs.ts") args = parser.parse_args() - - generator = PlaylistGenerator() + with open(args.output_file, "r", encoding="utf-8") as f: + text = f.read() + array_text = re.search(r"\[.*\]", text, re.S).group(0) + songs = json5.loads(array_text) + generator = PlaylistGenerator(songs) urls = generator.get_urls_from_file(args.urls_file) video_info = generator.extract(urls) - shuffle(video_info) js_playlist = generator.build_playlist_string(video_info) with open(args.output_file, 'w') as f: f.write(js_playlist) diff --git a/playlist_generator/pyproject.toml b/playlist_generator/pyproject.toml index 5ac1b1f..5151a26 100644 --- a/playlist_generator/pyproject.toml +++ b/playlist_generator/pyproject.toml @@ -6,6 +6,7 @@ readme = "README.md" requires-python = ">=3.13" dependencies = [ "boto3>=1.43.22", + "json5>=0.15.0", "python-dotenv>=1.2.2", "requests>=2.34.2", "yt-dlp>=2026.3.17", diff --git a/playlist_generator/uv.lock b/playlist_generator/uv.lock index 4583031..aa4805e 100644 --- a/playlist_generator/uv.lock +++ b/playlist_generator/uv.lock @@ -115,11 +115,21 @@ wheels = [ ] [[package]] +name = "json5" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/7d/05c46a96a78147ae3bf99c2f4169ce144a70220b8d6fcd56f6ec368b8ce9/json5-0.15.0.tar.gz", hash = "sha256:7424d1f1eb1d56da6e3d70643f53619862b4ce81440bdb8ecfd6f875e5ba4a71", size = 53278, upload-time = "2026-06-19T20:08:27.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/be/59527c99478aade6bb33a68d72e6e18dd4e6ff6eacfc7d01bdb15bc76912/json5-0.15.0-py3-none-any.whl", hash = "sha256:56636a30c0e8a4665fe2179c0212f32eae3796dea89ea6f649b9436ecdb39618", size = 36570, upload-time = "2026-06-19T20:08:26.748Z" }, +] + +[[package]] name = "playlist-generator" version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "boto3" }, + { name = "json5" }, { name = "python-dotenv" }, { name = "requests" }, { name = "yt-dlp" }, @@ -128,6 +138,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "boto3", specifier = ">=1.43.22" }, + { name = "json5", specifier = ">=0.15.0" }, { name = "python-dotenv", specifier = ">=1.2.2" }, { name = "requests", specifier = ">=2.34.2" }, { name = "yt-dlp", specifier = ">=2026.3.17" }, |
