Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 21.09.08 13:55 
Vor einiger Zeit hat user profile iconDunkel 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!
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: So 21.09.08 19:37 
Hey Gausi!

Sehr schön! Mir gefällt's! :D :zustimm:

Mit der Shoutcast-API scheint sowas ja wirklich recht einfach zu gehen; auf jeden Fall einfacher und besser als meine HTML-Parsing-Implementation. :?

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.09.08 20:03 
Respekt!Kann ich nur unterstützen was gesagt wurde! :mrgreen:
Das hab ich gesucht...... :idea: Fürn nen MP3-Player :!: