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



BeitragVerfasst: Fr 27.04.07 16:47 
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


Zuletzt bearbeitet von IceBube am Di 01.05.07 15:09, insgesamt 10-mal bearbeitet
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: 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

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: 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....

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:
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
//Suche nach dem Interpreten Link

StatusBar1.SimpleText := 'Suche wurde gestartet....';
for a := 0 to Length(Memo.Text) do
begin
//Abbruch
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
//Anfang von A setzen -> auf C
c := a + Length('<a href="');

//Ende suchen
for b := a+Length('<a href="http://www.i-songtexte.com/'to a+100 do
begin
Application.ProcessMessages;
//Abbruch
if SpeedButton2.Hint = 'Cancel' then exit;

Memo.SelStart := b;
Memo.SelLength := Length('" class="titel">');

if Memo.SelText = '" class="titel">' then
begin
//Interpreten link gefunden....
Memo.SelStart := c;
Memo.SelLength := b-c;
Link := Memo.SelText;

//Den Titel holen
for c := b to b+85 do
begin
Application.ProcessMessages;
//Abbruch
if SpeedButton2.Hint = 'Cancel' then exit;

Memo.SelStart := c;
Memo.SelLength := Length('</a><br>');

if Memo.SelText = '</a><br>' then
begin
//Anfang von B setzen --> auf d
d := b+Length('" class="titel">');

//Titel gefunden....
Memo.SelStart := d;
Memo.SelLength := c-d;
Interpret := Memo.SelText;

//Überprüfe Interpret
Edit4.Text := LowerCase(Interpret);
for d := 0 to Length(Edit4.Text) do
begin
Application.ProcessMessages;
//Abbruch
if SpeedButton2.Hint = 'Cancel' then exit;

Edit4.SelStart := d;
Edit4.SelLength := Length(Edit3.Text);
if Edit4.SelText = Edit3.Text then
begin
//Identischen gefunden! - Nach Song suchen....
Mem.Text := http.Get(Link);
http.Disconnect;

for e := 0 to Length(Mem.Text) do
begin
Application.ProcessMessages;
//Abbruch
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
//Setze Anfang von E --> auf f
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
//Titel link gefunden
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
//Titel gefunden - überprüfe....
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 user profile iconGausi: Code- durch Delphi-Tags ersetzt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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:


  1. Keine Suche in Visuellen Komponenten
  2. Es gibt die String-Funktionen Pos, Copy und Delete (mehr brauch man nicht)
  3. 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.
  4. Anstatt den Memo-Text zu durchsuchen (was diesen jedesmal neu zusammensetzt), solltest Du dir diesen einmal als String speichern und mit diesem arbeiten
  5. SelStart, SelLength und SelText sind nur für die Auswahl von Text zu benutzen, nicht zum Durchsuchen!
  6. ...


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 ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: 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)
Einloggen, um Attachments anzusehen!
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Fr 27.04.07 22:01 
So sieht jeder Fortschrittsbalken einer mit Manifest kompilierten Exe unter Vista aus.
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: 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 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...

_________________
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]
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Sa 28.04.07 09:13 
user profile iconKarlson hat folgendes geschrieben:
So sieht jeder Fortschrittsbalken einer mit Manifest kompilierten Exe unter Vista aus.


Danke für den Hinweis :wink:
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: Mo 30.04.07 10:11 
Titel: New Version
Neue Version erschien, siehe 1 Beitrag^

lg
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 30.04.07 12:52 
Ich seh da nur 2 Screenies ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mo 30.04.07 13:08 
user profile iconBenBE 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: )

_________________
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]
IceBube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: Mo 30.04.07 23:35 
user profile iconBenBE 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: 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).

_________________
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]