Initial commit, prod ready

This commit is contained in:
2026-02-22 23:18:57 -05:00
commit 0d03be47a0
41 changed files with 5623 additions and 0 deletions

45
backend/search.py Normal file
View File

@@ -0,0 +1,45 @@
"""
Music metadata search via the iTunes Search API.
Free, no auth, returns track info + album art URLs.
"""
import httpx
from typing import Any
ITUNES_URL = "https://itunes.apple.com/search"
async def search_music(query: str, limit: int = 10) -> list[dict[str, Any]]:
params = {
"term": query,
"media": "music",
"entity": "song",
"limit": limit,
}
async with httpx.AsyncClient(timeout=10) as client:
response = await client.get(ITUNES_URL, params=params)
response.raise_for_status()
data = response.json()
results = []
for item in data.get("results", []):
# Upgrade artwork URL to 600x600 (iTunes returns 100x100 by default)
art_url = item.get("artworkUrl100", "")
if art_url:
art_url = art_url.replace("100x100bb", "600x600bb")
results.append({
"trackId": item.get("trackId"),
"trackName": item.get("trackName", ""),
"artistName": item.get("artistName", ""),
"collectionName": item.get("collectionName", ""),
"trackNumber": item.get("trackNumber"),
"discNumber": item.get("discNumber"),
"releaseDate": item.get("releaseDate", "")[:4], # just the year
"genre": item.get("primaryGenreName", ""),
"artworkUrl": art_url,
"previewUrl": item.get("previewUrl", ""),
})
return results