Powrót do strony głównej

Telegram-bot do kodów UPC muzyki: 10 platform

Bot Telegram wyodrębnia kody UPC i ISRC wydań z 10 platform poprzez parsowanie linków i API. Opisana architektura z regex, cachem Redis, logiką retry dla Spotify. Lekcje z pracy z fragmentowanymi API i niedokumentowanymi endpointami.

Bot do UPC/ISRC: parsowanie 10 muzycznych API
Advertisement 728x90

Tworzenie bota Telegrama do wyodrębniania kodów UPC i ISRC z platform muzycznych

Bot Telegrama wyodrębnia kody UPC i ISRC wydań muzycznych na podstawie linków z 10 platform. Przetwarza Spotify, Apple Music, Yandex.Muzyka, YouTube Music, Deezer, Tidal, SoundCloud, VK Muzyka, Zvuk oraz Amazon Music. Problem powstał z powodu braku prostego dostępu do kodów UPC u dystrybutorów i w interfejsach usług. Bot przetwarza linki, identyfikatory wydań i tekstowe zapytania, zwracając kody w ciągu 1–2 sekund dzięki mechanizmowi cache.

UPC identyfikuje wydania (albumy, singły), ISRC — konkretne utwory. Te kody są potrzebne przy migracji między dystrybutorami, rejestracji praw autorskich i rozliczaniu royalty.

Architektura systemu

System został podzielony na moduły:

Google AdInline article slot
  • Parser URL: wykrywa platformę za pomocą wyrażeń regularnych.
  • Resolver platformy: pobiera metadane przez API.
  • Matcher UPC/ISRC: porównuje dane z kilku źródeł.
  • Magazyn danych: Redis do cache (TTL 24 godziny), PostgreSQL do analizy.

To pozwala skalować przetwarzanie i minimalizować liczba żądań do zewnętrznych 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)/.+?/(")
    # i inne...
]

Przetwarzanie linków i skróconych adresów

Parser używa ponad 10 wzorców regex do formatów URL. Skrócone linki (spotify.link, youtu.be) rozwiązuje poprzez żądania HEAD z przekierowaniami:

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)

Obsługiwane typy treści: albumy, utwory, artystów. Dla utworów bot szuka nadrzędnego wydania.

Google AdInline article slot

Praca z API Spotify

Spotify Web API udostępnia UPC w external_ids.upc albumu i ISRC w utworach. Problemy:

  • Brak UPC w odpowiedzi — ponowne próby dla rynków (US, GB, DE, JP).
  • Wyszukiwanie po UPC jest niestabilne dla wydań regionalnych.
  • Limit szybkości: 180 żądań/min.

Cache w Redis zmniejsza obciążenie:

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:
            # zapis do cache
            await redis.set(cache_key, json.dumps(result), ex=86400)
            return result
    return None

Nieudokumentowane API: Yandex.Muzyka i VK

Bez publicznego API — reverse engineering endpointów aplikacji mobilnych. UPC w metadanych albumu, ISRC — w utworach. Format odpowiedzi zmienia się bez ostrzeżenia (2 razy w ciągu 3 miesięcy). Wymaga ciągłego monitorowania.

Google AdInline article slot

Funkcjonalność wykrywania wersji wydań

Bot znajduje wszystkie UPC dla jednego ISRC: singły, albumy, kompilacje. Przydatne do zachowania historii streamingu przy zmianie dystrybutora.

Komenda /full zwraca:

  • Wszystkie wersje UPC.
  • ISRC wszystkich utworów.
  • Wytwórnię, datę, gatunek.
  • BPM utworów (Spotify Audio Features).

Obsługa wejścia użytkownika

Wsparcie dla formatów:

  • Linki (parsowanie).
  • Liczby 12–13 cyfr (wyszukiwanie UPC).
  • Tekst (wyszukiwanie po nazwie + przyciski inline).

Przykłady: "upc Morzenstern", bezpośrednie linki, nieustrukturyzowane zapytania.

Lekcje i ulepszenia

Statystyki (3 miesiące):

  • 500 użytkowników/miesiąc.
  • Czas odpowiedzi: 1,5 s (0,3 s z cache).
  • Skuteczność: 89%.

Zalecenia:

  • Dodaj MusicBrainz do weryfikacji.
  • Kolejkę wiadomości dla szczytów obciążenia.
  • Sprawdzanie działania API (health-check).

Wnioski architektoniczne:

  • Minimalnie 2 źródła danych.
  • Agresywny cache.
  • Nieudokumentowane API = długi techniczny.

Co ważne:

  • Oddzielenie parsowania od rozpoznawania platformy zmniejsza złożoność.
  • Powtarzanie dla rynków rozwiązuje niekompletne odpowiedzi Spotify.
  • Cache Redis jest niezbędny przy limitach szybkości.
  • Wielo-UPC według ISRC ma kluczowe znaczenie dla artystów.
  • Monitorowanie nieudokumentowanych API to codzienne zadanie.

— Editorial Team

Advertisement 728x90

Czytaj dalej