Vor einiger Zeit hat
Dunkel hier eine Klasse
ADBShoutcastQuery vorgestellt, die es ermöglicht, in der Datenbank von
www.shoutcast.com nach Webradio-Sendern zu suchen. Da ich sowas für die neue Version meines Players brauche, habe ich mir das mal angeguckt, und erstmal eine Designschwäche (die Synchronisation bei den Threads klappt nicht so richtig) gefunden. Im Laufe des PN-Austauschs zeigte er eine weitere auf: Seine Lösung basiert darauf, die Seite selbst zu parsen und ist davon abhängig, dass das Design der Seite sich nicht ändert. Das ist vor kurzem aber geschehen. Er hat dann für mich gegoogelt und eine kurze Beschreibung einer API gefunden, die wohl erst kürzlich veröffentlicht wurde und auf der diese Unit hier aufbaut.
ShoutcastUtils, v0.1
Was ist das?
Auf
www.shoutcast.com gibt es eine sehr umfangreiche Liste von Webradiosendern. Auf der Webseite steht eine Suchfunktion zur Verfügung, um in dieser Liste nach Sendern oder Titel zu suchen, die irgendwo gerade laufen. Diese Suche kann hiermit in ein Programm integriert werden.
D.h. in einem Player kann der User z.B. den Suchbegriff "Scooter" eingeben und erhält als Antwort eine Menge von Radiosendern, die gerade ein Stück von Scooter abspielen. Die Trefferquote ist dabei längst nicht 100%, da die Datenbank nicht immer ganz aktuell ist. Er kann dann einen Sender aus dieser Liste anwählen und abspielen. In dem Demo-Projekt wird ein externer Player gestartet, aber natürlich kann das auch intern passieren.
Benötigte Zusatzkomponenten
Die Indys. Ich nutze die 10er-Version. Es kann sein, dass der Code für die 9er etwas anders aussehen muss.
Benötigte Delphi-Fähigkeiten
Um die GUI flüssig bedienbar zu halten, ist der Download der Daten in Threads ausgelagert. Da ich nicht mit TThread arbeite, läuft die Snychronisation über Messages, die von der Hauptform empfangen und verarbeitet werden müssen. Man kann zwar einfach den Code aus dem Beispielprojekt kopieren, aber ein Verständnis dessen, was da passiert, ist sicherlich sinnvoll.
Nutzung
Siehe oben: Beispielprojekt durchgehen und verstehen. Grundgedanke ist dabei immer folgender: Der VCL-Thread startet eine Anfrage, die Klasse beginnt einen neuen Thread zum Runterladen der Informationen aus dem Netz und sendet dann ein Message an das zuständige Fenster, das die Antwort dann aufarbeiten muss.
Lizenz, Einschränkungen
Die Unit ist OpenSource und kann in nicht-kommerziellen (siehe Hinweis unten) Projekten frei verwendet werden. Bei Weiterverbreitung (mit oder ohne Modifikation) des Quellcodes muss der Copyrighthinweis erhalten bleiben.
Für kommerzielle Projekte ist es erforderlich, den Gebrauch der Shoutcast-Datenbank mit der zuständigen Firma (Nullsoft ?) abzuklären und ggf. vertraglich zu vereinbaren.
Die Unit sollte nicht dafür verwendet werden, zu viele .pls-Dateien hintereinander herunterzuladen um eine lokale Kopie davon zu speichern. Es ist wahrscheinlich, dass dadurch der Nutzer der Software von Shoutcast.com (zeitweise) gebannt wird.
Viel Spaß damit!
We are, we were and will not be.