Radio Browser abgreifen

Do, 29. April 2021, Ralf Hersel

Im September 2020 habe ich bereits über die Webseite, bzw. das Community Projekt Radio Browser geschrieben. Dies ist ein von der Gemeinschaft betriebenes Projekt mit dem Ziel, so viele Internet-Radio- und TV-Sender wie möglich zu sammeln. Ähnlich wie bei der Wikipedia ist auch hier jede Hilfe erwünscht. Der Radio Browser lässt sich jedoch nicht nur mit neuen Einträgen bestücken, sondern kann auch für eigene Zwecke verwendet werden.

Was bietet der Radio Browser?

  • Frei für alle
  • Datenlizenz: Public Domain
  • Softwarelizenz: GPL, Server-Software: Open Source
  • Offene API zur Nutzung in eigenen Apps

Es steht jedem frei, die gesammelten Daten (Sendernamen, Tags, Links zum Stream, Links zu Homepages, Sprache, Land, Bundesland) in seinen Werken zu verwenden.

Für die Schnittstelle werden viele Möglichkeiten geboten. Ich habe mich für eine Python-Implementierung der API entschieden. Das Python-Modul heisst PyRadios und wird so installiert:

pip3 install pyradios

Falls der Python Package Manager 'pip3' noch nicht installiert wurde, kann das mit diesem Befehl schnell nachgeholt werden:

sudo apt install python3-pip

Nun kann man beliebige Abfragen auf die Datenbank von Radio Browser machen. Zum Beispiel nach einem bestimmten Sender suchen:

python3

>>> from pyradios import RadioBrowser
>>> rb = RadioBrowser()
>>> station = rb.search(name='Radio Swiss Jazz', name_exact=True)
>>> print(station[0])

{'changeuuid': '62448847-cbcd-11e8-a54a-52543be04c81', 'stationuuid': '62448837-cbcd-11e8-a54a-52543be04c81', 'name': 'Radio Swiss Jazz', 'url': 'http://www.surfmusik.de/m3u/station/radio-swiss-jazz,2208.m3u', 'url_resolved': 'https://stream.srg-ssr.ch/m/rsj/mp3_128', 'homepage': 'http://www.swissjazz.ch/', 'favicon': 'http://www.radioswissjazz.ch/social-media/rsj-web.png', 'tags': 'jazz', 'country': '', 'countrycode': '', 'state': '', 'language': '', 'languagecodes': '', 'votes': 67, 'lastchangetime': '2021-02-07 13:11:47', 'lastchangetime_iso8601': '2021-02-07T13:11:47Z', 'codec': 'MP3', 'bitrate': 128, 'hls': 0, 'lastcheckok': 1, 'lastchecktime': '2021-04-28 09:58:50', 'lastchecktime_iso8601': '2021-04-28T09:58:50Z', 'lastcheckoktime': '2021-04-28 09:58:50', 'lastcheckoktime_iso8601': '2021-04-28T09:58:50Z', 'lastlocalchecktime': '2021-04-28 05:30:22', 'lastlocalchecktime_iso8601': '2021-04-28T05:30:22Z', 'clicktimestamp': '2021-04-28 08:55:38', 'clicktimestamp_iso8601': '2021-04-28T08:55:38Z', 'clickcount': 18, 'clicktrend': 1, 'ssl_error': 0, 'geo_lat': None, 'geo_long': None}

Was passiert hier? Zuerst ruft man den Python-Interpreter auf. Je nach Distro, lautet der Befehl 'python3' oder 'python'. Dann importiert man die Klasse 'RadioBrowser' aus dem Modul 'pyradio'. Nun wird die Klasse in die Variable 'rb' instantiiert. Im nächsten Schritt ruft man die Methode 'search' auf und übergibt den gesuchten Sendernamen, sowie die Anweisung für eine exakte Suche. Das Ergebnis wird als JSON-Struktur an die Variable 'station' zurückgegeben. Zuletzt kann man den ersten Eintrag in der Liste (station[0]) anzeigen lassen.

Wie man sieht, befinden sich darin viele Information über den Sender, wie zum Beispiel der Name des Senders, seine URL und die aufgelöste URL, die Homepage und die Audio-Qualität (bitrate). Wer möchte, kann die Suche auch anders gestalten. Denkbar wäre eine Suche nach Sendern mit hoher Qualität (bitrate=320).

Anwendungsfall

Für den Music Player Daemon auf meinem Raspberry Pi 4 (ich berichtete darüber) wollte ich die Internet-Radiosender in einer m3u-Playlist speichern. Dafür benötigt man nicht die normalen Adressen der Sender, sondern die resolved URLs. Also habe ich ein kleines Python-Skript geschrieben, welches aus meiner Senderliste (csv) die Stationen bei Radio Browser abfragt und die resolved URL und auch die Bitrate abholt. Daraus generiere ich dann die m3u-Playlist für MPD. Das sieht dann z. B. so aus:

#EXTM3U
#EXTINF:,1.FM - Blues Radio (Blues, 192)
http://strm112.1.fm/blues_mobile_mp3
#EXTINF:,1.FM - Chillout Lounge Radio (Lounge, 192)
http://strm112.1.fm/chilloutlounge_mobile_mp3
#EXTINF:,1.FM - Deep House Radio (House, 192)
http://strm112.1.fm/deephouse_mobile_mp3

Es lassen sich bestimmt noch viele andere Beispiele finden, wie man die freien Daten aus der Radio Browser DB für eigene Zwecke verwenden kann.

Quellen:

https://www.radio-browser.info/#!/

https://pypi.org/project/pyradios/

Markus
Geschrieben von Markus am 4. Mai 2021

Am liebsten wäre mir eine Api Funktion zur URL Weiterleitung. Ich trage z.B. in die m3u sowas ein: http://radio-browser.info/eintrag123456.mp3 und die DB leitet immer zur aktuellen Adresse weiter. Ich habe eh eine m3u Sammlung die per Syncthing verteilt wird. Manuell korrigieren nervt nur etwas, gerade die Lokalsender bei uns ändern wöchtlich ihre Adresse.