ich möchte von einer Webseite in wiederkehrenden Zyklen bestimmte Informationen beziehen. Um dies zu bewerkstelligen verwende ich derzeit PHP und lade die Internetseite direkt in ein DOMDocument Object. Den DOMDocument Tree durchsuche ich dann nach einem speziellem Element welches immer den selben Namen hat, erstelle daraus ein weitere DOMDocument durch das ich mich mithilfe von DOMxpath bewegen kann um somit an alle benötigten Informationen zu kommen, solange ich den XPath angebe.
Soweit funktioniert auch alles, nur Funktionalität ist nicht alles, ich stelle mir deshalb ständig die Frage, "geht das nicht besser" ?
Für einfaches "Quelltext-Laden" könnte auch die Funktion "file_get_contents()", die auch den Aufruf von URLs unterstützt, benutzt werden. Ansonsten hätte ich ebenfalls den Einsatz regulärer Ausdrücke vorgeschlagen.
curl hat den vorteil, daß es alle protokolle (http(s), ftp(s) usw.) kann und auch eine cookie und sessionverwaltung hat, also geeignet für Seiten auf denen erst eine Anmeldung erfolgen muß. Ich nutze es ausserdem für einen crawler mit curl_multiexec um mehrere Siten gleichzeitig zu bearbeiten. Das biete file_get_contents() leider nicht. Aber bei "einfachen" Seiten ist file_get_contents sicher die richtige Wahl.
Naja Content-Klau ist immer mit relativ viel Aufwand verbunden, da man sich nie sicher sein kann, ob der Eigentümer die Struktur beibehält. Außerdem ist es nicht die feine Art.
Evtl. kommst du ja besser, wenn du den Eigentümer einfach mal anschreibst und fragst ob er ein Webservice bereitstellen kann ?
Ansonsten geht es nicht anders als das Dokument herunterzuladen und dann zu parsen. Das parsen kann man nun auf unterschiedliche Weise tun. Entweder man hangelt sich an der HTML Struktur entlang oder man holt sich den Inhalt mit einer Regex anhand von Ankerpunkten.
Ich habe bereits die Erlaubnis, muss aber mit der von dir oben erwähnten Einschränkung leben das wenn der Besitzer die Homepage verändert ich die Struktur entsprechend auch in meinem Code abändern muss.
Die Idee mit dem WebService habe ich aber noch nicht gehabt, evtl. kann ich Ihn ja dazu bewegen sich einen von mir Programmieren zu lassen. Ich hätte dann mein benötigtes DataSet und er wiederum ein weiteres Feature.
@Geniali: Ein Beispiel: Du schließt als Firma X einen Vertrag mit einer Firma Y ab. Diese soll dir zum Beispiel Börsen-Informationen für dein System bereitstellen. Nun ist die Firma Y aber nicht in der Lage (magels kopetenten Mitarbeiten, technischer Schwirigkeiten, etc) die Informationen direkt in einem maschinenlesbaren Format darzubieten. Ergo baust du dir einen Parser der die Informationen in eine maschinenlesbares Format zur weiteren Verarbeitung überführt. Da du einen Vertrag hast ist es erlaubt un KEIN Content-Klau! (Btw. das ist ein Beispiel aus der Praxis)
DOMDocument setzt vor allem voraus, dass das, was du da lädst, ein valides XML-Dokument ist, was du ja prinzipbedingt nicht garantieren kannst. Daher würd ich es eher mit paar cleveren RegEx' versuchen.