Zurück zur Startseite

Telegram-Bot für Musik-UPC-Codes: 10 Plattformen

Telegram-Bot extrahiert UPC- und ISRC-Codes von Veröffentlichungen aus 10 Plattformen über Link-Parsing und API. Beschreibt Architektur mit Regex, Redis-Cache, Retry-Logik für Spotify. Lektionen zum Arbeiten mit fragmentierten APIs und undokumentierten Endpunkten.

Bot für UPC/ISRC: Parsing von 10 Musik-APIs
Advertisement 728x90

Telegram-Bot zur Extraktion von UPC- und ISRC-Codes aus Musikplattformen

Dieser Telegram-Bot extrahiert UPC- und ISRC-Codes von Musikveröffentlichungen auf zehn großen Plattformen. Er unterstützt Spotify, Apple Music, Yandex Music, YouTube Music, Deezer, Tidal, SoundCloud, VK Music, Zvuk und Amazon Music. Die Entwicklung wurde durch die fehlende direkte Zugänglichkeit von UPC-Codes über Distributoren oder Plattform-Interfaces ausgelöst. Der Bot verarbeitet Links, Veröffentlichungs-IDs und Textanfragen und liefert präzise Codes innerhalb von 1–2 Sekunden dank intelligenter Caching-Strategien.

UPC identifiziert Veröffentlichungen (Alben, Singles), während ISRC einzelne Titel eindeutig markiert. Diese Kennungen sind entscheidend für den Wechsel von Distributoren, die Registrierung von Urheberrechten und die Abwicklung von Lizenzgebühren.

Systemarchitektur

Das System ist modular aufgebaut:

Google AdInline article slot
  • URL-Parser: Identifiziert die Plattform mittels regulärer Ausdrücke.
  • Plattform-Auflöser: Ruft Metadaten über offizielle oder reverse-engineerte APIs ab.
  • UPC/ISRC-Überprüfer: Validiert Daten über mehrere Quellen hinweg.
  • Speicher: Redis für Caching (TTL: 24 Stunden), PostgreSQL für Analysen.

Diese Architektur ermöglicht skalierbare Verarbeitung und reduziert den Lastaufwand auf externe APIs.

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)/([0-9]+)",
     Platform.APPLE_MUSIC),
    # und andere...
]

Verarbeitung von Links und Kurz-URLs

Der Parser nutzt über 10 Regex-Muster, um URL-Formate zu erkennen. Verkürzte Links (z. B. spotify.link, youtu.be) werden mittels HEAD-Anfragen mit automatischer Umleitung aufgelöst:

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)

Unterstützte Inhaltsarten sind Alben, Tracks und Künstler. Bei Tracks ermittelt der Bot automatisch die zugehörige Veröffentlichung.

Google AdInline article slot

Arbeit mit Spotify’s API

Die Spotify Web API liefert UPC in external_ids.upc für Alben und ISRC in Track-Daten. Herausforderungen bestehen darin:

  • Fehlende UPC in Antworten – erneuter Versuch mit verschiedenen Märkten (USA, GB, DE, JP).
  • Instabile UPC-Suche bei regionalspezifischen Veröffentlichungen.
  • Rate-Limit: 180 Anfragen pro Minute.

Redis-Caching verringert den API-Druck signifikant:

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:
            # In Cache speichern
            await redis.set(cache_key, json.dumps(album), ex=86400)
            return album
    return None

Undokumentierte APIs: Yandex Music und VK

Da keine öffentlichen APIs verfügbar sind, wurden Endpunkte aus dem mobilen App-Traffic reverse-engineert. UPC befindet sich in Album-Metadaten, ISRC in Track-Daten. Antwortformate ändern sich unvorhersehbar (zweimal innerhalb von drei Monaten), was ständige Überwachung erfordert.

Google AdInline article slot

Versionserkennung für Veröffentlichungen

Der Bot findet alle UPCs, die einem einzelnen ISRC zugeordnet sind – einschließlich Singles, Alben und Sammlungen. Dies ist entscheidend, um die Streaming-Geschichte beim Wechsel des Distributors zu bewahren.

Der Befehl /full liefert:

  • Alle UPC-Versionen der Veröffentlichung.
  • ISRC jedes Tracks.
  • Label, Erscheinungsdatum, Genre.
  • Track-BPM (über Spotify Audio Features).

Verarbeitung von Benutzereingaben

Unterstützt verschiedene Eingabemodi:

  • Direkte Links (automatische Analyse).
  • 12–13-stellige Zahlen (UPC-Suche).
  • Textsuchanfragen (Suche nach Name + Inline-Buttons).

Beispiele: "upc Morozhern", direkte URLs, unstrukturierte Phrasen.

Erfahrungen & Verbesserungsvorschläge

Leistungsdaten (3 Monate):

  • 500 Nutzer/Monat.
  • Durchschnittliche Antwortzeit: 1,5 Sekunden (0,3 Sekunden mit Cache).
  • Erfolgsquote: 89 %.

Empfehlungen:

  • Integration von MusicBrainz zur Datenvalidierung.
  • Implementierung einer Nachrichtenwarteschlange für Spitzenlast.
  • Hinzufügen von Healthchecks für API-Erreichbarkeit.

Architektur-Erkenntnisse:

  • Immer mindestens zwei Datenquellen nutzen.
  • Aggressives Caching anwenden.
  • Undokumentierte APIs schaffen technische Schulden.

Wichtige Erkenntnisse:

  • Trennung von Parsing und Plattform-Auflösung vereinfacht die Wartung.
  • Markt-basierte Wiederholversuche beheben unvollständige Spotify-Antworten.
  • Redis-Caching ist unter Rate-Limits obligatorisch.
  • Mehrere UPCs pro ISRC sind für Künstler essenziell.
  • Die Überwachung undokumentierter APIs muss täglich erfolgen.

— Editorial Team

Advertisement 728x90

Weiterlesen