Stell dir vor: Du kommst morgens in die Küche, der Kaffee duftet schon, und du möchtest zum Start in den Tag die neuesten Nachrichten hören. Anstatt das Handy zu zücken, die App zu suchen und die aktuelle Folge zu starten, drückst du einfach einen einzigen Knopf auf deinem Stream Deck. Voilà – die neueste Ausgabe von "Die Nachrichten" spielt ab.
Dieses kleine Stück Alltags-Magie wollte ich für mich umsetzen. Doch eine Hürde gab es: Wie kommt man an einen direkten Link zur jeweils neuesten Folge eines Podcasts? Die URLs ändern sich ja ständig.
Nach etwas Tüftelei habe ich das Problem gelöst – und weil es so gut funktioniert, gleich eine kleine, blitzschnelle App daraus gebaut.
Die schnelle Lösung: audiothek-quickplay
(für Windows & Linux)
Für alle, die einfach nur das Feature wollen, ohne selbst Code anfassen zu müssen, habe ich ein kleines Tool in Rust geschrieben und als ausführbare Dateien bereitgestellt.
audiothek-quickplay
in Aktion: Entweder direkt starten oder aus der eigenen Liste wählen.Features im Überblick:
- Sofortige Wiedergabe: Ein Befehl, und die neueste Folge deines Lieblingspodcasts läuft.
- Interaktives Menü: Wenn du keinen Podcast angibst, kannst du bequem aus deiner Liste auswählen.
- Läuft überall: Kompilierte Versionen für Windows und Linux stehen bereit – keine Installation nötig.
- Player-Steuerung: Pausieren ([Space]), Spulen ([Pfeiltasten]) und Beenden ([q]) direkt im Terminal.
1. Download & Einrichtung
Lade dir einfach die passende Version von der GitHub Releases Seite herunter:
Entpacke die Datei und du findest im selben Ordner eine Konfigurationsdatei namens
podcasts.json
.2. podcasts.json
konfigurieren
In dieser Datei definierst du deine Podcasts. Die
id
findest du in der URL der ARD Audiothek, den key
wählst du selbst (kurz und ohne Leerzeichen).https://www.ardaudiothek.de/sendung/die-nachrichten/urn:ard:show:8ca6599d43089072/
Beispiel
podcasts.json
:[ { "key": "nachrichten", "id": "urn:ard:show:8ca6599d43089072" }, { "key": "infodate", "id": "urn:ard:show:15f007e3b43a4a8c" } ]
3. Abspielen!
Starte die App per Doppelklick oder öffne ein Terminal (oder die Eingabeaufforderung unter Windows) im Ordner und starte die App:
# Startet das interaktive Auswahlmenü ./audiothek_quickplay # Spielt direkt den Podcast mit dem Schlüssel "infodate" ./audiothek_quickplay infodate
Da der eingebaute Player das Spulen innerhalb der Folge ermöglicht, kann es je nach Podcast einen kleinen Moment dauern, bis die Wiedergabe startet. Das Tool analysiert kurz den Stream, um die Navigation vorzubereiten.
Für die Puristen: Die DIY-Lösung mit Deno
Wer neugierig auf den Entstehungsprozess ist oder eine "Fire and Forget"-Lösung ohne interaktive Steuerung bevorzugt, kann den ursprünglichen Prototyp nutzen. Dieses Deno-Script übergibt die Audio-URL einfach an den
mpv
Medienplayer. Der Start fühlt sich hier oft schneller an, da mpv
sofort mit dem Streamen beginnt, ohne auf Spul-Fähigkeit zu warten.#!/usr/bin/env -S deno run --allow-net --allow-run /** * ARD Audiothek Podcast Player * * Last Updated: 2025-09-24 * * This script plays the latest episode of a specified podcast from the ARD Audiothek. * It uses the ARD Audiothek GraphQL API to fetch the most recent episode and plays it using mpv. * * Features: * - 🎧 Plays the latest episode of predefined podcasts. * - 📡 Fetches data directly from the ARD Audiothek API. * - ⚙️ Easy to add new podcasts by extending the PODCASTS object. * - 🖥️ Runs with Deno, providing a modern JavaScript/TypeScript runtime. * * Usage: * 1. Make sure you have Deno and mpv installed. * 2. Make the script executable: `chmod +x play_podcast.js` * 3. Run the script with a podcast key as an argument: * ```bash * ./play_podcast.js <podcast_key> * ``` * * Example: * ```bash * ./play_podcast.js infodate * ``` * * Available podcast keys: nachrichten, infodate, 15minuten, diewoche */ const PODCASTS = { nachrichten: 'urn:ard:show:8ca6599d43089072', infodate: 'urn:ard:show:15f007e3b43a4a8c', '15minuten': 'urn:ard:show:b84b465ae5abcd64', diewoche: 'urn:ard:show:c570a55d7067784d', }; async function main() { const podcastKey = Deno.args[0]; if (!podcastKey) { console.error('Error: No podcast key provided.'); console.error(`Available podcasts: ${Object.keys(PODCASTS).join(', ')}`); Deno.exit(1); } const showId = PODCASTS[podcastKey]; if (!showId) { console.error(`Error: Unknown podcast key "${podcastKey}".`); console.error(`Available podcasts: ${Object.keys(PODCASTS).join(', ')}`); Deno.exit(1); } const query = ` query ProgramSetEpisodesQuery($id: ID!, $offset: Int!, $count: Int!) { result: programSet(id: $id) { items( offset: $offset first: $count filter: { isPublished: { equalTo: true }, itemType: { notEqualTo: EVENT_LIVESTREAM } } ) { nodes { title audios { url } } } } } `; const variables = { id: showId, offset: 0, count: 1, }; const url = `https://api.ardaudiothek.de/graphql?query=${encodeURIComponent( query )}&variables=${encodeURIComponent(JSON.stringify(variables))}`; try { const response = await fetch(url); if (!response.ok) { console.error(`Error fetching data: ${response.statusText}`); Deno.exit(1); } const json = await response.json(); const latestEpisode = json.data?.result?.items?.nodes?.[0]; if (latestEpisode && latestEpisode.audios?.[0]?.url) { const audioUrl = latestEpisode.audios[0].url; console.log(`Playing: ${latestEpisode.title}`); console.log(`URL: ${audioUrl}`); const command = new Deno.Command('mpv', { args: [audioUrl], stdout: 'piped', stderr: 'piped', }); const process = command.spawn(); await process.status; } else { console.error('Could not find the audio URL for the latest episode.'); console.error('API Response:', JSON.stringify(json, null, 2)); Deno.exit(1); } } catch (error) { console.error('An unexpected error occurred:', error); Deno.exit(1); } } if (import.meta.main) { main(); }
Die Brücke zum Stream Deck - OpenDeck konfigurieren
Jetzt kommt der magische Teil: Wir bringen den Befehl auf den Knopf! Wir nutzen eine "Toggle Action", um mit derselben Taste zu starten und zu stoppen. Da die Vorgehensweise für Linux und Windows leicht unterschiedlich ist, hier beide Varianten.
Für Linux-Nutzer
Da unser Rust-Tool
audiothek_quickplay
interaktive Kontrollen im Terminal bietet, müssen wir sicherstellen, dass beim Start auch ein Terminalfenster erscheint.- Action 1 (Starten): Wir weisen unser Terminal-Programm an (
gnome-terminal
,tilix
,konsole
etc.), unser Script auszuführen.
gnome-terminal -e "/pfad/zu/deinen/tools/audiothek_quickplay nachrichten"
- Action 2 (Stoppen): Wir beenden den Prozess gezielt mit
pkill
.
pkill -f "audiothek_quickplay nachrichten"
Tipp:
pkill -f
ist dein Freund! Es sucht nach dem vollständigen Prozessaufruf und beendet nur den passenden Podcast, falls du mal mehrere parallel hörst (wer tut das nicht?).Für Windows-Nutzer
Auch unter Windows wollen wir ein neues Fenster für die Wiedergabe.
- Action 1 (Starten): Hier nutzen wir den
start
Befehl, um die App in einer neuen Kommandozeile auszuführen.
start "Podcast" "C:\Pfad\zu\deinen\Tools\audiothek_quickplay.exe" nachrichten
- Action 2 (Stoppen): Das Pendant zu
pkill
unter Windows isttaskkill
. Wir beenden den Prozess anhand seines Namens.
taskkill /IM audiothek_quickplay.exe /F
Achtung:
taskkill /IM
beendet alle laufenden Prozesse mit diesem Namen. Wenn du also zwei verschiedene Podcasts gleichzeitig über die App gestartet hast, werden beide beendet. Für den normalen Gebrauch ist das aber kein Problem.Mission erfüllt 🚀
Und das war's! Ob mit der fertigen Rust-App oder dem selbstgebauten Deno-Script – das Ergebnis ist ein Stück Alltags-Luxus für jeden Podcast-Fan. Nie wieder umständliches Suchen nach der neuesten Folge, ein Klick genügt.
Dieses Projekt zeigt wunderbar, wie man mit ein wenig Code und den richtigen Tools den eigenen digitalen Alltag spürbar komfortabler machen kann.