DiDOM – HTML Parser | Kussin

DiDOM – HTML Parser


12.10.2016 | Benjamin Bortels | DiDOM

DiDOM ist eine serverseitige, chainable, CSS Selektor basierte Document Object Model (DOM) API inspiriert von jQuery’s JavaScript Library. Daher sind fundierte Kenntnisse in dieser Library vorauszusetzen.

Installation

Navigiere zu folgender URL:
https://github.com/Imangazaliev/DiDOM

Für die Installation wird der PHP Dependency Manager „Composer“ benötigt. Diesen erhältst du unter https://getcomposer.org/

Zum Inkludieren in dein Projekt, installiere das Paket nach Composer Konventionen:
Navigiere mit deiner Konsole zum Projekt Order und gib den Befehl „composer require imangazaliev/didom“ ein. Das Paket installiert sich wie gewohnt in den „vendor“ Ordner. Im PHP Dokument requirest du die „autoload.php“ aus dem „vendor“ Ordner.

Mehr muss nicht getan werden, da die eben inkludierte Datei sich um alles kümmert.

Beispiele

Alle „DiDOM“ Methoden sind Instanz Abhängig, d.h. eine neue Instanz muss immer als Erstes erstellt werden.

Mit „use DiDom\Document;“ erhalten wir Zugriff auf die „Document“ Klasse. Erstellen wir also eine neue Instanz dieser Klasse. Wir haben die Möglichkeit, über den Konstruktor einen String mit HTML, einen Pfad zu einer HTML-Datei oder eine komplette URL zu übermitteln. Sollte ein Pfad oder eine URL geben werden, brauchen wir als zweiten Parameter „true“, damit die entsprechende Datei geladen wird.

„$document = new Document(‚http://www.example.com/‘, true);“

Um das komplette Dokument auszugeben geben wir „echo $document->format()->html();“ ein. Nun sei dazugesagt, dass bestimmte Resourcen nicht geladen werden können. Nämlich genau die, die relativ zum Ursprungsserver verlinkt sind. Wurde z.b. eine CSS Datei mit dem Pfad „/css/main.css“ verlinkt, führt der Browser einen Request gegen den eigenen Server auf der Suche nach dieser Datei z.b. „http://www.example.com/css/main.css“. Logischerweise wird er hier mit 404 abgefrühstückt und es kann zu Fehlern auf der Seite kommen.
find()
Die wichtigste „DiDOM“ Funktion ist „find()“. Diese ist das Eqivalent zu jQuery’s „$()“. Wir nutzen diese Funktion, um einen Query auf ein Dokument auszuführen. Suchen wir also beispielsweise eine bestimmte DIV Box mit der ID „foo“, so lautet die find Funkion: „$element = $document->find(‚#foo‘);“

Dieser Befehl gibt uns immer ein Array aus DiDom\Element Objekten zurück. Zum Ausgeben in HTML Code benutzen wir die Funktion html(). Da wir davon ausgehen können, da es ein DOM Element mit einer ID nur einmal in diesem Dokument geben wird, können wir getrost „echo $element[0]->html();“ verwenden. Sollten wir eine Klasse selektiert haben, können wir die 0 mit der jeweiligen Zahl ersetzen, die der Ordnungsnummer im DOM entspricht. Um herauszufinden wie viele Elemente wir zurückbekommen können wir z.b. „count()“ verwenden.

Der „find()“ Syntax ist komplett chainable. Bedeutet wir können mehrere find() Aufrufe in einen Query pressen: „$element = $document->find(‚#foo‘)->find(‚a‘);“. Dieser Befehl wird alle „Anchor“ Tags im Element „#foo“ finden.

Eine detailiertere Auflistung aller Selektoren findest du unter https://github.com/Imangazaliev/DiDOM im Bereich „Supported selectors“.

Eine starke Inspiration an jQuery merkt man an den zahlreichen Funktionen eines Element-Objekt. Da wäre z.b. „parent()“, „children()“, „firstChild()“, „lastChild()“, „attr()“, „hasAttribute()“, „is()“, „appendChild()“, „replace()“, „remove()“, „previousSibling()“, „nextSibling()“, „html()“, „innerHtml()“. Ich denke, man erkennt hier ganz klar Parallelen.

Risiken und Nebenwirkungen

Dem aufmerksamen Leser mögen etwaige Sicherheitsbedenken aufgefallen sein. Diese sind auch völlig berechtigt. Man stelle sich mal vor, es gäbe Menschen, die eine Website zum bösen Zweck kopieren und modifieren wollen z.b. eine Seite, wo vertrauliche Felder ausgetauscht werden. Sogennante Pfishing Attaken sind nicht unüblich und hier ist äußerste Vorsicht geboten. Sei stets wachsam, auf welchen Seiten du vertrauliche Informationen hinterlässt. Um sicher zu sein, dass die subjektive Wahrnehmung auch der tätlichen Seite entspricht, achte auf die URL und das Vorhandensein eines SSL Zertifikats. Sollte dir hier nichts ungewöhnliches auffallen, brauchst du dir keine Sorgen zu machen.

Fazit

Für besondere Aufgaben auf Serverebene ist „DiDOM“ wie geschaffen. Es ist einfach zu installieren und zu bedienen. Darüber hinaus ist es auch noch eine Open Source Library die von jedem unter der MIT Lizenz verbessert werden kann. Sie ist sehr aktuell, höchst performant und funktioniert auch mit PHP 7 problemlos.