Entwickler-Ecke

Internet / Netzwerk - Pic Downloader


Dude566 - Fr 13.02.09 15:55
Titel: Pic Downloader
Also ich möchte einen Bild Downloader schreiben, der alle Bilder herunterlädt die in der Url stecken die der Benutzer vorgibt.

Nur mein Problem ist das mit UrlDownLoadToFile klappt nicht, ich wollte diese Variante nehmen da jemand in einem Thread meinte für Bilder würde es schicken.

Gruß Dude566


Delete - Fr 13.02.09 16:15
Titel: Re: Pic Downloader
user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Nur mein Problem ist das mit UrlDownLoadToFile klappt nicht,

Und jetzt sollen wir raten, warum es nicht klappt und dir funktionierenden Quellcode geben?


Dude566 - Fr 13.02.09 16:23

Sorry ich dachte der Code wäre nicht nötig, man kann ja eigentlich nicht viel falsch machen.


Delphi-Quelltext
1:
2:
3:
4:
    SaveDialog1.Filter := 'Jpeg-Dateien|*.jpg';
    datei := PChar(Edit1.Text);
    ziel := PChar(SaveDialog1.Filename);
    UrlDownloadToFile(nil, PChar(datei), PChar(ziel), 0nil);


UrlDownLoadToFile soll ein ungültiger Bezeichner sein.


Blackheart666 - Fr 13.02.09 16:36

Du musst noch die passende unit dazu einbinden.


Gausi - Fr 13.02.09 16:36

Dann hast du nur die richtige Unit nicht eingebunden. UrlMon hieß die glaube ich, aber das lässt sich mit einem Blick in die Delphi-Hilfe oder einer kurzen Internet-Recherche nach "UrlDownLoadToFile urlmon" bestimmt schnell herausfinden.


jaenicke - Fr 13.02.09 16:38

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
UrlDownLoadToFile soll ein ungültiger Bezeichner sein.
Dann schau doch einmal in die Doku:
http://msdn.microsoft.com/en-us/library/ms775123.aspx
Ganz unten steht wo die Funktion definiert ist, die entsprechende Unit musst du dann einbinden.

Ich seh schon, ja Gausi, du glaubst richtig. :mrgreen:


Dude566 - Fr 13.02.09 16:50

Ich habe da jetzt nochmal eine Frage wie kann ich denn die Links aller Bilder auf einer Seite auslesen, habe gelesen es ginge mit Parsern.

Wie funktioniert das, und hat jemand einen der dafür gut geeignet ist?


jaenicke - Fr 13.02.09 16:54

Auch wenn der Thread gesperrt ist, weil der Autor nichts Gutes damit vorhatte, es steht alles zu dem Thema drin:
http://www.delphi-forum.de/viewtopic.php?t=89672


Dude566 - Fr 13.02.09 17:02

Also von der Theorie her ist es doch dann so:

1. Quelltext in Memo speichern
2. Parser Text auswerten lassen
3. Links rausziehen
4. Links dann in Downloadprozedur einfügen


Gausi - Fr 13.02.09 17:05

Wenn man statt Memo einen String oder eine Stringlist nimmt: Ja, das geht so. :D


Dude566 - Fr 13.02.09 17:22

Wie viel lässt sich denn in eine StringList speichern?
Habe StringList bisher nur gebraucht um Text in txt. Dateien abzuspeichern.
Schickt das auch wenn der Quelltext etwas größer ist?


jaenicke - Fr 13.02.09 17:44

Also einen Quelltext, der den Arbeitsspeicher sprengt, sollte dir nicht unterkommen. ;-)

Zudem reicht auch ein normaler String, schließlich geht es ja nicht um eine zeilenweise Analyse. Dessen Größe wird praktisch nur durch den verfügbaren Speicher beschränkt, denn dessen Größenangabe ist 32 Bit groß :mrgreen:.
Eine StringList würde nur unnötig Rechnerzeit verschwenden, gerade bei größeren Quelltexten.


Dude566 - Fr 13.02.09 19:41

Ok ich habe den Parser den du in dem anderen Thread erwähnt hattest heruntergeladen.

Was muss ich jetzt mit den Dateien da drin machen, und was muss ich in das Programm schreiben?

Gibt es irgendwo ein Tut oder eine Demo?


jaenicke - Fr 13.02.09 19:58

Welchen der beiden? Ich hatte zwei verlinkt, nur mit dem zweiten habe ich selbst schon einmal gearbeitet.

Bei dem musste man immer NextTag aufrufen und hatte dann das aktuelle Tag in der entsprechenden Eigenschaft. Und dann habe ich da so etwas gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
  while PageParser.NextTag do
  begin
    if (PageParser.Tag.Name = '/TD'or (PageParser.Tag.Name = 'BR'then
      tmpPrintResult.Add(Trim(PageParser.TextBetween));
...


Dude566 - Mo 16.02.09 21:39

Gibt es nicht vielleicht eine Methode, es so zu machen wie mit dem Firefox.

Also mit Seite Speichern Unter, und dann Website komplett.

Oder anstatt "Website komplett" im besten Fall nur die Bilder dann.


jaenicke - Mo 16.02.09 22:18

Der macht das doch im Grunde so. ;-)

Die einfachere, aber unsaubere Variante wäre der TWebBrowser, mit dem kann man glaube ich auch so speichern.


Dude566 - Di 28.04.09 16:15

Eigentlich könnte ich es auch ohne so einen fertigen Parser machen, ich muss nur den gesamten Quellcode in ein Memo schreiben, und dort Zeile für Zeile weiter in ein String speichern.

Den String (Zeile) gehe ich dann mit Pos durch, nur wie kann ich das dort eingrenzen?
Also das er den Link von da bis dahin kopiert, also nicht die ganze Zeile, ich will ja wirklich nur den Link aus der Zeile.


F34r0fTh3D4rk - Di 28.04.09 18:00

Eigentlich bräuchtest du nur diesen Code verwenden: http://www.delphi-forum.de/viewtopic.php?t=75563
Der tut nämlich genau das, was du möchtest ;)

mfg


Dude566 - Mi 29.04.09 16:43

Ein ganz schöner Haufen, da muss ich mich erst mal reinarbeiten bis ich das verstanden habe.;)


F34r0fTh3D4rk - Mi 29.04.09 19:48

Da ist eine Funktion zum raussuchen der Links (ok, die hat ein paar extra Features, wie Filter, aber im Grunde ist das ganz einfach ;) ) und eine mit dem Namen Download. Die entsprechenden Komponenten (idHttp afair) vorausgesetzt kann man die fast direkt so übernehmen. Wobei Bugs natürlich nicht ausgeschlossen sind. 8)

mfg