Zum Hauptinhalt springen

Songlink ist tot. Also hab ich meinen eigenen Bandcamp-Release-Finder gebaut

Odesli/Songlink, das jahrelang zuverlässig Bandcamp-Releases mit Spotify, Apple Music und Co. verknüpft hat, ist tot. Also hab ich mir mit Python und Playwright selbst einen Scraper gebaut, der auf sechs Plattformen sucht und jeden Treffer mit einem Konfidenz-Wert zurückgibt. Quelloffen auf GitHub.

Tobe
BlogVeröffentlich am 24.08.26, Tobias Lorsbach

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.

dsp_scraper auf GitHub

Manchmal ist der beste Fix für einen toten Dienst nicht, auf den nächsten zu warten. Sondern selbst nachzubauen, was man wirklich braucht.

Nächster Schritt

Deine Website sollte Anfragen bringen, nicht nur existieren

Die meisten Websites sind digitale Visitenkarten, die niemand liest. Ich baue Seiten, die Besucher in Anfragen verwandeln, schnell, gefunden, ohne Plugin-Chaos.

Kommentare

Kommentar schreiben

0 / 5000 Zeichen

* Pflichtfelder

Noch keine Kommentare. Sei der Erste!