Entwickler-Ecke
Internet / Netzwerk - Songtexte online suchen
Bergmann89 - Fr 10.07.09 16:04
Titel: Songtexte online suchen
HI,
ich such ne Möglichkeit, mit der ich die Songtexte von
http://www.LyricWiki.org runter laden kann. Weiß jmd von euch wie ich das in nem Programm realisieren kann?
MfG & Thx Bergmann
Gausi - Fr 10.07.09 16:11
Ja, weiß ich. :mrgreen:
Bergmann89 - Fr 10.07.09 16:21
hehe, gut das wars dann auch schon.... xD
ne spaß. wie mach ich das?
MfG Bergmann.
Andreas L. - Fr 10.07.09 16:29
Zuerst musst du die Suchfunktion der Seite ansteuern. Suchen wir mal nach "faith no more land of sunshine":
http://lyricwiki.org/Special:GoogleSearchResults?cx=partner-pub-7265006513689515%3Aenbi50a4igp&cof=FORID%3A9&ie=UTF-8&q=faith+no+more+land+of+sunshine&sa=Search#869
So einen String kannst du dir ja problemlos zusammen bauen. Die Seite lädst du dann mit IdHttp.get in eine StringList und extrahierst dir die Suchergebnisse (dazu musst du dir den HTML-Code Ergebnisseite ansehen, jedes Suchergebnis hat einen ähnlichen HTML-Code den du als Suchmuster verwenden kannst).
Hast du die URL extrahiert, z. B.
Quelltext
1:
| http://lyricwiki.org/Faith_No_More:Land_Of_Sunshine |
lLädst du diese URL ebenfalls in eine StringList und extrahierst alles zwischen
<div class="lyricbox"> und
</div>.
Was du alles brauchst: TStringList,
TIDHTTP,
POS,
COPY,
POSEX
ffgorcky - Fr 10.07.09 16:33
Kannst Du denn mal genauer beschreiben, was Du denn als Ausgabe haben möchtest?
Möchtest Du nur z.B.
diese Seite [
http://lyricwiki.org/Die_Prinzen:Be_Cool_Speak_Deutsch] als ganzes speichern - oder möchtest Du dann nur den Songtext haben?
Um nur den Text zu speichern, bräuchtest Du ja nur nach diesem:
<div class='lyricbox' > und nach dem Ende davon -also dem nächsten, direkt darauf folgenden:
</div> suchen und das dazwischen ist dann doch der Text, inklusive HTML-Formatierung.
Gausi - Fr 10.07.09 16:34
Oh, das geht besser. Steht doch alles auf der Seite, was man da tun muss:
http://lyricwiki.org/LyricWiki:REST :zwinker:
Alternativ gehts auch über SOAP, aber auf den Delphi-Tagen haben wir ja dieses Jahr gelernt, dass SOAP sowieo Mist ist, und REST viel toller. :D
Mal ein Auszug aus meinem Player-Code:
Erstmal ein paar Hilfsfunktionen - das ist die Version für Delphi 7, also String = AnsiString = UTF8String.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| function StringToURLString(aString: String): String; var i: integer; begin result := ''; for i := 1 to length(aString) do result := result + '%' + IntToHex(Ord(aString[i]),2) end;
function WordUppercase(s: String): String; var i: Integer; tmp: String; begin s := LowerCase(s); result := s;
with TStringList.Create do try Delimiter := ' '; DelimitedText := s; for i := 0 to Count-1 do if (Strings[i] <> '') then begin tmp := Strings[i]; tmp[1] := Upcase(tmp[1]); Strings[i] := tmp; end; Delimiter := '_'; result := DelimitedText; finally Free; end; end; |
Die eigentliche Lyric-Such-Methode ist dann stark gekürzt so: (d.h. ohne Thread-Kram und Exception-Handling)
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| LyricQuery := 'http://lyricwiki.org/api.php?func=getSong&artist=' + StringToURLString(WordUppercase(UTF8Encode((aArtist)))) + '&song=' + StringToURLString(WordUppercase(UTF8Encode((aTitel)))) + '&fmt=text'; myLyrics := idHttp1.Get(LyricQuery); |
Bergmann89 - Fr 10.07.09 17:38
wunderhübsch. funzt alles 1a. danke!
Bergmann89 - Sa 11.07.09 16:27
HI,
1 Problem hab ich noch und zwar bleibt das ganze Prog hängen, solange TidHTTP arbeitet, kann man das ändern?
MfG Bergmann
Gausi - Sa 11.07.09 17:04
Ja, das kann man auch ändern. Eine Möglichkeit wäre diese Antifreeze-Komponente von den Indys, die aber vom Gefühl her irgendwie Murks ist. Besser ist es, das herunterladen in einen Thread auszulagern.
Bergmann89 - Sa 11.07.09 17:59
HI,
hab die Suche jetzt komplet in nen Thread ausgelagert, aber wenn ich gesucht hab hageltes beim schließen des Progs Fehlermeldungen: Ungültiges Fensterhandle.
So hab ich das gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| TSearchThread = class(TThread) abort: Boolean; procedure Execute; override; end;
procedure TSearchThread.Execute; begin [Quelltext zur LyricSuche mit schleife die die Datein durchzählt. wenn abort = true bricht die schleife ab...] end;
procedure TForm1.StartSearchClick(Sender: TObject); var i: Integer; begin Thread := TSearchThread.Create(True); Thread.FreeOnTerminate := True; Thread.Resume; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(Thread) then Thread.Terminate; end; |
Hab noch nie mit Thread programmiert und weiß net wo ich den Fehler suchen soll...
MfH & Thx Bergmann
Bergmann89 - Mi 05.08.09 09:09
Heyho,
irgendwie geht das REST nich mehr. Gibts noch ne andere Lsg? Ich hab mir das jetzt Stück für Stück aus den HTML-Code zusammen gebastelt, aber das is ar***-lahm!
Mfg Bergmann
Gausi - Mi 05.08.09 09:30
Argh. Diese [*selbstzensur*] von Plattenbossen. Kriegen den Hals wieder nicht voll und torpedieren ein offenes Projekt. Klar, durch die kostenlose Verbreitung von Liedtexten entgehen den armen Künstlern drölftausend Milliarden Einnahmen pro Tag. :autsch:
| Aktuelle Antwort bei Lyric-Requests: |
Unfortunately, due to licensing restrictions from some of the major music publishers we can no longer return lyrics through the LyricWiki API (where this application gets some or all of its lyrics).
The lyrics for this song can be found at the following URL:
<URL zum angeforderten Song>
(Please note: this is not the fault of the developer who created this application, but is a restriction imposed by the music publishers themselves.) |
Da bleibt wohl als Abhilfe nur, die URL aus dieser Antwort auszulesen, die Seite aufzurufen und den Text daraus zu extrahieren, siehe auch
hier [
http://groups.google.com/group/lyricwiki-api/browse_thread/thread/733ccd919d654040].
Urheberrechte hin oder her, die Künstler sollen und müssen für ihre Arbeit entlohnt werden. Aber bei solchen Aktionen möchte ich einfach nur alle diese Typen in einen Sack packen und mit einem dicken Knüppel draufhauen. Da denkt man, die kriegen langsam die Kurve von wegen kein DRM, mp3 und fair-use, und dann kommt wieder sowas. :motz:
Gausi - Do 06.08.09 18:59
Probier mal die Links auf der Seite aus, die als Beispiel für die Textsuche dienen sollen ;-). Die API ist nicht komplett abgeschaltet, aber die wichtigen Teile schon. :(
Bergmann89 - Mo 02.11.09 23:29
Hey,
da LyricWiki ja zwischenzeitlich komplett down war ist sie jetzt zu neuem Leben erwacht...
Mit dem kleinen aber feinen Unterschied, das der Text jetzt durch ein JavaScript geladen wird und nicht mehr direkt im Quelltext steht.
Nun die Frage: kommt man irgendwie über den JavaScript an die Lyrics, wenn ja wie und wäre das legal?
Mfg Bergmann.
platzwart - Mo 02.11.09 23:32
Um sicher zu gehen, frag doch einfach an, ob du es bei denen darfst. Aber generell würde ich sagen, dass das nicht OK ist.
Gausi - Di 03.11.09 08:50
Irgendwie geht das bestimmt. Es ist dann aber keine Methode, die sicher vor Veränderungen an der Seite ist.
Legal ist das dann natürlich keineswegs - denn die API wurde ja abgeschaltet, um genau das zu verhindern. Außerdem schädigst du mit dem automatisierten Herunterladen von Lyrics die Künstler, hast Schuld an der Weltwirtschaftskrise und bist (zumindest teilweise) Verursacher der Schweinegrippe-Pandemie. :roll:
Robert.Wachtel - Di 03.11.09 11:13
Gausi hat folgendes geschrieben : |
| [...] Alternativ gehts auch über SOAP, aber auf den Delphi-Tagen haben wir ja dieses Jahr gelernt, dass SOAP sowieo Mist ist, und REST viel toller. :D [...] |
Ach je, das seh ich ja jetzt erst. :shock:
Wer verzapft denn so einen ausgemachten Unsinn? Sollte das in dieser Allgemeinheit tatsächlich Ernst gemeint sein, hat da jemand aber von seinem Metier nicht wirklich Ahnung.
Sicherlich ist REST für solche unkritischen Suchabfragen das Protokoll der Wahl, aber was ist denn mit SOA-Infrastrukturen, in denen z.B. Sicherheitsapekte oder nichtfunktionale Attribute eine Rolle spielen? Von fehlender Unterstützung von Komponier- oder Orchestrierbarkeit durch REST möchte ich gar nicht erst sprechen...
Gausi - Di 03.11.09 11:19
Das war Marco Cantu, und das war wohl so halb ernst gemeint. Begründung (in etwa): REST ist deutlich einfacher und simpler gestrickt, und reicht für viele Anwendungen aus. In seinem Vortrag hat er dann einige Beispiele genannt, wie man mit ein paar Zeilen Code da was basteln kann. IIRC was zu GoogleMaps und Twitter.
Eine allgemeine Abwertung von SOAP war das vermutlich nicht, aber oftmals ist das wohl eher mit Kanonen auf Spatzen geschossen.
Robert.Wachtel - Di 03.11.09 11:40
Gausi hat folgendes geschrieben : |
| Das war Marco Cantu, und das war wohl so halb ernst gemeint. [...] |
Ach so, dann bin ich ja beruhigt. ;)
Marco Cantus Beispiele zu REST beziehen sich ja tatsächlich auf den Konsum unkritischer Abfragen. Dort sehe ich auf Grund des geringeren Overheads tatsächlich Vorteile für REST gegenüber anderen Protokollen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!