Hörhistorie in den neuen Feed übertragen – mit Claude, ohne Handarbeit (nur Pocketcast)

Hallo zusammen,

nachdem der Feed jetzt über die eigene Plattform läuft, stand ich vor dem Problem: mein kompletter Hörstand (gehört / angespielt / Sterne) hängt in den beiden alten Feeds (Public & Patreon) fest. Alles von Hand nachzuklicken – bei mir ~280 Folgen – lieber nicht. Ich hab das von Claude (Claude Code mit Browser-Zugriff) erledigen lassen, das hat keine 5 Minuten gedauert.

Die Idee: Nicht durch die Weboberfläche klicken (fehleranfällig und zäh), sondern direkt die Pocket-Casts-API nutzen – mit dem Token der eigenen, bereits eingeloggten Session.

Der Ablauf, den Claude gefahren ist:

  1. Auf pocketcasts.com einloggen. Der Zugangstoken steckt dort im auth-Cookie – den liest Claude aus der Session aus (nichts abtippen).
  2. Pro Feed die Spielstände auslesen: der Endpoint POST /user/podcast/episodes liefert je Folge playingStatus (3 = gehört, 2 = angespielt), die Hörposition und starred.
  3. Die Folgen-Metadaten (Titel/Datum) über podcast/full/<feed-uuid> holen – für alten und neuen Feed.
  4. Matching per Titel (Datum + Länge als Absicherung). Das ist der Knackpunkt: die Folgen haben in jedem Feed andere IDs, aber die Titel sind identisch genug, dass es eindeutig aufgeht.
  5. Schreiben über POST /sync/update_episode (Status + Position) bzw. /sync/update_episode_star.

Was man wissen sollte:

  • Auch angespielte Folgen lassen sich mit der exakten Position übertragen (status:2 + position in Sekunden), nicht nur „gehört/ungehört".
  • Der Access-Token läuft nach ~1 Stunde ab – einfach den Pocket-Casts-Tab offen lassen, dann ist immer ein frischer da.

Man braucht kein tiefes Technikwissen – Claude findet die Endpoints und baut das Matching selbst, man muss ihm nur die drei Feed-Links geben und sagen, was übertragen werden soll (played, paused, starred).

Viele Grüße
Martin

7 „Gefällt mir“

Klingt nach einer coolen Sache. Leider höre ich mit Podcast-Addict.
Weißt Du ob die GUIDs im alten und im neuen Feed gleich geblieben sind?

Edit: Sind sie nicht.

genau das gleiche Problem wie oben, nur mit Podcast Addict statt Pocket Casts: mein Hörstand (gehört / angespielt / Sterne) hing komplett im alten Feed fest, weil sich mit dem Plattformwechsel alle Feed- und Episoden-IDs geändert haben. Alles von Hand nachpflegen wollte ich nicht. Ich hab das von Claude (Claude Code) erledigen lassen – komplett ohne App-Zugriff oder API, nur über das Backup-File.

Der Unterschied zu Pocket Casts: Podcast Addict hat keine Cloud-API, die man anzapfen könnte. Der komplette Hörstand steckt lokal in einer SQLite-Datenbank, die im Backup-ZIP der App liegt. Der Ablauf, den Claude gefahren ist:

  1. Backup aus der App exportieren (Einstellungen → Backup/Restore → Backup), die ZIP enthält eine podcastAddict.db.
  2. DB entpacken, sofort eine Kopie ziehen – nur mit der Kopie wird gearbeitet, bis alles verifiziert ist.
  3. Schema angeschaut (podcasts- und episodes-Tabelle). Relevante Spalten: seen_status (gehört), position_to_resume (Position in ms), favorite, thumbsRating, playbackDate.
  4. Alte Podcast-Zeilen über die Feed-URL gefunden, alle Episoden mit Status exportiert.
  5. Neuen RSS-Feed geladen und die Episoden daraus geparst.
  6. Matching zwischen alt und neu per normalisiertem Titel, bei Unschärfen zusätzlich über Dauer (±1 Sek.) und Veröffentlichungsdatum abgesichert.
  7. Vor dem Schreiben eine Diff-Vorschau (Tabelle alt→neu) zur Kontrolle, dann UPDATE direkt in der DB-Kopie – strikt gefiltert auf die Episode-IDs des neuen Podcasts, damit nichts anderes angefasst wird.
  8. DB zurück ins ZIP gepackt (gleiche Struktur wie das Original), dann per Restore auf dem Handy eingespielt.

Was ich dabei gelernt habe:

  • Duplikate im alten Bestand sind der eigentliche Stolperstein, nicht das Titel-Matching. Bei mir gab’s z. B. eine Folge, die im alten Bestand mehrfach existierte (Original, Reupload wegen Audiofehler, zusätzliche Fassung aus einem zweiten alten Feed) – jeweils mit unterschiedlichem Hörfortschritt. Da musste ich von Hand entscheiden, welcher Stand gilt.
  • Auch im neuen Feed können doppelte Einträge für dieselbe Folge auftauchen. Kein Beinbruch, solange man zusätzlich zum Titel auch Datum/Dauer abgleicht – dann geht die Zuordnung trotzdem sauber auf.
  • Titel sind fast nie 1:1 identisch – Klammerzusätze wie „(LIVE)" oder Nummerierungen ändern sich gerne mal. Dauer + Datum als zweite Absicherung ist Pflicht, nicht optional.
  • Vor dem eigentlichen Schreiben unbedingt eine Vorschau/einen Diff anschauen lassen, bevor irgendwas final in die Kopie geschrieben wird – bei ein paar hundert Zeilen findet man Fehlzuordnungen sonst nicht mehr.

Für alle mit Podcast Addict also: geht genauso gut wie mit Pocket Casts, nur eben über die lokale Backup-DB statt eine Cloud-API. Man braucht dafür auch kein SQL-Wissen – Claude findet das Schema selbst, baut das Matching und zeigt eine Vorschau, bevor irgendwas geschrieben wird.

1 „Gefällt mir“

Hallo,

Ich hatte das selbe Problem, allerdings kam ich von Spotify.

Ich habe mich dann dafür entschieden den Stand in einen gpodder Account zu syncen, damit ich weiterhin die Vorteile des Syncs über mehrere Geräte habe. So nutze ich aktuell einen eigenen oPodSync Server und als Clients AntennaPod auf Android und Kasts auf dem (Linux) Desktop.

Vorgehensweise war ganz ähnlich.

Wenn Ihr ein Spotify Abo habt, ist es über die Spotify Developer API möglich seine History mit zu nehmen.

Das ganze zieht sich den „gehört Status“ dabei sowohl von Public als auch vom Supporter Feed von Spotify, merged das ganze und spielt das dann in den gpodder Account über die API ein. Das ganze funktioniert hier ebenfalls über Titel-Matching, allerdings gibt es hier auch ein paar Tricks, dass „ähnliche“ Titel ebenfalls matchen.

Mein Script funktioniert allerdings nur bei „abgeschlossenen“ bzw. gehörten Folgen. Wenn Folgen nicht fertig gehört wurde, wird der Status nicht migriert.

Bin inzwischen sehr glücklich von Spotify auf AntennaPod gewechselt zu haben. Die Features sind einfach großartig im Vergleich.

Falls hier jemand Interesse hat könnte ich das ganze entweder mit etwas Zeitaufwand noch aufräumen, verbessern und irgendwie veröffentlichen (hier im Forum, Github oder ähnliches) oder einfach das Script posten, das müsste man aber sicherlich dann noch selbst etwas anpassen.

1 „Gefällt mir“