Advertisement
Underworld1337

Untitled

Nov 4th, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.15 KB | None | 0 0
  1. <?php
  2. class Parser
  3. {
  4.    /**
  5.     * String mit dem Inhalt der Webseite
  6.     */
  7.    private $filestring = '';
  8.  
  9.    /**
  10.     * URL des Hosts
  11.     */
  12.    private $host = '';
  13.  
  14.    /**
  15.     * Verfeinerung des Hosts
  16.     * z.B 'forumdisplay.php?f=9'
  17.     */
  18.    private $subdetails = '';
  19.  
  20.    /**
  21.     * Seitenanzahl des Forumteils
  22.     */
  23.    private $seitenanzahl = 1;
  24.  
  25.    /**
  26.     * Seitennummer, auf der der Parser sich
  27.     * gerade befindet
  28.     */
  29.    private $aktuelle_seite = 1;
  30.  
  31.    /**
  32.     * Die Linkliste besitzt alle vorgekommenen
  33.     * Threadtitel
  34.     */
  35.    private $linkliste = array();
  36.  
  37.    /**
  38.     * Liste zum speichern aller Threads und
  39.     * deren Authoren
  40.     */
  41.    private $link = array("Link" => array(),
  42.                            "Author" => array());
  43.  
  44.    /**
  45.     * Soll die Suche über alle vorhandenen
  46.     * Seiten ausgedehnt werden
  47.     */
  48.    private $pages = true;
  49.  
  50.    /**
  51.     * Konstruktor der Klasse
  52.     * Die fremde Webseite wird beim inistanzieren der Klasse
  53.     * geparst, aber noch nicht ausgegeben
  54.     *
  55.     * Hier werden die benoetigten Klassenvariablen belegt
  56.     * und einige Methoden aufgerufen
  57.     *
  58.     * @param - $host - String - URL des Hosts
  59.     * @param - $subdetails - String - Direkte URL-Anweisungen
  60.     * @param - $start_tag - String - Starttag für Seitenanzahl
  61.     * @param - $suchstring - String - Suchstring für Seitenanzahl
  62.     * @param - $end_tag - String - Endtag für Seitenanzahl
  63.     * @param - $link_ident - String - Identifikation der wichtigen Links
  64.     * @param - $start_tag_author - String - Starttag zur Authoridentifikation
  65.     * @param - (boolean) Ob alle Seiten durchsucht werden sollen (optional)
  66.     */
  67.    public function __construct($host, $subdetails, $start_tag, $suchstring, $end_tag, $link_ident, $start_tag_author, $pages = false)
  68.    {
  69.        $this->host = $host;
  70.        $this->subdetails = $subdetails;
  71.        $this->pages = $pages;
  72.        $this->start_tag_author = $start_tag_author;
  73.        $this->loadWebsite();
  74.        $this->getSeitenanzahl($start_tag, $suchstring, $end_tag);
  75.        $this->parse($link_ident);
  76.    }
  77.  
  78.    /**
  79.     * Die fremde Webseite wird geladen und als String der
  80.     * Klassenvariable $filestring zugewiesen
  81.     */
  82.    private function loadWebsite()
  83.    {
  84.        if($this->pages)
  85.        {
  86.            $str_page = '&amp;page='.$this->aktuelle_seite;
  87.        }
  88.        else
  89.        {
  90.            $str_page = '';
  91.        }
  92.        $this->filestring = file_get_contents($this->host.$this->subdetails.$str_page);
  93.    }
  94.  
  95.    /**
  96.     * Die Seitenzahl wird anhand eines frei definierbaren Start- und Endtags
  97.     * sowie eines Suchstrings, der vor der Seitenzahl enden muss, rausgefiltert
  98.     */
  99.    private function getSeitenanzahl($start_tag, $suchstring, $end_tag)
  100.    {
  101.        $pos = strpos($this->filestring, $start_tag, 1);
  102.        $string = substr($this->filestring, $pos, 1028);
  103.        $seitenende = strpos($string, $end_tag, 0);
  104.        $startpos = strpos($string, $suchstring, 0) + strlen($suchstring);
  105.        $endpos = $seitenende - $startpos;
  106.        $this->seitenanzahl = substr($string, $startpos, $endpos);
  107.    }
  108.  
  109.    /**
  110.     * Hier wird der übergebene String zu einem Link zusammengesetzt.
  111.     * Durch das hinzufügen des Hosts wird aus jedem relativen Pfad,
  112.     * ein absoluter und die Links führen sofort zum richtigen Ziel
  113.     */
  114.    private function setLink($string)
  115.    {
  116.        $link = substr($string, 0, 9);
  117.        $link .= $this->host;
  118.        $link .= substr($string, 9, strlen($string));
  119.        $link .= "</a>";
  120.        return $link;
  121.    }
  122.  
  123.    /**
  124.     * Die gefundenen Links werden auf das vorhandensein einer
  125.     * $link_ident überprüft und beim vorfinden in die Linklisten
  126.     * aufgenommen
  127.     */
  128.    private function getLinkdetails($string, $link_ident, $pos)
  129.    {
  130.        if(stristr($string, $link_ident)) {
  131.            $gefunden = true;
  132.            $linktext = substr($string, strpos($string, '">') + 2, strlen($string) - (strpos($string, '">') - 2));
  133.            foreach($this->linkliste as $value)
  134.            {
  135.                if($value == $linktext)
  136.                {
  137.                    $gefunden = false;
  138.                }
  139.            }
  140.            if($gefunden)
  141.            {
  142.                $this->linkliste[] = $linktext;
  143.                $this->link["Link"][] = $this->setLink($string);
  144.                $this->link["Author"][] = $this->getAuthor($pos);
  145.            }
  146.        }
  147.    }
  148.  
  149.    /**
  150.     * Die eigentliche Funktion, welche den Filestring nach Links durchsucht
  151.     * und bei Treffern dann getLinkdetails() aufruft.
  152.     * Die komplette Webseite samt Unterseiten wird durchsucht
  153.     */
  154.    private function parse($link_ident)
  155.    {
  156.        while($this->aktuelle_seite <= $this->seitenanzahl) {
  157.            $this->loadWebsite($this->pages);
  158.            $startpos = 0;
  159.            while($pos = strpos($this->filestring, "<a href", $startpos))
  160.            {
  161.                $string = substr($this->filestring, $pos, strpos($this->filestring, "</a>", $pos + 1) - $pos);
  162.                $this->getLinkdetails($string, $link_ident, $pos);
  163.                $startpos = $pos + 1;
  164.            }
  165.            $this->aktuelle_seite++;
  166.        }
  167.    }
  168.  
  169.    /**
  170.     * Dient der veranschaulichten Darstellung der gesammelten Links und der Authoren
  171.     */
  172.    public function showLinks()
  173.    {
  174.        $html = '';
  175.        for($i = 0; $i < sizeof($this->link['Link']); $i++)
  176.        {
  177.            $html .= $this->link['Link'][$i]." | Author: ".$this->link['Author'][$i]."<br/>\n";
  178.        }
  179.        return $html;
  180.    }
  181.  
  182.    /**
  183.     * Die Authoren der ermittelten Links werden gesucht
  184.     */
  185.    private function getAuthor($pos)
  186.    {
  187.        $pos_member = strpos($this->filestring, $this->start_tag_author, $pos);
  188.        // Benutzernamen rausfiltern
  189.        $laenge = strpos($this->filestring, "</span>", $pos_member) - strpos($this->filestring, '>', $pos_member) - 1;
  190.        $startpos = (strpos($this->filestring, '>', $pos_member)+1);
  191.        return substr($this->filestring, $startpos, $laenge);
  192.    }
  193. }
  194. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement