>  기사  >  백엔드 개발  >  PHP는 sereport 클래스를 기반으로 웹사이트 SEO 정보를 확인하고 얻습니다.

PHP는 sereport 클래스를 기반으로 웹사이트 SEO 정보를 확인하고 얻습니다.

墨辰丷
墨辰丷원래의
2018-06-11 17:24:293087검색

이 글은 주로 웹사이트 SEO 정보 획득의 PHP 구현을 소개합니다. 이 예제는 웹사이트 SEO 정보를 확인하고 획득하기 위한 sereport 클래스의 기술을 분석합니다. 도움이 필요한 친구들은 이를 참고할 수 있습니다. 기사에서는 예제를 통해 PHP 구현을 설명합니다. 전문적으로 웹사이트 SEO 정보를 얻으세요. 세부 사항은 다음과 같습니다:

이 SEO 클래스의 기능은 다음과 같습니다:

- 지정된 웹 사이트의 응답 확인

- 웹 사이트 홈페이지에서 언어 및 기타 메타 태그 데이터 가져오기
- 웹 사이트의 수신 링크 가져오기 , Alexa에서 트래픽 순위를 받으세요
- 웹 사이트의 수신 링크, Google에서 색인화한 웹 페이지 수
- WOT에서 순위를 지정하여 웹 사이트의 신뢰를 얻으세요.
- 처음 등록된 이후 웹사이트 도메인의 나이를 가져옵니다
- Twitter 웹사이트 페이지 수를 가져옵니다
- Facebook에 연결된 웹사이트 페이지를 가져옵니다
- 웹사이트 Google Page Speed ​​​​등급을 가져옵니다
- 웹사이트의 Google 페이지를 가져옵니다. 순위

<?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;
  }
}

사용 예

<?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;

요약

: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

관련 권장 사항:

php는 이미지 크기 수정, 워터마킹, 인증 코드 생성, 출력 및 저장을 수행합니다.

php 프로세스 제어 및 수학 연산

php는 뉴스 릴리스 시스템을 구현합니다

위 내용은 PHP는 sereport 클래스를 기반으로 웹사이트 SEO 정보를 확인하고 얻습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.