Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Parser
- {
- /**
- * String mit dem Inhalt der Webseite
- */
- private $filestring = '';
- /**
- * URL des Hosts
- */
- private $host = '';
- /**
- * Verfeinerung des Hosts
- * z.B 'forumdisplay.php?f=9'
- */
- private $subdetails = '';
- /**
- * Seitenanzahl des Forumteils
- */
- private $seitenanzahl = 1;
- /**
- * Seitennummer, auf der der Parser sich
- * gerade befindet
- */
- private $aktuelle_seite = 1;
- /**
- * Die Linkliste besitzt alle vorgekommenen
- * Threadtitel
- */
- private $linkliste = array();
- /**
- * Liste zum speichern aller Threads und
- * deren Authoren
- */
- private $link = array("Link" => array(),
- "Author" => array());
- /**
- * Soll die Suche über alle vorhandenen
- * Seiten ausgedehnt werden
- */
- private $pages = true;
- /**
- * Konstruktor der Klasse
- * Die fremde Webseite wird beim inistanzieren der Klasse
- * geparst, aber noch nicht ausgegeben
- *
- * Hier werden die benoetigten Klassenvariablen belegt
- * und einige Methoden aufgerufen
- *
- * @param - $host - String - URL des Hosts
- * @param - $subdetails - String - Direkte URL-Anweisungen
- * @param - $start_tag - String - Starttag für Seitenanzahl
- * @param - $suchstring - String - Suchstring für Seitenanzahl
- * @param - $end_tag - String - Endtag für Seitenanzahl
- * @param - $link_ident - String - Identifikation der wichtigen Links
- * @param - $start_tag_author - String - Starttag zur Authoridentifikation
- * @param - (boolean) Ob alle Seiten durchsucht werden sollen (optional)
- */
- public function __construct($host, $subdetails, $start_tag, $suchstring, $end_tag, $link_ident, $start_tag_author, $pages = false)
- {
- $this->host = $host;
- $this->subdetails = $subdetails;
- $this->pages = $pages;
- $this->start_tag_author = $start_tag_author;
- $this->loadWebsite();
- $this->getSeitenanzahl($start_tag, $suchstring, $end_tag);
- $this->parse($link_ident);
- }
- /**
- * Die fremde Webseite wird geladen und als String der
- * Klassenvariable $filestring zugewiesen
- */
- private function loadWebsite()
- {
- if($this->pages)
- {
- $str_page = '&page='.$this->aktuelle_seite;
- }
- else
- {
- $str_page = '';
- }
- $this->filestring = file_get_contents($this->host.$this->subdetails.$str_page);
- }
- /**
- * Die Seitenzahl wird anhand eines frei definierbaren Start- und Endtags
- * sowie eines Suchstrings, der vor der Seitenzahl enden muss, rausgefiltert
- */
- private function getSeitenanzahl($start_tag, $suchstring, $end_tag)
- {
- $pos = strpos($this->filestring, $start_tag, 1);
- $string = substr($this->filestring, $pos, 1028);
- $seitenende = strpos($string, $end_tag, 0);
- $startpos = strpos($string, $suchstring, 0) + strlen($suchstring);
- $endpos = $seitenende - $startpos;
- $this->seitenanzahl = substr($string, $startpos, $endpos);
- }
- /**
- * Hier wird der übergebene String zu einem Link zusammengesetzt.
- * Durch das hinzufügen des Hosts wird aus jedem relativen Pfad,
- * ein absoluter und die Links führen sofort zum richtigen Ziel
- */
- private function setLink($string)
- {
- $link = substr($string, 0, 9);
- $link .= $this->host;
- $link .= substr($string, 9, strlen($string));
- $link .= "</a>";
- return $link;
- }
- /**
- * Die gefundenen Links werden auf das vorhandensein einer
- * $link_ident überprüft und beim vorfinden in die Linklisten
- * aufgenommen
- */
- private function getLinkdetails($string, $link_ident, $pos)
- {
- if(stristr($string, $link_ident)) {
- $gefunden = true;
- $linktext = substr($string, strpos($string, '">') + 2, strlen($string) - (strpos($string, '">') - 2));
- foreach($this->linkliste as $value)
- {
- if($value == $linktext)
- {
- $gefunden = false;
- }
- }
- if($gefunden)
- {
- $this->linkliste[] = $linktext;
- $this->link["Link"][] = $this->setLink($string);
- $this->link["Author"][] = $this->getAuthor($pos);
- }
- }
- }
- /**
- * Die eigentliche Funktion, welche den Filestring nach Links durchsucht
- * und bei Treffern dann getLinkdetails() aufruft.
- * Die komplette Webseite samt Unterseiten wird durchsucht
- */
- private function parse($link_ident)
- {
- while($this->aktuelle_seite <= $this->seitenanzahl) {
- $this->loadWebsite($this->pages);
- $startpos = 0;
- while($pos = strpos($this->filestring, "<a href", $startpos))
- {
- $string = substr($this->filestring, $pos, strpos($this->filestring, "</a>", $pos + 1) - $pos);
- $this->getLinkdetails($string, $link_ident, $pos);
- $startpos = $pos + 1;
- }
- $this->aktuelle_seite++;
- }
- }
- /**
- * Dient der veranschaulichten Darstellung der gesammelten Links und der Authoren
- */
- public function showLinks()
- {
- $html = '';
- for($i = 0; $i < sizeof($this->link['Link']); $i++)
- {
- $html .= $this->link['Link'][$i]." | Author: ".$this->link['Author'][$i]."<br/>\n";
- }
- return $html;
- }
- /**
- * Die Authoren der ermittelten Links werden gesucht
- */
- private function getAuthor($pos)
- {
- $pos_member = strpos($this->filestring, $this->start_tag_author, $pos);
- // Benutzernamen rausfiltern
- $laenge = strpos($this->filestring, "</span>", $pos_member) - strpos($this->filestring, '>', $pos_member) - 1;
- $startpos = (strpos($this->filestring, '>', $pos_member)+1);
- return substr($this->filestring, $startpos, $laenge);
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement