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:
- 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.
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.
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
Noch keine Kommentare.