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:
Man sollte vielleicht noch ergänzen, dass man
mit wget http://de1.api.radio-browser.info/xml/stations
die gesamt Datenbank als xml-Datei lokal speichern kann, und
mit wget http://de1.api.radio-browser.info/json/stations
die gesamt Datenbank als json-Datei lokal speichern kann, und
mit wget http://de1.api.radio-browser.info/m3u/stations
die gesamt Datenbank als m3u-Datei lokal speichern kann.
Damit hat man lokal alle Möglichkeiten sich gewünschte Teilbestände der Datenabnk z.B. mit Hilfe von SED (stream-editor) zu erstellen.
Man benötigt dann kein pyradios bzw. gar kein Python.