PHP prüft und erhält Website-SEO-Informationen basierend auf der Seoreport-Klasse

墨辰丷
Freigeben: 2023-03-31 16:12:02
Original
3060 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die PHP-Implementierung der professionellen Erfassung von Website-SEO-Informationen vor. Er analysiert die Techniken der Seoreport-Klasse zum Überprüfen und Erhalten von Website-SEO-Informationen. Freunde, die sie benötigen, können darauf zurückgreifen

Das Beispiel in diesem Artikel beschreibt, wie PHP die professionelle Erfassung von Website-SEO-Informationen umsetzt. Die Details sind wie folgt:

Zu den Funktionen dieser SEO-Klasse gehören:
- Überprüfen Sie die Antwort der angegebenen Website
- Abrufen der Sprache und anderer Meta-Tag-Daten von der Homepage der Website
- Erhalten Sie den Import der Website-Links und das Traffic-Ranking von Alexa
- Erhalten Sie die eingehenden Links der Website und die Anzahl der von Google indizierten Seiten
- Erhalten Sie das Vertrauen der Website und das Ranking von WOT.
- Ermitteln Sie das Alter der Website-Domain seit der ersten Registrierung
- Ermitteln Sie die Anzahl der Twitter-Website-Seiten
- Ermitteln Sie die Anzahl der mit Facebook verlinkten Website-Seiten
- Ermitteln Sie die Google Page Speed ​​der Website ​​Bewertung
- Holen Sie sich das Google-Seitenranking der Website

<?php
/**
 *
 * SEO report for different metrics
 *
 * @category SEO
 * @author Chema <chema@garridodiaz.com>
 * @copyright (c) 2009-2012 Open Classifieds Team
 * @license GPL v3
 * Based on seo report script http://www.phpeasycode.com && PHP class SEOstats
 *
 */
