Autor Beitrag
IceBube
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: So 22.04.07 16:56 
Hallo! :wink2:

Hab ein kleines Programm geschrieben, mit dem man Liedertexte aus dem Web holen kann, ist nix besonderes, ich dacht mir mal ich zeigs euch.

Man kann den Liedertext, wenn einer gefunden wurde, dann auch auf die Festplatte speichern, und das wars eigentlich schon....

Das Programm legt eine Datei im Programm Verzeichnis an('lied.tmp)....
getestet unter WinXP

lg
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 22.04.07 17:04 
Hmmm...das ist so ein Prog, wo ich gerne den Quelltext sehen würde, wie du das machst. Wie suchst du, wo suchst du, und wie filterst du evtl. mehrere Ergebnisse?

Lässt sich das erweitern, dass man evtl. bei einem "falschen Treffer" weiter suchen kann? Oder spezifischer nach Interpret und Titel?

_________________
We are, we were and will not be.
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: So 22.04.07 17:12 
Also an sich find ich das Programm von der Idee nicht schlecht.
Leider find ich fast kein Lied ... einmal hab ich eins gefunden, aber dass war dann nicht das was ich wollte :-( einmal war ein langer HTML-Text da ... naja, zufriedenstellend ist es jedenfalls noch nicht.
Also ich dachte erst ich müsste oben Interpret angeben, aber dann kommt ja garnix ... und wenn ich nen Titel angeb kommt wiegesagt auch fastnix.
Verfeiner das Programm vll noch einbissel :-)
Auf welcher Seite suchst du denn`?

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: So 22.04.07 17:16 
hallo!

ja, man kann die Funktion noch besser machen, ich hab jetzt schnell mal das Programm geschrieben, in einer halben stunde....es geht leider nicht bei allen Liedertext seiten, aber ich hab eine gefunden da konnte ich liedertexte rausfiltern


Hier der Quelltext >> nix großartiges :=)


ausblenden volle Höhe 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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
//Konvertiert Html zu Text
function Convert(Filename:string):string;
var
  IDoc: IHTMLDocument2;
  Strl: TStringList;
  sHTMLFile: string;
  v: Variant;
  Links: IHTMLElementCollection;
  i: Integer;
  Link: IHTMLAnchorElement;
begin
    sHTMLFile := FileName;
    Strl := TStringList.Create;
    try
      Strl.LoadFromFile(sHTMLFile);
      Idoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
      try
        IDoc.designMode := 'on';
        while IDoc.readyState <> 'complete' do
          Application.ProcessMessages;
        v := VarArrayCreate([00], VarVariant);
        v[0] := Strl.Text;
        IDoc.Write(PSafeArray(System.TVarData(v).VArray));
        IDoc.designMode := 'off';
        while IDoc.readyState <> 'complete' do
          Application.ProcessMessages;
        Form1.Memo1.Lines.Text := IDoc.body.innerText;
      finally
        IDoc := nil;
      end;
    finally
      Strl.Free;
    end;
end;

//Starten der Suche nach den Liedertext
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c : integer;
begin
//Leerzeichen zu "+"
for a := 0 to Length(Edit1.Text) do
begin
Edit1.SelStart := a;
Edit1.SelLength := 1;
if Edit1.SelText = ' ' then Edit1.SelText := '+';
end;

//Such Ergebniss in ein Memo herunterladen....
Memo2.Text := http.Get('http://www.i-songtexte.com/index.php?action=search&q=title&string='+Edit1.Text);

//for schleife dursucht Such Ergebnisse im Memo
for a := 5600 to Length(Memo2.Text) do
begin
Application.ProcessMessages;
Progressbar1.Max := Length(Memo2.Text);
PRogressbar1.Position := a;

//suche nach href="....
Memo2.SelStart := a;
Memo2.SelLength := Length('href="http://www.i-songtexte.com/');

//wenn gefunden dann....
if Memo2.SelText = 'href="http://www.i-songtexte.com/' then
begin

//2 Schleife suche nach Ende vom Link = ">
for b := a+Length('href="http://www.i-songtexte.com/'to a+200 do
begin
Application.ProcessMessages;
Progressbar1.Max := a+200;
PRogressbar1.Position := b;
Memo2.SelStart := b;
Memo2.SelLength := Length('">');

//Gefunden....
if Memo2.SelText = '">' then
begin

//Link markieren
Memo2.SelStart := a+Length('href="');
MEmo2.SelLength := b-(a+Length('href="'));

//Link in Memo laden und convertieren
try
Memo1.Text := http.Get(Memo2.SelTexT);
Memo1.Lines.SaveToFile('Lied.tmp');
convert('Lied.tmp');
Memo1.SelStart := Length(Memo1.Text)-634;
Memo1.SelLength := 634;
Memo1.SelText := '';
except
ShowMessage('Keinen Songtext gefunden!');
exit;
end;
exit;
end;
end;

end;


Zu deiner Frage ob man das Erweitern kann...sichA....ich hab aba kein Bock ghabt das zu machen,.....

Die Seite von wo ich die Liedertexte suche ist folgende:
www.i-songtexte.com

lg
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 22.04.07 17:28 
Der Source ist sehr äh... unoptimiert :lol:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Memo2.SelStart := b;  
Memo2.SelLength := Length('">');  

//Gefunden....  
if Memo2.SelText = '">' then

-->
ausblenden Delphi-Quelltext
1:
2:
if Pos('">', Memo2) > 0 then
  // Gefunden


Außerdem solltest du nicht den HTML-Text auch im Memo anzeigen, sondern in einer Variable speichern.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: So 22.04.07 17:34 
ja....ich weiß, wie gesagt hab ich es nur mal so schnell geschrieben,

irgendwie denk ich mir aba, das bringt sich eh nix, wozu braucht man sowas, kann man ja im Internet nachschaun.....

ich weiß nicht, ich bin gerade auf der suche...nach einer IDEE zu einem Programm.

lg
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 22.04.07 17:44 
Nun...ich wüsste wozu ich das gebrauchen kann :D

Hab da so einen Player geschrieben, der eine Funktion "Liedtexte holen" bisher mit Hilfe eines anderen Programms (EvilLyrics) löst. Die Texte werden dann im ID3-Tag gespeichert und können z.B. beim abspielen angezeigt werden. Wenn sich der Code nun erweitern ließe, so dass ggf. auf mehreren Seiten gesucht werden kann, wäre das extrem gut. Dann könnte ich diese Funktion von Haus aus mitliefern, und wäre nicht auf dieses andere Programm angewiesen. Bisher habe ich mich damit aber nicht beschäftigt - daher meine neugierige Nachfrage nach dem Code ;-)

_________________
We are, we were and will not be.
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: So 22.04.07 17:48 
user profile iconGTA-Place hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Memo2.SelStart := b;  
Memo2.SelLength := Length('">');  

//Gefunden....  
if Memo2.SelText = '">' then

-->
ausblenden Delphi-Quelltext
1:
2:
if Pos('">', Memo2[b].Text[/b]) > 0 then
  // Gefunden



//EDIT: Mist, wieso kann man im Delphi-Tag nicht fett schreiben? Naja egal

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: So 22.04.07 22:19 
ja...ich glaub ich werd bei diesem Projekt weiter machen, und mich mehr anstrengen...als vorher...

Bin gerade dabei ein Programm zu machen, das Liedertexte herunterladet und aber auch Biographien und Covers anzeigen kann.

Hab eine Neue Seite gefunden, bei der das herausfiltern der Texte supa einfach ist, geplant ist auch Akkord-Texte herunterzuladen...wenn welche vorhanden sind.

Die Seite ist perfekt, viel mehr Liedertexte und Akkorde.....

Wenn ich es schaff das Programm fertigzustellen, programmier ich vielleicht auch einen Komponenten, @Gausi --> Für deinen Player Nemp wär das eh perfekt!

Hoffe ich bekomm das alles hin...mal schaun, ich denk mir ich brauch für das Programm ne Woche, wenn nicht weniger.....

der Komponent...mal schaun...

lg
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: Mo 23.04.07 18:32 
^hab herum probiert und herum probiert komm aba net weiter....ein Versuch was Wert, ich geb auf *schäme mich ;/....

ich such ma liaba ein durchführbares Projekt, bei dem ich weiter komm...

lg