Entwickler-Ecke

Open Source Units - ScrobblerUtils


Gausi - Fr 27.03.09 15:49
Titel: ScrobblerUtils

ScrobblerUtils, v0.2
*** Jetzt wieder mit ohne Ansi. ;-) ***


Eine Klasse, mit der man relativ einfach seinen eigenen Player zum Scrobbeln bringen kann.

Was ist Scrobbeln?

Der Begriff "Scrobbeln" beschreibt den Vorgang, das aktuell gespielte Lied in sein Userprofil auf Last.fm [http://www.last.fm/] einzutragen. Last.fm ist ein auf Musik spezialisierter Web2.0-Dienst. Über die "gescrobbelten" Lieder kristallisiert sich mit der Zeit ein Musikgeschmack heraus, der mehr oder weniger mit dem von anderen Last.fm-Usern übereinstimmt. Über die diversen Funktionen auf dieser Seite können dann Leute mit ähnlichem Geschmack gefunden werden, um über deren Scrobbel-Liste weitere Lieder kennenzulernen, die man selbst wahrscheinlich auch gut findet. Für weitere Details, auch zu hier verwendeten Begriffen: Last.fm-Api-Dokumentation [http://www.last.fm/api].

Was liefert ScrobblerUtils?

ScrobblerUtils implementiert das verwendete Protokoll und kapselt die nötigen Aufrufe relativ komfortabel. ScrobblerUtils kann recht einfach in einen bestehenden Player-Code integriert werden. Der Code des Players muss folgendermaßen erweitert werden:
Der Rest geht dann von selbst, d.h. ScrobblerUtils kümmert sich selbstständig darum, ob ein Lied überhaupt gescrobbelt werden darf (z.B. wenn es lang genug gespielt wurde), und casht bei Verbindungsproblemen ggf. die abgespielten Lieder, um sie bei erneuter Verbindung in einem Rutsch zu scrobbeln.

Die Details sollten anhand der Demo-Anwendung klarer werden.

Benötigte Komponenten, IDE

Nutzungsbedingungen

Wichtige Hinweise zur Nutzung und empfohlene Erweiterungen

Update von Version 0.1
Am besten von vorne anfangen. Da geschätzt drei Leute diese Klasse verwenden, habe ich in keinster Weise auf Abwärtskompatibiltät geachtet. ;-)


Edit, 18.11.2011: Beitrag für Version 0.2 komplett überarbeitet


jaenicke - Fr 27.03.09 17:55

Muss ich rein zum Testen, ob es unter Delphi 2009 klappt noch etwas machen außer kompilieren? Denn funktionieren tut es dann auf Anhieb nicht.

Ich habe kompiliert und im Programm dann auf den ersten Button geklickt. Passiert ist nix und abbrechen ließ sich der Prozess auch nicht mehr.

Es kommen viele Warnungen an den Stellen, an denen du z.B. Add benutzt, das sollte aber bei "normalen" Zeichen keine Probleme machen. Mein Verdacht bei einem ersten schnellen Blick in die Unit ist aber was den Fehler angeht diese Stelle z.B.:

Delphi-Quelltext
1:
          SendMessage(fWindowHandle, WM_Scrobbler, SC_GetToken, lParam(PChar(Response)));                    
Warum PChar? Das sollte doch wohl eher PAnsiChar sein, oder?

Genauer hab ich da jetzt nicht geschaut, ich teste erstmal andere Delphiversionen. ;-)

Ansonsten:
Die Idee finde ich schön, auch wenn ich das eigentlich als Benutzer nicht nutzen wollen würde baue ich es vielleicht dann doch einmal ein, wenn das so einfach geht. :zustimm:


Gausi - Fr 27.03.09 19:32

Ups, an Strings hatte ich gedacht, PChars nicht. Werde ich ausbessern müssen, sowohl beim Senden, als auch beim Empfangen der Messages.

Wenn nichts passiert: Das liegt jetzt aber nicht daran, dass eine Firewall oder ähnliches die Kommunikation verhindert, oder?


Gausi - So 29.03.09 11:23

So neue Version mit noch mehr Ansi im Code ist da. Ich hoffe, es läuft jetzt auch wirklich mit Delphi 2009. :D


jaenicke - So 29.03.09 17:18

Im Virtual PC kam mit der alten Version dann doch eine Meldung. Nämlich, dass die TokenID nicht geholt werden konnte (FAILED).

Aber die neue Version funktioniert mit Delphi 2009 problemlos (getestet unter Vista und XP), nur ein kleiner Fehler war noch in der Demo:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.BtnAuthorizeClick(Sender: TObject);
var authUrl: AnsiString;
begin
    authUrl := 'http://www.last.fm/api/auth/?api_key=' + DemoScrobbler.ApiKey + '&token=' + DemoScrobbler.Token;
    ShellExecuteA(Handle, 'open', PAnsiChar(authUrl), nilnil, SW_SHOW);
end;


Gausi - Mo 30.03.09 19:20

Ok, dann Danke erstmal fürs Testen. :D

Hab grade die Trial von Delphi 2009 ausprobiert und festgestellt, dass da noch ne ganze Reihe anderer Warnungen vom Compiler kommen, die teilweise auch ihre Berechtigung haben - das Loggen von Unicode-Gescrobbel klappt nicht, da wird irgendwo noch nach AnsiString umgewandelt, wo eigentlich UTF8 oder so sein sollte.
Muss ich mir mal genauer ansehen, evtl. auch nachdem ich mal mein gewonnenes RAD Studio 2007 Enterprise irgendwie halbwegs kostengünstig upgedated hab. Auf Dauer ist das ja kein Zustand - vor allem auch wegen meinen Mp3FileUtils. :?


Gausi - Fr 18.11.11 19:33

Da mich vor kurzem jemand angemailt hat, dass LastFM die alte API nicht mehr für neue Projekte unterstützt (d.h. keine Client-IDs mehr rausgibt), habe ich das hier mal für die neue API überarbeitet.

Herausgekommen ist Version 0.2, die jetzt voll unter Delphi 2009 läuft, aber auch mit 2007 getestet wurde.
Wer eine Anwendung mit Version 0.1 nutzt, muss einiges ändern. Kompatibel sind die beiden Versionen in keinster Weise - auch am Konzept hat sich einiges geändert.
Bisher musste man ja irgendwie die Unit selbst anpassen, um sie richtig zu verwenden. Dafür muss man sich jetzt eine eigene Klasse ableiten, in der man einige Anpassungen vornehmen kann, z.B. die Userdaten so speichern, wie man das gerne mag.

Ich bau das in den nächsten Tagen in meinen Player ein - mal sehen, wie umfangreich das Umbauen dort wird. :lol: