kv-music/gen-editors-picks.py
2026-04-03 17:59:47 +00:00

67 lines
2.1 KiB
Python

#!/usr/bin/env python3
import urllib.request
import json
import re
import sys
INPUT_FILE = "editors-picks-input.txt"
TOKEN = "eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXNzIiwic2NvcGUiOiIiLCJnVmVyIjowLCJzVmVyIjowLCJjaWQiOjEzNTU3LCJhdCI6IklOVEVSTkFMIiwiZXhwIjoxNzc1MTI4ODUzLCJpc3MiOiJodHRwczovL2F1dGgudGlkYWwuY29tL3YxIn0.qRoN8BRLM3R5WAXM3kS2hkWyaGk5tWF0FaHWJmkrWNvI48hKyS9lhVOTSnP1XkFEfdXv6aTzGUNUewyp-O_d3w"
HEADERS = {
"accept": "*/*",
"authorization": f"Bearer {TOKEN}",
}
def read_album_ids(path):
ids = []
with open(path) as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
try:
ids.append(int(line))
except ValueError:
print(f"Skipping invalid ID: {line!r}", file=sys.stderr)
return ids
def fetch_album(album_id):
url = f"https://api.tidal.com/v1/albums/{album_id}?countryCode=US"
req = urllib.request.Request(url, headers=HEADERS)
try:
with urllib.request.urlopen(req) as resp:
return json.loads(resp.read().decode())
except Exception as e:
print(f"Error fetching {album_id}: {e}", file=sys.stderr)
return None
def transform_album(api_data):
return {
"type": "album",
"id": api_data.get("id"),
"title": api_data.get("title"),
"artist": {
"id": api_data.get("artist", {}).get("id"),
"name": api_data.get("artist", {}).get("name"),
},
"releaseDate": api_data.get("releaseDate"),
"cover": api_data.get("cover"),
"explicit": api_data.get("explicit"),
"audioQuality": api_data.get("audioQuality"),
"mediaMetadata": api_data.get("mediaMetadata"),
}
albums = read_album_ids(INPUT_FILE)
picks = []
for album_id in albums:
data = fetch_album(album_id)
if data:
picks.append(transform_album(data))
with open("public/editors-picks.json", "w") as f:
json.dump(picks, f, indent=4)
print(f"Written {len(picks)} albums to public/editors-picks.json")