cURL, DOM und XPath effektiv mit PHP nutzen

Habt ihr Euch schon mal mit Partner-Angeboten im Web auseinandergesetzt? Dann wisst ihr sicherlich auch, dass die kleinen Anbieter lediglich mit iframe-Lösungen aufwarten oder nur minimal APIs anbieten. Ich arbeite momentan an einem eigenen Projekt, welches auf dem IAK Partnerprogramm basiert. Leider beschränkt sich dieses Partnerprogramm lediglich auf die gerade genannte iframe-Lösung, die in meinen Augen nicht gerade ein Design-Highlight ist.

Letzendlich leben wir aber im Zeitalter des Web 2.0 und somit gibt es auch für dieses Problem eine eigentlich recht simple Lösung. Vereinfacht ausgedrückt holen wir uns einfach den Inhalt des iframes, ermitteln in diesem ermittelten Inhalt Komponenten, die für das eigene Projekt benötigt werden und bilden diese dann im eigenen Projekt ab. Am Ende habe ich somit meine individuell gestalltete Applikation, mit der ich das Partnerprogramm trotz fehlender API nutzen kann.

PHP bietet für derartige Vorhaben die entsprechenden Werkzeuge: die cURL Library und das Document Object Model.

Hier nun ein kleines Praxisbeispiel, wie man diese beiden Libraries anwendet.

// curl handle erzeugen
$curl = curl_init('https://www.vergleichen-und-sparen.de/hundehaftpflicht-vergleichsrechner.php');

// curl optionen setzen
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FILETIME, true);

// Quellcode der aufgerufenen Website speichern 		
$content = curl_exec($curl);
curl_close($curl);

// Quellcode als DomDocument
$dom = new DomDocument();
$dom->loadHTML($content);

// XPath zum ermitteln der benötigten DOM Elemente
$xpath = new DOMXPath($dom);
$elements = $xpath->query('//*[starts-with(@id, "element")]');

// irgendwas mit den ermittelten elementen machen
foreach ($elements as $element) {
    ...
}

In diesem kurzen Beispiel wird das erste Eingabeformular des Vergleichsrechners zur Hundehaftpflichtversicherung der iak GmbH geladen. Den ermittelten HTML Quellcode lesen wir dann mit dem DomDocument Objekt ein und suchen im DOM Element-Baum dann mittels XPath nach allen Elementen, die ein ID Attribut besitzen, welches mit „element“ beginnt. Hierfür nutzen wir die XPath String Funktion starts-with().

Mit den cURL Funktionen kann ich das ermittelte Eingabeformular dann auch wieder absenden und die darauf folgende Antwort des entfernten Servers parsen und somit den kompletten Vergleichsrechner nachbilden.

Interesse an einem weiteren praktischen Beispiel als Download? Hinterlasst einfach einen Kommentar …

4 Gedanken zu „cURL, DOM und XPath effektiv mit PHP nutzen“

  1. Hey Marcel. Ich versteh das mit den DomXPath’s schon lange nicht mehr…
    Besonders die Dom-lib finde ich nichtso toll^^ Ich will ja mal selbst ein PHP Plugin Schreiben, finde aber leider keine Referenz bzw. Dokumentation Dazu^^
    Ausserdem bin ich an so einem Download Interessiert 🙂

    Antworten
  2. Hi Marcel,
    jetzt hast du mich aber neugierig gemacht wie es weitergeht. Ich fange gerade erst an mich mit curl zu beschäftigen und suche daher immer nach fertigen Lösungen aus denen man ersehen und kapieren kann wie es funktioniert. Ich bin auf jedenfall an deinem Downloadbeispiel interessiert.

    Antworten
    • Hallo Klaus,

      da ich momentan zeitlich sehr eingeschränkt bin, wird es noch ein paar Tage dauern, bis ich einen Blogbeitrag mit einem praktischen Beispiel liefern werde. Aber er wird kommen. 😉

      Irgend ein Vorschlag, welches Formular oder welche Seite Du als praktisches Beispiel sehen möchtest?

      Antworten
  3. Klar, kann ich dir gerne nennen. Und zwar wäre es cool z.B. die Buchungsmaschinen von lmweb.de mit curl zu integrieren. Angeboten werden diese von travelan.de oder viamondo.de aber leider gibt es da nur iframe lösungen bzw. in neuem Fenster und das ist natürlich blöd. Ich habe esauch schon probiert, komme aber leider nicht weiter. Hier ist ein Link zum Buchungsmodul:
    http://www.sysvier.de/Auto/lmweb.dll?FORM=msk2/mf_auto.htm&SF=3&XAH1=&XAH2=&XAH3=&XV=1&XS=1&TITLE=Ferienwohnungen&CFG=516&AGENT=2384

    Antworten

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.