class seoreport{
  /**
   *
   * check if a url is online/alive
   * @param string $url
   * @return bool
   */
  public static function is_alive($url)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, &#39;curlHeaderCallback&#39;);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_exec ($ch);
    $int_return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close ($ch);
    if ($int_return_code != 200 && $int_return_code != 302 && $int_return_code != 304)
    {
      return FALSE;
    }
    else return TRUE;
  }
  /**
   * HTTP GET request with curl.
   *
   * @param string $url String, containing the URL to curl.
   * @return string Returns string, containing the curl result.
   *
   */
  protected static function get_html($url)
  {
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch,CURLOPT_MAXREDIRS,2);
    if(strtolower(parse_url($url, PHP_URL_SCHEME)) == &#39;https&#39;)
    {
      curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,1);
      curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,1);
    }
    $str = curl_exec($ch);
    curl_close($ch);
    return ($str)?$str:FALSE;
  }
  /**
   *
   * get the domain from any URL
   * @param string $url
   */
  public static function domain_name($url)
  {
    $nowww = ereg_replace(&#39;www\.&#39;,&#39;&#39;,$url);
    $domain = parse_url($nowww);
    if(!empty($domain["host"]))
      return $domain["host"];
    else
      return $domain["path"];
  }
  /**
   *
   * get the metas from a url and the language of the site
   * @param string $url
   * @return array
   */
  public static function meta_info($url)
  {
    //doesn&#39;t work at mediatemple
    /*$html = new DOMDocument();
    if(!$html->loadHtmlFile($url))
      return FALSE;*/
    if (!$html_content = self::get_html($url))
        return FALSE;
    $html = new DOMDocument();
    $html->loadHtml($html_content);
       
    $xpath = new DOMXPath( $html );
    $url_info = array();
    $langs = $xpath->query( &#39;//html&#39; );
    foreach ($langs as $lang)
    {
      $url_info[&#39;language&#39;] = $lang->getAttribute(&#39;lang&#39;);
    }
    $metas = $xpath->query( &#39;//meta&#39; );
    foreach ($metas as $meta)
    {
      if ($meta->getAttribute(&#39;name&#39;))
      {
        $url_info[$meta->getAttribute(&#39;name&#39;)] = $meta->getAttribute(&#39;content&#39;);
      }
    }
    return $url_info;
  }
  /**
   *
   * Alexa rank
   * @param string $url
   * @return integer
   */
  public static function alexa_rank($url)
  {
    $domain   = self::domain_name($url);
    $request   = "http://data.alexa.com/data?cli=10&dat=s&url=" . $domain;
    $data     = self::get_html($request);
    preg_match(&#39;/<POPULARITY URL="(.*?)" TEXT="([\d]+)"\/>/si&#39;, $data, $p);
    return ($l[2]) ? $l[2] : NULL;
  }
  /**
   *
   * Alexa inbounds link
   * @param string $url
   * @return integer
   */
  public static function alexa_links($url)
  {
    $domain   = self::domain_name($url);
    $request   = "http://data.alexa.com/data?cli=10&dat=s&url=" . $domain;
    $data     = self::get_html($request);
    preg_match(&#39;/<LINKSIN NUM="([\d]+)"\/>/si&#39;, $data, $l);
    return ($l[1]) ? $l[1] : NULL;
  }
  /**
   * Returns total amount of results for any Google search,
   * requesting the deprecated Websearch API.
   *
   * @param    string    $query   String, containing the search query.
   * @return    integer          Returns a total count.
   */
  public static function google_pages($url)
  {
    //$query = self::domain_name($url);
    $url = &#39;http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=1&q=&#39;.$url;
    $str = self::get_html($url);
    $data = json_decode($str);
    return (!isset($data->responseData->cursor->estimatedResultCount))
        ? &#39;0&#39;
        : intval($data->responseData->cursor->estimatedResultCount);
  }
  /**
   *
   * gets the inbounds links from a site
   * @param string $url
   * @param integer
   */
  public static function google_links($url)
  {
    $request   = "http://www.google.com/search?q=" . urlencode("link:" . $url) . "&hl=en";
    $data     = self::get_html($request);
    preg_match(&#39;/<p id=resultStats>(About )?([\d,]+) result/si&#39;, $data, $l);
    return ($l[2]) ? $l[2] : NULL;
  }
  /**
   *
   * web of trust rating
   * @param string $url
   * @reutn integer
   */
  public static function WOT_rating($url)
  {
    $domain = self::domain_name($url);
    $request = "http://api.mywot.com/0.4/public_query2?target=" . $domain;
    $data   = self::get_html($request);
    preg_match_all(&#39;/<application name="(\d+)" r="(\d+)" c="(\d+)"\/>/si&#39;, $data, $regs);
    $trustworthiness = ($regs[2][0]) ? $regs[2][0] : NULL;
    return (is_numeric($trustworthiness))? $trustworthiness:NULL;
  }
   
  /**
   *
   * how old is the domain?
   * @param string $domain
   * @return integer unixtime
   */
  public static function domain_age($domain)
  {
    $request = "http://reports.internic.net/cgi/whois?whois_nic=" . $domain . "&type=domain";
    $data   = self::get_html($request);
    preg_match(&#39;/Creation Date: ([a-z0-9-]+)/si&#39;, $data, $p);
    return (!$p[1])?FALSE:strtotime($p[1]);
  }
  /**
   *
   * counts how many tweets about the url
   * @param string $url
   * @return integer
   */
  public static function tweet_count($url)
  {
    $url = urlencode($url);
    $twitterEndpoint = "http://urls.api.twitter.com/1/urls/count.json?url=%s";
    $fileData = file_get_contents(sprintf($twitterEndpoint, $url));
    $json = json_decode($fileData, true);
    unset($fileData);        // free memory
    return (is_numeric($json[&#39;count&#39;]))? $json[&#39;count&#39;]:NULL;
  }
  /**
   * Returns the total amount of Facebook Shares for a single page
   *
   * @link     https://graph.facebook.com/
   * @param     string   The URL to check.
   * @return    integer  Returns the total amount of Facebook
   */
  public static function facebook_shares($q)
  {
    //Execution and result of Json
    $str = self::get_html(&#39;http://graph.facebook.com/?id=&#39;.urlencode($q));
    $data = json_decode($str);
    //Return only number of facebook shares
    $r = $data->shares;
    return ($r != NULL) ? $r : intval(&#39;0&#39;);
  }
  /**
   *
   * get the pagespeed rank over 100
   * @param string $url
   * @return integer
   */
  public static function page_speed($url)
  {
    $url = &#39;https://developers.google.com/_apps/pagespeed/run_pagespeed?url=&#39;.$url.&#39;&format=json&#39;;
    $str = self::get_html($url);
    $data = json_decode($str);
    return intval($data->results->score);
  }
  /**
   *
   * get google page rank
   * @param string $url
   * @return integer
   */
  public static function page_rank($url)
  {
     $query = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=".self::CheckHash(self::HashURL($url)). "&features=Rank&q=info:".$url."&num=100&filter=0";
      $data = self::get_html($query);//die(print_r($data));
    $pos  = strpos($data, "Rank_");
    if($pos === false)
    {
      return NULL;
    }
    else
    {
      $pagerank = substr($data, $pos + 9);
      return $pagerank;
    }
  }
  // functions for google pagerank
  /**
   * To calculate PR functions
   */
  public static function StrToNum($Str, $Check, $Magic)
  {
    $Int32Unit = 4294967296; // 2^32
    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
      $Check *= $Magic;
      //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
      // the result of converting to integer is undefined
      // refer to http://www.php.net/manual/en/language.types.integer.php
      if ($Check >= $Int32Unit) {
        $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
        //if the check less than -2^31
        $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
      }
      $Check += ord($Str{$i});
    }
    return $Check;
  }
  /**
   * Genearate a hash for a url
   */
  public static function HashURL($String)
  {
    $Check1 = self::StrToNum($String, 0x1505, 0x21);
    $Check2 = self::StrToNum($String, 0, 0x1003F);
    $Check1 >>= 2;
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
    $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
    return ($T1 | $T2);
  }
  /**
   * genearate a checksum for the hash string
   */
  public static function CheckHash($Hashnum)
  {
    $CheckByte = 0;
    $Flag = 0;
    $HashStr = sprintf(&#39;%u&#39;, $Hashnum) ;
    $length = strlen($HashStr);
    for ($i = $length - 1; $i >= 0; $i --) {
      $Re = $HashStr{$i};
      if (1 === ($Flag % 2)) {
        $Re += $Re;
        $Re = (int)($Re / 10) + ($Re % 10);
      }
      $CheckByte += $Re;
      $Flag ++;
    }
    $CheckByte %= 10;
    if (0 !== $CheckByte) {
      $CheckByte = 10 - $CheckByte;
      if (1 === ($Flag % 2) ) {
        if (1 === ($CheckByte % 2)) {
          $CheckByte += 9;
        }
        $CheckByte >>= 1;
      }
    }
    return &#39;7&#39;.$CheckByte.$HashStr;
  }
}
Nach dem Login kopieren

Verwendungsbeispiel

<?php
include &#39;seoreport.php&#39;;
ini_set(&#39;max_execution_time&#39;, 180);
  $url = (isset($_GET[&#39;url&#39;]))?$_GET[&#39;url&#39;]:&#39;http://phpclasses.org&#39;;
  $meta_tags = seoreport::meta_info($url);
  //die(var_dump($meta_tags));
  //first check if site online
  if ($meta_tags!==FALSE)
  {
    $stats = array();
    $stats[&#39;meta&#39;] = $meta_tags;
    $stats[&#39;alexa&#39;][&#39;rank&#39;] = seoreport::alexa_rank($url);
    $stats[&#39;alexa&#39;][&#39;links&#39;] = seoreport::alexa_links($url);
    $stats[&#39;domain&#39;][&#39;WOT_rating&#39;] = seoreport::WOT_rating($url);  
    $stats[&#39;domain&#39;][&#39;domain_age&#39;] = seoreport::domain_age($url);  
    $stats[&#39;social&#39;][&#39;twitter&#39;] = seoreport::tweet_count($url);  
    $stats[&#39;social&#39;][&#39;facebook&#39;] = seoreport::facebook_shares($url);
    $stats[&#39;google&#39;][&#39;page_rank&#39;] = seoreport::page_rank($url);
    $stats[&#39;google&#39;][&#39;page_speed&#39;] = seoreport::page_speed($url);
    $stats[&#39;google&#39;][&#39;pages&#39;] = seoreport::google_pages($url);
    $stats[&#39;google&#39;][&#39;links&#39;] = seoreport::google_links($url);
    var_dump($stats);
  }
  else &#39;Site not online. &#39;.$url;
Nach dem Login kopieren

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, I Ich hoffe, es kann für die Lernhilfe aller nützlich sein.

Verwandte Empfehlungen:

PHP-Operation Bildgrößenänderung, Wasserzeichen, Generieren von Bestätigungscode, Ausgabe und Speichern

php-Prozesssteuerung und mathematische Operationen

php-Pressemitteilungssystem

Das obige ist der detaillierte Inhalt vonPHP prüft und erhält Website-SEO-Informationen basierend auf der Seoreport-Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!