C - Internetseite einlesen
C - Internetseite einlesen
Hey,
ich habe mal wieder eine Frage. Und zwar bin ich auf der Suche nach der Möglichkeit mit C eine Seite von einer Internetseite einzulesen. Unter Linux verwende ich libxml2 dafür, was auch super klappt (sind XML-Dateien). Unter Windows7 funktioniert der XMLReaderForFile aber nicht (oder ich habe irgendwas falsch gemacht). Zumindest liefert er immer nur NULL zurück, also klappt da irgendetwas nicht so wie ich das gerne hätte.
Daher jetzt meine Frage: Gibt es so eine Art fopen für Internetseiten auf Windows? Oder muss ich da zu Sockets greifen? Das ist ja unter Windows auch nicht gerade "schön" zu handhaben.
gruß stampuhh
ich habe mal wieder eine Frage. Und zwar bin ich auf der Suche nach der Möglichkeit mit C eine Seite von einer Internetseite einzulesen. Unter Linux verwende ich libxml2 dafür, was auch super klappt (sind XML-Dateien). Unter Windows7 funktioniert der XMLReaderForFile aber nicht (oder ich habe irgendwas falsch gemacht). Zumindest liefert er immer nur NULL zurück, also klappt da irgendetwas nicht so wie ich das gerne hätte.
Daher jetzt meine Frage: Gibt es so eine Art fopen für Internetseiten auf Windows? Oder muss ich da zu Sockets greifen? Das ist ja unter Windows auch nicht gerade "schön" zu handhaben.
gruß stampuhh
NachDenkSeiten.de
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C - Internetseite einlesen
Mir ist derartiges nicht bekannt - ich habe das mal unter Linux mit Sockets gemacht. Unter Windows würde ich es vermutlich erstmal genauso machen.
Das Thema ist Windowsspezifisch, ich habe es daher verschoben.
Das Thema ist Windowsspezifisch, ich habe es daher verschoben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C - Internetseite einlesen
Ok dann muss ich mich wieder mit Sockets beschäftigen 
Da werde ich dann bestimmt hier auch noch mal was nachfragen, sei denn ich kriege diese libxml2 Geschichte da noch hin
gruß stampuhh

Da werde ich dann bestimmt hier auch noch mal was nachfragen, sei denn ich kriege diese libxml2 Geschichte da noch hin

