Zpět na domů

Telegram-bot pro UPC kódy hudby: 10 platforem

Telegram-bot extrahuje UPC- a ISRC-kódy vydání z 10 platforem prostřednictvím parsování odkazů a API. Popsána architektura s regex, Redis cachem, retry logikou pro Spotify. Lekce z práce s fragmentovanými API a nedokumentovanými endpointy.

Bot pro UPC/ISRC: parsování 10 hudebních API
Advertisement 728x90

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ů:

Google AdInline article slot
  • 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í.

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Číst dál