Ich betreibe mit Logic Moon ein eigenes Label. Jedes Release landet zuerst auf Bandcamp, danach überall sonst. Spotify, Apple Music, Deezer, Amazon Music, SoundCloud, Beatport. Um nicht bei jedem Release sechsmal manuell zu suchen, hab ich jahrelang Odesli benutzt, besser bekannt als Songlink. Ein Link rein, alle Plattform-Links raus.
Jetzt ist der Dienst tot. Oder zumindest so instabil, dass ich mich nicht mehr drauf verlassen will.
Also hab ich mir gedacht: dann bau ich mir das eben selbst.
Was das Tool macht
Bandcamp-URL rein, Künstler und Titel werden direkt aus den strukturierten Daten (JSON-LD) der Seite gelesen, kein Rätselraten im HTML. Damit wird parallel auf sechs Plattformen gesucht, Fuzzy-Matching auf Titel und Artist filtert die Treffer, raus kommt ein JSON mit einem Konfidenz-Wert pro Plattform statt einem simplen Ja/Nein.
Vier weitere Plattformen sind fertig geschrieben, aber deaktiviert, weil sie ohne Login bisher praktisch nichts Brauchbares liefern: YouTube Music (Cookie-Consent-Wall), Tidal (keine nutzbare Ergebnis-Seite ohne Login), Napster (Produkt hat sich vom Musik-Suchfokus wegbewegt) und Pandora (nur US/AU/NZ, andere Regionen landen auf einer Sperrseite).
Installation und Nutzung
Voraussetzung ist uv als Paket- und Environment-Manager:
uv sync # installiert alle Abhängigkeiten
uv run playwright install chromium # lädt einmalig den Chromium-Browser für Playwright
Danach reicht ein CLI-Aufruf mit der Bandcamp-URL:
# schreibt nach results.json (Standard)
uv run cli.py https://logicmoon.bandcamp.com/album/atlas
# eigener Ausgabepfad
uv run cli.py https://logicmoon.bandcamp.com/album/atlas -o out.json
# JSON direkt auf stdout, z.B. zum Weiterleiten an ein anderes Tool
uv run cli.py --stdout https://logicmoon.bandcamp.com/album/atlas > release.json
# ohne URL-Argument gibt's einen interaktiven Prompt
uv run cli.py
Wer es lieber direkt im eigenen Python-Code nutzen will: Weil pyproject.toml einen echten Build-Backend deklariert, lässt sich dsp_scraper auch als Paket in ein anderes Projekt installieren, direkt aus GitHub, ganz ohne eigenen PyPI-Eintrag:
pip install git+https://github.com/Tobeworks/dsp_scraper.git
playwright install --with-deps chromium # Playwright-Browser separat installieren, läuft nicht automatisch mit
Danach lässt sich das Kernmodul ganz normal importieren:
from dsp_scraper import find_release
result = find_release("https://logicmoon.bandcamp.com/album/atlas")
Jede Plattform liefert im Ergebnis immer dieselben fünf Felder, egal ob ein Treffer gefunden wurde oder nicht:
{
"spotify": {
"url": "https://open.spotify.com/album/...",
"matched_title": "Atlas",
"matched_artist": "Logic Moon",
"confidence": 100.0,
"error": null
}
}
Warum ich das teile
Weil jeder, der ein eigenes Label oder eine Künstlerseite betreibt, irgendwann vor demselben Problem steht: Ein zentraler Dienst, auf den man sich verlassen hat, verschwindet einfach. Und die Alternative ist entweder wieder manuell sechs Tabs öffnen, oder sich selbst was bauen.
Der Code liegt komplett offen auf GitHub, inklusive der ganzen Debugging-Geschichte im Commit-Verlauf. Wer selbst Bandcamp-Releases über mehrere Plattformen hinweg tracken will, findet dort den kompletten Scraper zum Forken und Anpassen.
Manchmal ist der beste Fix für einen toten Dienst nicht, auf den nächsten zu warten. Sondern selbst nachzubauen, was man wirklich braucht.
Kommentare