Backlink Checker - Dokumentation - Die Klasse
Nun zu unsere Klasse:
Klasse _class_backlink_checker.php
//***************************************************************************************************************** // Copyright by webinteger.net // Author: Günther Trojan / 2007 //***************************************************************************************************************** class seo_tools{ var $url; var $partner_url; var $ziel_url; var $linktext; var $array_parse_url = array(); var $user_agent = "webinteger.net/backlinkchecker"; var $array_http_status = array(); var $partner_quelltext; var $link_array = array(); var $link_array_all = array(); var $externe_links; var $interne_links; //***************************************************************************************************************** // partner_url //***************************************************************************************************************** function partner_url($partner_url){ $this->partner_url = $this->url_aufbereiten($partner_url); } //***************************************************************************************************************** // partner_url //***************************************************************************************************************** function ziel_url($ziel_url){ $this->ziel_url = $this->url_aufbereiten($ziel_url); } //***************************************************************************************************************** // linktext //***************************************************************************************************************** function linktext($linktext){ $this->linktext = trim(strtolower($linktext)); } //***************************************************************************************************************** // url_aufbereiten //***************************************************************************************************************** function url_aufbereiten($url){ $url = trim($url); if(empty($url)) return FALSE; $array_parse_url = parse_url($url); if(!isset($array_parse_url["scheme"])) $url = "http://".$url; return $url; } //***************************************************************************************************************** // check_backlink //***************************************************************************************************************** function check_backlink(){ $this->get_http_status($this->partner_url); if($this->array_http_status["Status-Code"][0] == 2){ $this->get_link($this->partner_url, $this->ziel_url, $linktext, $linktitle); }else{ return false; } } //***************************************************************************************************************** // get_http_status //***************************************************************************************************************** function get_http_status($url, $abbruch=false){ if(empty($url)) return FALSE; $this->url = $url; $this->array_parse_url = parse_url($this->url); if(!isset($this->array_parse_url["scheme"])) $this->array_parse_url["scheme"] = "http"; if(!isset($this->array_parse_url["port"])) $this->array_parse_url["port"] = 80; if(!isset($this->array_parse_url["path"])) $this->array_parse_url["path"] = "/"; $fp = fsockopen($this->array_parse_url["host"], $this->array_parse_url["port"], $errno, $errstr, 15); if(!$fp){ if($abbruch){ $this->array_http_status["Location-Status-Code"] = "Seite nicht gefunden - Zeitüberschreitung"; }else{ $this->array_http_status["Status-Line"] = "Angegebene Seite nicht gefunden"; $this->array_http_status["HTTP-Version"] = "-"; $this->array_http_status["Status-Code"] = "408"; $this->array_http_status["Reason-Phrase"] = "Zeitüberschreitung"; } return; }else{ $head = ""; fputs($fp, "GET ".$this->array_parse_url["path"]." HTTP/1.1\r\n"); fputs($fp, "Host: ".$this->array_parse_url["host"]."\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ".strlen($parameters). "\r\n"); fputs($fp, "User-Agent: ".$this->user_agent."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); $this->partner_quelltext = ""; while(!feof($fp)) $this->partner_quelltext.= fgets($fp, 1024); fclose($fp); preg_match("=^(HTTP/\d+\.\d+) (\d{3}) ([^\r\n]*)=", $this->partner_quelltext, $treffer); if($abbruch){ $this->array_http_status["Location-Status-Code"] = $treffer[2]; }else{ $this->array_http_status["Status-Line"] = $treffer[0]; $this->array_http_status["HTTP-Version"] = $treffer[1]; $this->array_http_status["Status-Code"] = $treffer[2]; $this->array_http_status["Reason-Phrase"] = $treffer[3]; $http_klassen = array("Informational", "Successful", "Redirection", "Client Error", "Server Error"); $this->array_http_status["Response-Class"] = $http_klassen[$this->array_http_status["Status-Code"][0] - 1]; preg_match_all("=^(.+): ([^\r\n]*)=m", $this->partner_quelltext, $treffer, PREG_SET_ORDER); foreach($treffer as $zeile){ $this->array_http_status[$zeile[1]] = $zeile[2]; } if($this->array_http_status["Status-Code"][0] == 3){ $this->get_http_status($this->array_http_status["Location"], true); } } } } //***************************************************************************************************************** // get_link //***************************************************************************************************************** function get_link($url, $zielurl, $linktext, $linktitle){ $domain = $this->partner_quelltext; $domain = str_replace("\r", "", $domain); $domain = str_replace("\t", "", $domain); $domain = str_replace("\n", "", $domain); $domain = preg_replace("/ +/", " ", $domain); $domain = strtolower($domain); if(preg_match('/<body(?:.*?)>(.*)<\/body>/is', $domain, $matches)) { $content_body = $matches[1]; } $pattern = "/<a(.*?)>(.*?)<\/a>/is"; $anzahl_links = preg_match_all($pattern, $content_body, $links); $this->anzahl_interne_externe_links($links); for($i=0; $i < count($links[1]); $i++){ $link_tmp = htmlspecialchars($links[1][$i]); $link_tmp = str_replace(""", "", $link_tmp); $link_tmp = str_replace("'", "", $link_tmp); if(eregi($this->ziel_url, $link_tmp)){ $array_a_attribut = array(); $parse_link = explode(" ", $link_tmp); for($x=0; $x < count($parse_link); $x++){ if(eregi("=", $parse_link[$x])){ $parse_link2 = explode("=", $parse_link[$x]); $array_key = $parse_link2[0]; $array_value = trim($parse_link2[1]); $array_komplett = array($array_key=>$array_value); $this->link_array = array_merge($this->link_array, $array_komplett); } } $array_linktext = array("linktext"=>strip_tags($links[2][$i])); $this->link_array = array_merge($this->link_array, $array_linktext); array_push($this->link_array_all, $this->link_array); } } } //***************************************************************************************************************** // anzahl_interne_externe_links //***************************************************************************************************************** function anzahl_interne_externe_links($links){ $this->externe_links = 0; $this->interne_links = 0; for($i=0; $i < count($links[1]); $i++){ $link_tmp = htmlspecialchars($links[1][$i]); $url_host = parse_url($this->partner_url); if(eregi($url_host["host"], $link_tmp)){ $this->interne_links++; }else{ if(eregi("http://", $link_tmp)){ $this->externe_links++; }else{ $this->interne_links++; } } } } }
Der einstieg in die Klasse efolgt in Zeile 63 mit der Methode 'check_backlink()'. Nch Ermittlung des HTTP Status in Zeile 65 wird nur weitergemacht, wenn der Status der Partnerseite ein 200 bzw. 2xx hat. Natürlich besteht auch die Möglichkeit bei einer 301 oder 302 Weiterleitung dessen Ziel zu Überprüfen. Die Werte stehen dann in '$this->array_http_status["Location-Status-Code"]' bzw. in '$this->array_http_status["Location"]'.