gruß stampuhh
NachDenkSeiten.de
Re: C - Internetseite einlesen
Was genau willst du? Den Quellcode der Seite oder die Seite einfach grafisch anzeigen? Qt (mit C++) bietet für beides Lösungen, wobei grafisches anzeigen um einiges leichter ist als den Quellcode anzuzeigen. Es gibt auch einige XML-Klassen, davon hab ich aber ehrlich gesagt keine Ahnung.
Hab schnell was gebastelt:
Quellcode auslesen:
main.cpp
PageReader.h
(der Einfachheit halber mache ich den NetworkAccessManager public, was man aber natürlich nicht tun sollte)
PageReader.cpp
Ergebnis:
http://img63.imageshack.us/i/codeviewer.png/
Webseite grafisch anzeigen:
main.cpp
Ergebnis:
http://img35.imageshack.us/i/webpageviewer.png/
Wenn dich das interessiert, kann ich dir den Code gerne genauer erklären, der soll nämlich eher als Demonstration dienen wie sowas in Qt aussehen würde. Wenn du noch immer Sockets willst, kannst du die von Qt übrigens auch nehmen ^^
PS: Nein ich bin kein Angestellter von Nokia, der hier dauernd Werbung für Qt macht
Hab schnell was gebastelt:
Quellcode auslesen:
main.cpp
Code: Alles auswählen
#include <QApplication>
#include <QTextEdit>
#include "PageReader.h"
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
PageReader pr;
QTextEdit textedit;
QObject::connect (&pr, SIGNAL (ShowCode (QString)), &textedit, SLOT (setPlainText (QString)));
pr.manager -> get (QNetworkRequest (QUrl ("http://tutorial.proggen.org/doku.php")));
textedit.setWindowTitle ("Source viewer");
textedit.show ();
return app.exec ();
}
(der Einfachheit halber mache ich den NetworkAccessManager public, was man aber natürlich nicht tun sollte)
Code: Alles auswählen
#ifndef PAGEREADER_H
#define PAGEREADER_H
#include <QHttp>
#include <QString>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class PageReader : public QHttp
{
Q_OBJECT
public:
PageReader ();
~PageReader ();
QNetworkAccessManager *manager;
private slots:
void WriteCode (QNetworkReply *);
signals:
void ShowCode (QString);
};
#endif // PAGEREADER_H
Code: Alles auswählen
#include "PageReader.h"
PageReader::PageReader()
{
manager = new QNetworkAccessManager (this);
connect (manager, SIGNAL (finished (QNetworkReply *)), this, SLOT (WriteCode (QNetworkReply *)));
}
PageReader::~PageReader()
{
delete manager;
}
void PageReader::WriteCode (QNetworkReply *reply)
{
QByteArray data = reply -> readAll ();
emit ShowCode (QString (data));
}
http://img63.imageshack.us/i/codeviewer.png/
Webseite grafisch anzeigen:
main.cpp
Code: Alles auswählen
#include <QApplication>
#include <QWebView>
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QWebView wv;
wv.load (QUrl ("http://tutorial.proggen.org/doku.php"));
wv.show ();
return app.exec ();
}
http://img35.imageshack.us/i/webpageviewer.png/
Wenn dich das interessiert, kann ich dir den Code gerne genauer erklären, der soll nämlich eher als Demonstration dienen wie sowas in Qt aussehen würde. Wenn du noch immer Sockets willst, kannst du die von Qt übrigens auch nehmen ^^
PS: Nein ich bin kein Angestellter von Nokia, der hier dauernd Werbung für Qt macht

Re: C - Internetseite einlesen
Danke erst mal dafür!
Aber um etwas mit deinem Code anfangen zu können muss ich erst mal mit C++ weiter machen
Ich bin nämlich noch bei C und den Anfängen von C++ (cout/cin). Aber um deine Fragen zu beantworten:

Es geht mir darum Seiten, genauer gesagt wirklich XML-Dateien, einzulesen und zu verarbeiten, bzw eigentlich will ich nur einen einzigen Wert auslesen. Das ganze habe ich unter Linux schon mit libxml2 geschafft. Eigentlich gibt es das ganze auch für Windows nur es läuft bei mir nicht. Daher wollte ich nach einer Alternative suchen. Aber die libxml2 ist ja auch nicht gerade "wenig" und da kann ich auch noch etwas rum probieren. Mein Problem ist eigentlich nur diese Zeile
Aber ich glaube auf den Qt-Code komme ich zurück, da ich das auf jeden Fall auch noch grafisch umsetzen wollte. Ist als Übung auf jeden Fall sehr gut für mich. Aber bis dahin ist es glaube ich noch ein steiniger Weg
Und dein Messanger gefällt mir grafisch auch ganz gut, daher kann ich die Werbung für QT auch verstehen
gruß stampuhh
Aber um etwas mit deinem Code anfangen zu können muss ich erst mal mit C++ weiter machen

Ich bin nämlich noch bei C und den Anfängen von C++ (cout/cin). Aber um deine Fragen zu beantworten:
Ich will weder den Code noch die Seite grafisch anzeigen lassen, da ich ja immer noch auf der Konsole arbeiteWas genau willst du? Den Quellcode der Seite oder die Seite einfach grafisch anzeigen? Qt (mit C++) bietet für beides Lösungen, wobei grafisches anzeigen um einiges leichter ist als den Quellcode anzuzeigen. Es gibt auch einige XML-Klassen, davon hab ich aber ehrlich gesagt keine Ahnung.

