[GELÖST] Webseitenquelltext herunterladen
-
Paddre schrieb:
Aber wie verwende ich wget in c++?
Warum denn überhaupt in C++?
Schaun wir uns am besten einfach mal Nichtlustig.de an und ignorieren wir dabei, dass die auch einen RSS-Feed mit Comic-Updates haben, die wir 1:1 weiterverwenden können, denn vielleicht hat Deine Seite das ja nicht.
Rechtsklick aufs aktuellste Bildchen, "Copy Image Location". Dabei kommt folgendes heraus: "http://nichtlustig.de/comics/full/090308.jpg".
Das da ganz hinten könnte beinahe ein Datum sein, sehen wir uns mal den Comic davor an: "http://nichtlustig.de/comics/full/090304.jpg". Ja, sieht auch nach Datum aus. (4. bzw. 8. 3. 2009.)
Holen wir uns mal ein Datum im richtigen Format; unter GNU/Linux macht man das zB so:
date +'%y%m%d'
Gut, also mal folgendes kleine Shellscript gebastelt:
#!/bin/sh COMIC_BASE_URL=http://nichtlustig.de/comics/full/ DATUM=$(date +'%y%m%d') AKTUELLER_COMIC=${COMIC_BASE_URL}${DATUM}.jpg COMIC_SPEICHERPLATZ=${HOME}/allerallerneuester-nichtlustig-comic.jpg wget ${AKTUELLER_COMIC} -O ${COMIC_SPEICHERPLATZ}
Hab ich zwar nicht getestet, sollte aber hinreichend funktionieren.
-
Den Quelltext bekommt man ja nicht, nur irgendeine http Antwort - welche evtl. eine Datei enthaelt, die auf dem http-Server liegt. f'`8k
Gruß, TGGC (Das kommt gut)
-
Naja bei dem Code oben:
using namespace std;
einfügen. Oder std:: vor die entsrepchenden Namen schreiben.
Aber wie verwende ich wget in c++?
Der Ansatz mit dem Code ist richtig. (Alternativ kann man auch ein Python-Script schreiben unter Windows. ). Ich würde anstatt system() aber popen() hernehmen.
rya.
-
Warum denn überhaupt in C++?
Weil ich es mir abgesehen von dem wget als Übung für C++ gedacht habe
Das da ganz hinten könnte beinahe ein Datum sein, sehen wir uns mal den Comic davor an: "http://nichtlustig.de/comics/full/090304.jpg". Ja, sieht auch nach Datum aus. (4. bzw. 8. 3. 2009.)
Is ja klasse...hab ich nur nichts von, da der Comic der veröffentlicht wird in einem bestimmten Ordner liegt, der Pfad im Quelltext festgelegt ist und die Datei mit bestimmten Wörtern benannt ist (je nach Inhalt des Comics)
Gut, also mal folgendes kleine Shellscript gebastelt:
Was bringt mir das ganze wenn ich Windows User bin?
Die Bilder liegen in den ordnern der jeweiligen Zeichner...ich muss also lediglich an den Quelltext der aktuellen Seite rankommen und kann daraus den Speicherort des Comics parsen.
Bleibt die Frage wie ich an den Quelltext rankomm (wo wir wieder am anfang wären)
-
Scorcher24 schrieb:
Naja bei dem Code oben:
using namespace std;
einfügen. Oder std:: vor die entsrepchenden Namen schreiben.
Aber wie verwende ich wget in c++?
Der Ansatz mit dem Code ist richtig. (Alternativ kann man auch ein Python-Script schreiben unter Windows. ). Ich würde anstatt system() aber popen() hernehmen.
rya.Joa hab ich beides probiert... kommt beide Male die selbe Fehlermeldung.
Hab grad ma wget mit der Kommandozeile ausprobiert und wollte überprüfen ob das überhaupt funktioniert
wget "www.heise.de/index.html"
er resolvt, er versucht zu connecten aber dann irgendwann steht da "timed out" und er startet von vorne.
-
http://www.daniweb.com/forums/thread77325-2.html
http://jameser.blogspot.com/2006/07/tip-7-duplicating-website-using-gnus.html
http://msdn.microsoft.com/en-us/library/96ayss4b(VS.71).aspxNochmal einige Hilfen für dich mit Lösungen zum download der Dateien.
-
Könnte es sein dass usnere Firmenfirewall den Zugriff von wget auf die Webseiten blockiert?
--2009-03-09 15:51:11-- (try: 8) http://www.heise.de/ Connecting to www.heise.de|193.99.144.85|:80... failed: Connection timed out. Retrying.
-
Die WinAPI hat auch
URLDownloadToFile
.
-
Paddre schrieb:
Weil ich es mir abgesehen von dem wget als Übung für C++ gedacht habe
Für sowas C++ zu verwenden ist aber keine allzu gute Idee, mach lieber was anderes als Übung und schreib das Downloadskript mit einem Batchscript oder in Python oä.
Is ja klasse...hab ich nur nichts von, da der Comic der veröffentlicht wird in einem bestimmten Ordner liegt, der Pfad im Quelltext festgelegt ist und die Datei mit bestimmten Wörtern benannt ist (je nach Inhalt des Comics)
Wie gesagt: Ich würde ohnehin über den RSS-Feed gehen, das ist besser zu parsen.
Was bringt mir das ganze wenn ich Windows User bin?
Auch unter Windows kann man ganz brauchbar scripten, schlimmstenfalls eben mit Python.
Die Bilder liegen in den ordnern der jeweiligen Zeichner...ich muss also lediglich an den Quelltext der aktuellen Seite rankommen und kann daraus den Speicherort des Comics parsen.
Ganz so einfach wird das idR nicht sein. Insbesondere wenn sich das Format mal ein wenig ändert oä.
Bleibt die Frage wie ich an den Quelltext rankomm (wo wir wieder am anfang wären
)
Wenn Du unbedingt C++ verwenden möchtest am elegantesten auf eine der folgenden Methoden:
- Ein Programm schreiben, das den Quelltext direkt von der Standardeingabe einliest und das dann ungefähr so aufrufen: "curl http://example.org/foo/bar/baz.html | deinprogramm" oä.
- libcurl verwenden. Mit wget und system oder popen herumpfuschen ist nicht wirklich sauber. Eigene Libraries wie libcurl oä schon.
-
Paddre schrieb:
Könnte es sein dass usnere Firmenfirewall den Zugriff von wget auf die Webseiten blockiert?
Vmtl. verwendet Ihr irgendeinen Proxy. Kann wget auch, siehe man: wget.
-
Paddre schrieb:
Weil ich es mir abgesehen von dem wget als Übung für C++ gedacht habe
Sockets in C++ sind nicht unbedingt die einfachste Übung.
Du müsstest erstmal das HTTP-Protokoll lernen (http://www.w3.org/Protocols/rfc2616/rfc2616.html), den Header korrekt parsen (Transfer-Encoding, Content-Length, Content-Type, etc.) und danach die Daten entsprechend behandeln, usw. usf.
Vorausgesetzt du möchtest die basic-socket-Funktionen wie socket(), connect(),...
(die ich persönlich bevorzuge) benutzen, wird es wohl länger als ein paar Stunden und auch länger als 5 Tage dauern.
-
Habe mir eben n bisschen die FUnktion URLDownloadToFile angesehn und die macht im Prinzip ja genau das was ich zunächst einmal will (nein ich gebe nicht auf
)
Mein Problem ist, dass ich die Parameter nicht vernünftig gefüllt bekomme:
#include "stdafx.h" #include <windows.h> #include <urlmon.h> #include <stdio.h> #include <iostream> #pragma comment(lib, "urlmon.lib") int main() { std::string url = "http://www.heise.de/index.html"; std::string filename = "D:\\test.txt"; URLDownloadToFile(NULL, (LPCWSTR) url.c_str(), (LPCWSTR) filename.c_str(), NULL, NULL); LPCWSTR fnt = (LPCWSTR) filename.c_str(); LPCWSTR urlt = (LPCWSTR) url.c_str(); return 0; }
Im Debug sieht man dass in fnt und urlt nur shit drinsteht (vieleviele weiße Quadrate
) .
Hätt ich mir schon denken können aber wie löse ich das problem? Ich habe im Internet noch nicht ein funktionierendes Beispiel gefunden. habt ihr damit schonmal gearbeitet?
Mein nächster Schritt (wenn das hier nicht funzt) wäre dann auf libcurl umzusteigen und mir das mal anzusehn. Sonst hätte ich noch QHttp (eine Qt-Klasse) als Alternative.
EDIT: Habs gelöst...
URLDownloadToFile(NULL, L"http://www.heise.de/index.html", L"D:\\test.txt", NULL, NULL);
Ist die richtige Zeile
-
-
TGGC schrieb:
RTFM: char, wchar, string, wstring! f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
Da ich das ganze schon gelöst hab hättest du dir den sinnlosen Beitrag sparen können
-
Paddre schrieb:
TGGC schrieb:
RTFM: char, wchar, string, wstring! f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
Da ich das ganze schon gelöst hab hättest du dir den sinnlosen Beitrag sparen können
Das ist TGGC, einfach ignorieren. Er ist daran gewöhnt, dass er immer mal wieder ignoriert wird und das ab und zu mal ein riesiges Geschrei um ihn gemacht wird.
Er ist ein seltsames und teilweise sinnvolles Gespenst in diesem Forum
Grüssli
-
Dann bleib halt unwissend und werde gluecklich mit deinem c&p-Code. f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
-
f'`8k