Vývoj Telegramu pro extrakci UPC a ISRC kódů z hudebních platforem
Telegramový bot extrahuje UPC a ISRC kódy hudebních vydání podle odkazů z 10 různých platforem. Zpracovává Spotify, Apple Music, Yandex Music, YouTube Music, Deezer, Tidal, SoundCloud, VK Music, Zvuk a Amazon Music. Úloha vznikla kvůli nedostatku jednoduchého přístupu k UPC u distribučních společností a v rozhraních služeb. Bot zpracovává odkazy, ID vydání a textové dotazy a vrátí kódy za 1–2 sekundy s využitím vyrovnávací paměti.
UPC identifikuje vydání (alba, singly), ISRC identifikuje skladby. Tyto kódy jsou potřebné pro migraci distribučních společností, registraci práv a sledování royalty.
Architektura systému
Systém je rozdělen do modulů:
- URL Parser: určuje platformu pomocí regulárních výrazů.
- Platform Resolver: extrahuje metadáta přes API.
- UPC/ISRC Matcher: porovná data z více zdrojů.
- Úložiště: Redis pro vyrovnávací paměť (TTL 24 hodin), PostgreSQL pro analýzu.
To umožňuje škálovatelné zpracování a minimalizuje počet požadavků na externí API.
import re
from dataclasses import dataclass
from enum import Enum
class Platform(Enum):
SPOTIFY = "spotify"
APPLE_MUSIC = "apple_music"
YANDEX_MUSIC = "yandex_music"
YOUTUBE_MUSIC = "youtube_music"
DEEZER = "deezer"
TIDAL = "tidal"
SOUNDCLOUD = "soundcloud"
VK_MUSIC = "vk_music"
ZVUK = "zvuk"
AMAZON_MUSIC = "amazon_music"
@dataclass
class ParsedLink:
platform: Platform
content_type: str # "album", "track", "artist"
content_id: str
PATTERNS = [
# Spotify
(r"open\.spotify\.com/(album|track)/([a-zA-Z0-9]+)",
Platform.SPOTIFY),
# Apple Music
(r"music\.apple\.com/.+/(album|song)/([a-zA-Z0-9]+)",
Platform.APPLE_MUSIC),
# a další...
]
Zpracování odkazů a zkratek
Parser používá více než 10 regexových vzorů pro formáty URL. Zkratky (spotify.link, youtu.be) se rozluštění přes HEAD požadavek s přesměrováními:
async def resolve_short_url(url: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.head(
url, allow_redirects=True, timeout=5
) as resp:
return str(resp.url)
Podporované typy obsahu: alba, skladby, umělci. Pro skladby hledá nadřazené vydání.
Práce s API Spotify
Spotify Web API poskytuje UPC v external_ids.upc alba a ISRC v skladbách. Problémy:
- UPC chybí v odpovědi — opakování pro trhy (US, GB, DE, JP).
- Hledání podle UPC je nestabilní pro regionální vydání.
- Omezení rychlosti: 180 požadavků/min.
Vyrovnávání v Redis sníží zatížení:
async def get_album_data(album_id: str) -> dict | None:
cache_key = f"album:{album_id}"
cached = await redis.get(cache_key)
if cached:
return json.loads(cached)
for market in ["US", "GB", "DE", "JP"]:
album = await spotify.get_album(album_id, market=market)
upc = album.get("external_ids", {}).get("upc")
if upc:
# uložení do vyrovnávací paměti
await redis.set(cache_key, json.dumps(result), ex=86400)
return result
return None
Nezveřejněné API: Yandex Music a VK
Bez veřejných API – reverzní inženýrství endpointů mobilních aplikací. UPC je v metadatech alba, ISRC je v skladbách. Změny formátu odpovědí nastávají bez varování (2 krát za 3 měsíce). Vyžaduje neustálý monitorovací proces.
Funkce detekce verzí vydání
Bot najde všechny UPC pro jeden ISRC: singly, alba, sbírky. Užitečné při zachování streamové historie při změně distributora.
Příkaz /full vrátí:
- Všechny verze UPC.
- ISRC všech skladeb.
- Studio, datum, žánr.
- BPM skladeb (Spotify Audio Features).
Zpracování uživatelského vstupu
Podpora formátů:
- Odkazy (parsují se).
- Čísla 12–13 cifer (hledání UPC).
- Text (hledání podle jména + inline tlačítka).
Příklady: "upc Morozhnern", přímé odkazy, nestrukturované dotazy.
Užitečné zásahy a zlepšení
Statistika (3 měsíce):
- 500 uživatelů/měsíc.
- Čas odpovědi: 1,5 s (0,3 s s vyrovnávací pamětí).
- Úspěšnost: 89 %.
Doporučení:
- Přidat MusicBrainz k ověření.
- Fronta zpráv pro špičkové zatížení.
- Health-check pro API.
Architektonické závěry:
- Minimálně 2 zdroje dat.
- Agresivní vyrovnávání.
- Nezveřejněné API = technický dlh.
Důležité:
- Oddělení parsování a rozpoznávání platformy sníží komplexitu.
- Opakování pro trhy vyřeší neúplnou odpověď Spotify.
- Vyrovnávání Redis je nezbytné při omezení rychlosti.
- Multi-UPC podle ISRC je kritické pro umělce.
- Monitorování nezveřejněných API je denní úkol.
— Editorial Team
Zatím žádné komentáře.