Es geht mir darum Seiten, genauer gesagt wirklich XML-Dateien, einzulesen und zu verarbeiten, bzw eigentlich will ich nur einen einzigen Wert auslesen. Das ganze habe ich unter Linux schon mit libxml2 geschafft. Eigentlich gibt es das ganze auch für Windows nur es läuft bei mir nicht. Daher wollte ich nach einer Alternative suchen. Aber die libxml2 ist ja auch nicht gerade "wenig" und da kann ich auch noch etwas rum probieren. Mein Problem ist eigentlich nur diese Zeile
Code: Alles auswählen
url="http://www.dieseite.de/abfrage.aspx?name=Horst";
xmlTextReaderPtr reader;
reader = xmlReaderForFile(urlname, NULL, 0);
if(reader != NULL) //usw. Hier geht es nie rein, da der reader unter Windows == NULL ist

Und dein Messanger gefällt mir grafisch auch ganz gut, daher kann ich die Werbung für QT auch verstehen

gruß stampuhh
NachDenkSeiten.de
Re: C - Internetseite einlesen
Wie gesagt hat Qt auch ein paar XML-Klassen. Du kannst ja mal durch die Doku browsen und gucken ob da was für dich dabei ist. Von XML hast du nämlich bestimmt mehr Ahnung als ich ^^stampuhh hat geschrieben:Ich bin nämlich noch bei C und den Anfängen von C++ (cout/cin). Aber um deine Fragen zu beantworten:
Ich will weder den Code noch die Seite grafisch anzeigen lassen, da ich ja immer noch auf der Konsole arbeiteWas genau willst du? Den Quellcode der Seite oder die Seite einfach grafisch anzeigen? Qt (mit C++) bietet für beides Lösungen, wobei grafisches anzeigen um einiges leichter ist als den Quellcode anzuzeigen. Es gibt auch einige XML-Klassen, davon hab ich aber ehrlich gesagt keine Ahnung.
Es geht mir darum Seiten, genauer gesagt wirklich XML-Dateien, einzulesen und zu verarbeiten, bzw eigentlich will ich nur einen einzigen Wert auslesen.
http://doc.trolltech.com/4.5/xml-tools.html
Schon versucht im else eine Fehlermeldung auszugeben? Vielleicht hat libxml eine eigene Funktion dafür, ansonsten die Standardfunktion:stampuhh hat geschrieben:Mein Problem ist eigentlich nur diese ZeileCode: Alles auswählen
url="http://www.dieseite.de/abfrage.aspx?name=Horst"; xmlTextReaderPtr reader; reader = xmlReaderForFile(urlname, NULL, 0); if(reader != NULL) //usw. Hier geht es nie rein, da der reader unter Windows == NULL ist
Code: Alles auswählen
printf ("Error: %s\n", strerror (errno));
Re: C - Internetseite einlesen
Danke für den Tipp. Hab ich jetzt mal ausprobiert und da bekomme ich die Meldung "No such file or directory".
Ich habe vorhin dann mal versucht per URLDownloadToFile einfach die XML Datei herunterzuladen, aber dafür brauche ich auch wieder das Windows SDK und das ist mir zu groß gerade. Habe nur 80kb/s down übers Wochenende.
Jetzt werde ich das wohl erst mal per Libcurl machen, Datei herunterladen speichern und dann verarbeiten
Muss nur noch schauen ob ich das in den Speicher lade und dann verarbeite oder als Datei speichere und dann mit libxml wieder einlese und verarbeite^^
Da hab ich auch gerade mal eine andere Frage: Muss ich Bibliotheken alle in mein system32-Verzeichnis packen damit ich die Programme ausführen kann oder gibt es eine Möglichkeit das Ganze irgendwie einzubinden so dass ich die Sachen aus ausführen könnte ohne die dlls auf dem PC zu haben?
Gibt es dazu übrigens eine Seite im Tutorial?
gruß stampuhh
Sobald ich soweit bin schaue ich mir das ganze mal an, ich brauche ja sicherlich C++ um die Sachen zum laufen zu bekommen oder?Wie gesagt hat Qt auch ein paar XML-Klassen. Du kannst ja mal durch die Doku browsen und gucken ob da was für dich dabei ist. Von XML hast du nämlich bestimmt mehr Ahnung als ich ^^
http://doc.trolltech.com/4.5/xml-tools.html
Ich habe vorhin dann mal versucht per URLDownloadToFile einfach die XML Datei herunterzuladen, aber dafür brauche ich auch wieder das Windows SDK und das ist mir zu groß gerade. Habe nur 80kb/s down übers Wochenende.
Jetzt werde ich das wohl erst mal per Libcurl machen, Datei herunterladen speichern und dann verarbeiten

