Entwickler-Ecke
Freeware Projekte - Lyric Crapper(FINAL VERSION!)
IceBube - Fr 27.04.07 16:47
Titel: Lyric Crapper(FINAL VERSION!)
Hallo Leute!
Hier meine Neueste Version von Lyric Crapper!
Was ist Lyric Crapper?
Mit Lyric Crapper kann man bequem Liedersuchen und diese dann speichern. Das Programm hat auf 75000 Liedertexte zugriff. Zu manchen Interpreten gibt es auch Biographien die man abrufen kann!
Neues
In der Final Version, muss man nicht mehr den Interpreten angeben, man kann auch nach Songtiteln suchen!
Zum Programm
Es werden keine Zusätzlichen Dateien in der Registry oder sonst wo erstellt!
Getestet unter WinXP
Die Final Version?
Nun ist sie hier, die Final Version, mit Unterstützung durch so manchen netten Leute. Die Bibliothek die geplant war, hab ich raus gegeben + die Fund Details, da ich mir denke das Reicht bis jetzt schon. Außerdem wollt ich ja nur Liedertexte suchen&und speichern und das gelingt mir jetzt mit dem Programm
Lg
Silas - Fr 27.04.07 17:22
Hallo,
ich hab mir dein Programm mal angesehen:
- die Suchdauer ist unzumutbar (bei mir hat eine Suche über drei Min gedauert). Wie sieht denn dein Code dafür aus bzw. wie funktioniert er?
- Kleiner Schönheitsfehler: Wenn man nichts eintippt und suchen klickt, kommt eine Zugriffsverletzung.
Silas
IceBube - Fr 27.04.07 17:35
es dauert schon recht lang da hast du recht, ich hab nur bis keinen anderen Weg gefunden...
Ich mach das mit for schleifen, such nach ein paar Zeichen und hole mir somit die Interpreten.
>Leider muss man einen Interpreten angeben, ich hab das mit der Fehlermeldung vergessen :/....baue es aber jetzt ein....
Hier der Code, ist sicher ein bisschen umständlich geschrieben, vl auch ein bisschen unübersichtlich....
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: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172:
| function TForm1.GetIT(Memo,Mem:TMemo):string; var a,b,c,d,e,f,g,h,i,j,k,l,m,n :integer; Link,Link2,Titel,Interpret:string; Item : TListItem; begin
StatusBar1.SimpleText := 'Suche wurde gestartet....'; for a := 0 to Length(Memo.Text) do begin if SpeedButton2.Hint = 'Cancel' then exit;
Application.ProcessMessages; Progressbar1.Max := Length(Memo.Text); Progressbar1.Position := a;
Memo.SelStart := a; Memo.SelLength := Length('<a href="http://www.i-songtexte.com/');
if Memo.SelText = '<a href="http://www.i-songtexte.com/' then begin c := a + Length('<a href="');
for b := a+Length('<a href="http://www.i-songtexte.com/') to a+100 do begin Application.ProcessMessages; if SpeedButton2.Hint = 'Cancel' then exit;
Memo.SelStart := b; Memo.SelLength := Length('" class="titel">');
if Memo.SelText = '" class="titel">' then begin Memo.SelStart := c; Memo.SelLength := b-c; Link := Memo.SelText;
for c := b to b+85 do begin Application.ProcessMessages; if SpeedButton2.Hint = 'Cancel' then exit;
Memo.SelStart := c; Memo.SelLength := Length('</a><br>');
if Memo.SelText = '</a><br>' then begin d := b+Length('" class="titel">');
Memo.SelStart := d; Memo.SelLength := c-d; Interpret := Memo.SelText;
Edit4.Text := LowerCase(Interpret); for d := 0 to Length(Edit4.Text) do begin Application.ProcessMessages; if SpeedButton2.Hint = 'Cancel' then exit;
Edit4.SelStart := d; Edit4.SelLength := Length(Edit3.Text); if Edit4.SelText = Edit3.Text then begin Mem.Text := http.Get(Link); http.Disconnect;
for e := 0 to Length(Mem.Text) do begin Application.ProcessMessages; if SpeedButton2.Hint = 'Cancel' then exit;
Progressbar1.Max := Length(Mem.Text); Progressbar1.Position := e;
Mem.SelStart := e; Mem.SelLength := Length('<a href="http://www.i-songtexte.com/');
if Mem.SelText = '<a href="http://www.i-songtexte.com/' then begin f := e+Length('<a href="');
for g := e to e+150 do begin Application.ProcessMessages;
Mem.SelStart := g; Mem.SelLength := Length('" class="titel">');
if Mem.SelText = '" class="titel">' then begin Mem.SelStart := f; Mem.SelLength := g-f; Link2 := Mem.SelText;
for h := g to g+110 do begin Application.ProcessMessages;
Mem.SelStart := h; Mem.SelLength := Length('</a>');
if Mem.SelText = '</a>' then begin Mem.SelStart := g + Length('" class="titel">'); Mem.SelLength := h-(g+Length('" class="titel">')); Titel := Mem.SelText;
if edit2.Text = '' then begin ListBox1.Items.Append(Link2); Item := ListView1.Items.Add; Item.Caption := '*'; Item.SubItems.Append(''); Item.SubItems.Append(''); Item.SubItems.Strings[0] := Interpret; Item.SubItems.Strings[1] := Titel; end else begin Edit5.Text := LowerCase(Edit2.Text); Edit6.Text := LowerCase(Titel);
for i := 0 to Length(Edit6.Text) do begin Application.ProcessMessages;
Edit6.SelStart := i; Edit6.SelLength := Length(Edit5.Text);
if Edit6.SelText = Edit5.Text then begin ListBox1.Items.Append(Link2); Item := ListView1.Items.Add; Item.Caption := '*'; Item.SubItems.Append(''); Item.SubItems.Append(''); Item.SubItems.Strings[0] := Interpret; Item.SubItems.Strings[1] := Titel; end; end; end; end; end; end; end; end; end; end; end; end; end; end; end; end; end; |
lg
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
BenBE - Fr 27.04.07 17:44
AAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTSCH!!!
Also ich hab nicht mal ein Drittel der Routine gelesen und hatte schon extremsten Augenkrebs ... Also mal soviel:
- Keine Suche in Visuellen Komponenten
- Es gibt die String-Funktionen Pos, Copy und Delete (mehr brauch man nicht)
- Eine For-Schleife auf einen String nimmt man für die Suche NIE, wenn man ein Suchmuster hat, was lang genug ist. Schau dich in der Wiki einmal nach anderen Algorithmen um, sollte Pos noch nicht wesentliche Verbesserungen bewirken.
- Anstatt den Memo-Text zu durchsuchen (was diesen jedesmal neu zusammensetzt), solltest Du dir diesen einmal als String speichern und mit diesem arbeiten
- SelStart, SelLength und SelText sind nur für die Auswahl von Text zu benutzen, nicht zum Durchsuchen!
- ...
Danach sollte es schneller gehen ...
Ach ja: Verwende bitte Delphi-Tags statt Code-Tags, dann hat dein Source auch SyntaxHighlighting. Wenn Du dann noch einen SourceFormatter benutzt, wird der Quälkot sogar lesbar ;-)
IceBube - Fr 27.04.07 19:01
Danke für die Hinweise BenBe...hab das mit Pos schon mal Probiert aba checks irgendwie net....ich schau mir mal ein Tutorial an...
mal schaun obs dann schneller geht - ich hoffe...
lg
Karlson - Fr 27.04.07 19:14
Also 3 Minuten hat das bei mir aber nich gedauert :gruebel: Insgesamt 30 Sekunden (was natürlich aber immernoch zu lang ist...)
stigge - Fr 27.04.07 20:44
Also ich finde das Programm gut, außer das man immer einen Interpreten angeben muss.
Aber sonst echt nützlich! :wink:
BenBE - Fr 27.04.07 20:53
Das mit dem Interpreten ließe sich aber auch recht einfach ändern, indem man einfach die 36 Seiten mit dem Intreten-Index einmal kurz beim Programmstart parst und dann diese Liste offline zum Vergleichen nutzt. Alternativ könnte man auch ne Art Cache bauen, wo man die geparsten Inhalte der Seite lokal zwischenspeichert und mit dem Netzarchiv nur überprüft, ob sich was geändert hat, wenn nötig ...
stigge - Fr 27.04.07 20:58
Noch eine Frage:
Wo hast du diesen Fortschrittsbalken her?
Oben im Titel steht das das Programm ein Win32 Programm ist,
aber diesen Balken gibt's doch nur im .NET Framework, oder?
Ich könnte ihn nämlich auch gut gebrauchen :wink:
Edit:
Wenn man nur ein * bei Interpret eingibt, dann bekommt man übrigens einen HTTP-Fehler(siehe Anhang)
Karlson - Fr 27.04.07 22:01
So sieht jeder Fortschrittsbalken einer mit Manifest kompilierten Exe unter Vista aus.
IceBube - Fr 27.04.07 22:35
so...habs nochmal neu geschrieben - und habs jetzt auch sogemacht wie BenBe es schon geschrieben hat...hab alle Interpreten geparst
Und jetzt geht es perfekt, beim Speichern dauert es ein bisschen lange bis der Dialog sich schließt....daran arbeite ich noch.
Download im ersten Eintrag!
- mist, hab schon wieder vergessen, dass wenn man nichts eingibt beim Interpreten eine Zugriffverletzung kommt....hab jetzt aber keine Zeit dafür....
lg
Dunkel - Sa 28.04.07 00:11
Hallo IceBube,
ich möchte Dir mal für die Inspiration danken, welche Du mir (wohl wahrlich unbewusst) mit diesem Projekt gegeben hast! DANKE! :D
btw.
Du scheiterst an recht simplen Dingen. Schau Dir mal meinen
Quellcode [
http://www.delphi-forum.de/viewtopic.php?p=430562#430562] zum Parsen von Shoutcast.com an; vielleicht findest Du darin auch ein wenig Inspiration, bzw. einen (besseren?!!) Ansatz um Dein Projekt (noch) besser zu machen...
stigge - Sa 28.04.07 09:13
Karlson hat folgendes geschrieben: |
So sieht jeder Fortschrittsbalken einer mit Manifest kompilierten Exe unter Vista aus. |
Danke für den Hinweis :wink:
stigge - Sa 28.04.07 09:20
Noch eine kleine Anmerkung am Rande:
Ich habe bei Vista so ein Sidebargadget, das die CPU-Leistung anzeigt.
Als ich jetzt mit deinem Programm eine Suche gestartet habe, hab ich gemerkt,
das die Leistung entweder bei 100% ist oder bei 4%. :?
Schickt die Seite die Ergebnisse in mehreren Teilen oder warum schwankt die CPU-Leistung so stark? :nixweiss:
IceBube - Sa 28.04.07 18:56
@Dunkel....Gern geschehen, ich werd mir mal deinen Quelltext anschaun, ich hab noch ein paar Probleme mit dem Parsen, habs auch ziemlich umständlich gemacht am Anfang, aber mit der Zeit wird es besser...ich schau mir dein Programm am Sonntag an...heut finde ich leider keine Zeit dafür - danke fürs Feedback - hat mich gefreut :)
@stigge...hmm, ich muss die Seiten von den Interpreten herunterladen - um an die Lieder zukommen..muss mir das noch was einfallen lassen..
Im insgesamten komme ich eigentlich recht gut weiter, am Anfang hat die Suche ja noch bis zu 1 Minute gedauert :/, jetzt hingegen -|....aber da ist noch sehr viel zu tun, mit den Parsen, mal schaun obs was wird....
Ich halt euch am Laufenden!
Lg
IceBube - Mo 30.04.07 10:11
Titel: New Version
Neue Version erschien, siehe 1 Beitrag^
lg
BenBE - Mo 30.04.07 12:52
Ich seh da nur 2 Screenies ...
Dunkel - Mo 30.04.07 13:08
BenBE hat folgendes geschrieben: |
Ich seh da nur 2 Screenies ... |
Vor 'ner Stunde war noch ein Screenshot & eine gezippte EXE als Download vorhanden! Wo auch immer die EXE jetzt hin ist... :shock: (Was hat Tino da schon wieder gemacht?!? :roll: :wink: )
IceBube - Mo 30.04.07 23:35
BenBE hat folgendes geschrieben:
Zitat: |
Das mit dem Interpreten ließe sich aber auch recht einfach ändern, indem man einfach die 36 Seiten mit dem Intreten-Index einmal kurz beim Programmstart parst und dann diese Liste offline zum Vergleichen nutzt. |
Das würd zu lange dauern, bei insgesamt 75000 Liedertexte, ist das eine Menge Arbeit, da müsste man lange warten bis das Programm einmal startet, denke ich mir mal...
:( leider.
Zitat: |
Alternativ könnte man auch ne Art Cache bauen, wo man die geparsten Inhalte der Seite lokal zwischenspeichert und mit dem Netzarchiv nur überprüft, ob sich was geändert hat, wenn nötig ...
|
hmm....das wäre eine Idee, mal schaun....
:
Hab jetzt zum zweiten Mal das ganze hinaufgeladen, ich hoffe es bleibt auch oben > den Screenshot > jetzt in png Format...
lg
Dunkel - Di 01.05.07 00:45
Sach mal, blendest Du 'Lacrimosa' mit Absicht aus?!? Obwohl i-songtexte.com einiges von denen im Datenbestand hat, findet Dein Programm nichts. :cry:
btw.: Mit i-songtext.com kannst Du auch eine Art Fuzzy-Suche ausführen, so dass bei 'hosen' auch 'Die Toten Hosen' gefunden werden (siehe
hier [
http://www.delphi-forum.de/viewtopic.php?p=437660#437660]).
IceBube - Di 01.05.07 10:04
Nein, weiß nicht wieso er den Interpreten nicht geparst hat(Ist in der Liste nicht drinnen). Aber danke das du mir das sagst, da muss das Programm beim parsen etwas übersehn haben! :/
Ich weiß ich hab das am Anfang eh mit der Suche gemacht, doch ich bin drauf gekommen, das er nicht alles findet. Vielleicht sollte ich beides einbaun...
Edit:
Hab mir dein Programm angeschaut, und man findet wirklich alles, hmm komisch...hab ichs ein bisschen umständlich gemacht :/. Danke für den Hinweis!
lg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!