Muss nur noch schauen ob ich das in den Speicher lade und dann verarbeite oder als Datei speichere und dann mit libxml wieder einlese und verarbeite^^
Da hab ich auch gerade mal eine andere Frage: Muss ich Bibliotheken alle in mein system32-Verzeichnis packen damit ich die Programme ausführen kann oder gibt es eine Möglichkeit das Ganze irgendwie einzubinden so dass ich die Sachen aus ausführen könnte ohne die dlls auf dem PC zu haben?
Gibt es dazu übrigens eine Seite im Tutorial?

gruß stampuhh
NachDenkSeiten.de
Re: C - Internetseite einlesen
Wie lautet denn der genaue Pfad zu der Seite?stampuhh hat geschrieben:Danke für den Tipp. Hab ich jetzt mal ausprobiert und da bekomme ich die Meldung "No such file or directory".
Ja.stampuhh hat geschrieben:Sobald ich soweit bin schaue ich mir das ganze mal an, ich brauche ja sicherlich C++ um die Sachen zum laufen zu bekommen oder?
Der Benutzer muss entweder die dlls im system32-Verzeichnis oder im Verzeichnis der Anwendung haben. Weiters kannst du die Bibliotheken statisch in deine Anwendung linken. Wie das geht und ob das die Bibliothek lizenztechnisch erlaubt musst du selbst rausfinden.stampuhh hat geschrieben:Da hab ich auch gerade mal eine andere Frage: Muss ich Bibliotheken alle in mein system32-Verzeichnis packen damit ich die Programme ausführen kann oder gibt es eine Möglichkeit das Ganze irgendwie einzubinden so dass ich die Sachen aus ausführen könnte ohne die dlls auf dem PC zu haben?
Re: C - Internetseite einlesen
Der Pfad lautet "http://www.agecommunity.com/query/query ... st&md=user" als Beispiel.
Das sind Userstatistiken, falls du dich fragst was das ist. Ich bastle mir gerade ein Programm zusammen womit ich sehen kann ob Personen online sind oder nicht. Unter Linux funktioniert das wie gesagt ja auch brav...
gruß stampuhh
Das sind Userstatistiken, falls du dich fragst was das ist. Ich bastle mir gerade ein Programm zusammen womit ich sehen kann ob Personen online sind oder nicht. Unter Linux funktioniert das wie gesagt ja auch brav...
Das sollte ich mir in der Tat mal irgendwo durchlesen. Solange das ganze nur für mich ist, ist das aber ja kein Problem. Ansonsten kann man ja einen Installer anbieten, der die Bibliotheken mitverteilt schätze ich mal.Der Benutzer muss entweder die dlls im system32-Verzeichnis oder im Verzeichnis der Anwendung haben. Weiters kannst du die Bibliotheken statisch in deine Anwendung linken. Wie das geht und ob das die Bibliothek lizenztechnisch erlaubt musst du selbst rausfinden.
gruß stampuhh
NachDenkSeiten.de
Re: C - Internetseite einlesen
@ nufan
...wie kann ich die Ausgabe der Webseite in eine Variable legen, um sie z.B. später in einem Label anzuzeigen? (Anstelle des textedit-Fensters)
Ich habe mit Deinem Beispiel experimentiert, bekomme das mit der Variable aber nicht zum Laufen.
...wie kann ich die Ausgabe der Webseite in eine Variable legen, um sie z.B. später in einem Label anzuzeigen? (Anstelle des textedit-Fensters)
Ich habe mit Deinem Beispiel experimentiert, bekomme das mit der Variable aber nicht zum Laufen.