当前位置:首页 > PHP教程 > php应用 > 列表

php实现专业获取网站SEO信息类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-20 16:56:09 浏览: 评论:0 

这篇文章主要介绍了php实现专业获取网站SEO信息类,实例分析了seoreport类针对网站SEO信息检查与获取的技巧,非常具有实用价值,需要的朋友可以参考下。

本文实例讲述了php实现专业获取网站SEO信息类。分享给大家供大家参考。具体如下:

这个seo类的功能包括:

- 检查指定的网站响应

- 获取从该网站主页的语言和其他meta标签数据的

- 获取网站的导入链接,从Alexa的流量排名

- 获取网站的导入链接,由谷歌索引的网页数量

- 获取网站的信任,从WOT排名。

- 获取,因为它是第一个注册的网站域名年龄

- 获取的Twitter网站页面的数量

- 获取的Facebook链接的网站页面

- 获取网站谷歌网页速度等级

- 获取网站的谷歌网页排名

  1. <?php 
  2. /** 
  3.  * 
  4.  * SEO report for different metrics 
  5.  * 
  6.  * @category SEO 
  7.  * @author Chema <chema@garridodiaz.com> 
  8.  * @copyright (c) 2009-2012 Open Classifieds Team 
  9.  * @license GPL v3 
  10.  * Based on seo report script http://www.phpeasycode.com && PHP class SEOstats 
  11.  * 
  12.  */ 
  13. class seoreport{ 
  14.   /** 
  15.    * 
  16.    * check if a url is online/alive 
  17.    * @param string $url 
  18.    * @return bool 
  19.    */ 
  20.   public static function is_alive($url
  21.   { 
  22.     $ch = curl_init(); 
  23.     curl_setopt($ch, CURLOPT_URL, $url); 
  24.     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
  25.     curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback'); 
  26.     curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
  27.     curl_exec ($ch); 
  28.     $int_return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
  29.     curl_close ($ch); 
  30.     if ($int_return_code != 200 && $int_return_code != 302 && $int_return_code != 304) 
  31.     { 
  32.       return FALSE; 
  33.     } 
  34.     else return TRUE; 
  35.   } 
  36.   /** 
  37.    * HTTP GET request with curl. 
  38.    * 
  39.    * @param string $url String, containing the URL to curl. 
  40.    * @return string Returns string, containing the curl result. 
  41.    * 
  42.    */ 
  43.   protected static function get_html($url
  44.   { 
  45.     $ch = curl_init($url); 
  46.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  47.     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5); 
  48.     curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); 
  49.     curl_setopt($ch,CURLOPT_MAXREDIRS,2); 
  50.     if(strtolower(parse_url($url, PHP_URL_SCHEME)) == 'https'
  51.     { 
  52.       curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,1); 
  53.       curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,1); 
  54.     } 
  55.     $str = curl_exec($ch); 
  56.     curl_close($ch); 
  57.     return ($str)?$str:FALSE; 
  58.   } 
  59.   /** 
  60.    * 
  61.    * get the domain from any URL 
  62.    * @param string $url 
  63.    */ 
  64.   public static function domain_name($url
  65.   { 
  66.     $nowww = ereg_replace('www\.','',$url); 
  67.     $domain = parse_url($nowww); 
  68.     if(!emptyempty($domain["host"])) 
  69.       return $domain["host"]; 
  70.     else 
  71.       return $domain["path"]; 
  72.   } 
  73.   /** 
  74.    * 
  75.    * get the metas from a url and the language of the site 
  76.    * @param string $url 
  77.    * @return array 
  78.    */ 
  79.   public static function meta_info($url
  80.   { 
  81.     //doesn't work at mediatemple 
  82.     /*$html = new DOMDocument(); 
  83.     if(!$html->loadHtmlFile($url)) 
  84.       return FALSE;*/ 
  85.     if (!$html_content = self::get_html($url)) 
  86.         return FALSE; 
  87.     $html = new DOMDocument(); 
  88.     $html->loadHtml($html_content); 
  89.          
  90.     $xpath = new DOMXPath( $html ); 
  91.     $url_info = array(); 
  92.     $langs = $xpath->query( '//html' ); 
  93.     foreach ($langs as $lang
  94.     { 
  95.       $url_info['language'] = $lang->getAttribute('lang'); 
  96.     } 
  97.     $metas = $xpath->query( '//meta' ); 
  98.     foreach ($metas as $meta
  99.     { 
  100.       if ($meta->getAttribute('name')) 
  101.       { 
  102.         $url_info[$meta->getAttribute('name')] = $meta->getAttribute('content'); 
  103.       } 
  104.     } 
  105.     return $url_info
  106.   } 
  107.   /** 
  108.    * 
  109.    * Alexa rank 
  110.    * @param string $url 
  111.    * @return integer 
  112.    */ 
  113.   public static function alexa_rank($url
  114.   { 
  115.     $domain   = self::domain_name($url); 
  116.     $request   = "http://data.alexa.com/data?cli=10&amp;dat=s&amp;url=" . $domain
  117.     $data     = self::get_html($request); 
  118.     preg_match('/<POPULARITY URL="(.*?)" TEXT="([\d]+)"\/>/si'$data$p); 
  119.     return ($l[2]) ? $l[2] : NULL; 
  120.   } 
  121.   /** 
  122.    * 
  123.    * Alexa inbounds link 
  124.    * @param string $url 
  125.    * @return integer 
  126.    */ 
  127.   public static function alexa_links($url
  128.   { 
  129.     $domain   = self::domain_name($url); 
  130.     $request   = "http://data.alexa.com/data?cli=10&amp;dat=s&amp;url=" . $domain
  131.     $data     = self::get_html($request); 
  132.     preg_match('/<LINKSIN NUM="([\d]+)"\/>/si'$data$l); 
  133.     return ($l[1]) ? $l[1] : NULL; 
  134.   } 
  135.   /** 
  136.    * Returns total amount of results for any Google search, 
  137.    * requesting the deprecated Websearch API. 
  138.    * 
  139.    * @param    string    $query   String, containing the search query. 
  140.    * @return    integer          Returns a total count. 
  141.    */ 
  142.   public static function google_pages($url
  143.   { 
  144.     //$query = self::domain_name($url); 
  145.     $url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=1&q='.$url
  146.     $str = self::get_html($url); 
  147.     $data = json_decode($str); 
  148.     return (!isset($data->responseData->cursor->estimatedResultCount)) 
  149.         ? '0' 
  150.         : intval($data->responseData->cursor->estimatedResultCount); 
  151.   } 
  152.   /** 
  153.    * 
  154.    * gets the inbounds links from a site 
  155.    * @param string $url 
  156.    * @param integer 
  157.    */ 
  158.   public static function google_links($url
  159.   { 
  160.     $request   = "http://www.google.com/search?q=" . urlencode("link:" . $url) . "&amp;hl=en"
  161.     $data     = self::get_html($request); 
  162.     preg_match('/<div id=resultStats>(About )?([\d,]+) result/si'$data$l); 
  163.     return ($l[2]) ? $l[2] : NULL; 
  164.   } 
  165.   /** 
  166.    * 
  167.    * web of trust rating 
  168.    * @param string $url 
  169.    * @reutn integer 
  170.    */ 
  171.   public static function WOT_rating($url
  172.   { 
  173.     $domain = self::domain_name($url); 
  174.     $request = "http://api.mywot.com/0.4/public_query2?target=" . $domain
  175.     $data   = self::get_html($request); 
  176.     preg_match_all('/<application name="(\d+)" r="(\d+)" c="(\d+)"\/>/si'$data$regs); 
  177.     $trustworthiness = ($regs[2][0]) ? $regs[2][0] : NULL; 
  178.     return (is_numeric($trustworthiness))? $trustworthiness:NULL; 
  179.   } 
  180.      
  181.   /** 
  182.    * 
  183.    * how old is the domain? 
  184.    * @param string $domain 
  185.    * @return integer unixtime 
  186.    */ 
  187.   public static function domain_age($domain
  188.   { 
  189.     $request = "http://reports.internic.net/cgi/whois?whois_nic=" . $domain . "&type=domain"
  190.     $data   = self::get_html($request); 
  191.     preg_match('/Creation Date: ([a-z0-9-]+)/si'$data$p); 
  192.     return (!$p[1])?FALSE:strtotime($p[1]); 
  193.   } 
  194.   /** 
  195.    * 
  196.    * counts how many tweets about the url 
  197.    * @param string $url 
  198.    * @return integer 
  199.    */ 
  200.   public static function tweet_count($url
  201.   { 
  202.     $url = urlencode($url); 
  203.     $twitterEndpoint = "http://urls.api.twitter.com/1/urls/count.json?url=%s"
  204.     $fileData = file_get_contents(sprintf($twitterEndpoint$url)); 
  205.     $json = json_decode($fileData, true); 
  206.     unset($fileData);        // free memory 
  207.     return (is_numeric($json['count']))? $json['count']:NULL; 
  208.   } 
  209.   /** 
  210.    * Returns the total amount of Facebook Shares for a single page 
  211.    * 
  212.    * @link     https://graph.facebook.com/ 
  213.    * @param     string   The URL to check. 
  214.    * @return    integer  Returns the total amount of Facebook 
  215.    */ 
  216.   public static function facebook_shares($q
  217.   { 
  218.     //Execution and result of Json 
  219.     $str = self::get_html('http://graph.facebook.com/?id='.urlencode($q)); 
  220.     $data = json_decode($str); 
  221.     //Return only number of facebook shares 
  222.     $r = $data->shares; 
  223.     return ($r != NULL) ? $r : intval('0'); 
  224.   } 
  225.   /** 
  226.    * 
  227.    * get the pagespeed rank over 100 
  228.    * @param string $url 
  229.    * @return integer 
  230.    */ 
  231.   public static function page_speed($url
  232.   { 
  233.     $url = 'https://developers.google.com/_apps/pagespeed/run_pagespeed?url='.$url.'&format=json'
  234.     $str = self::get_html($url); 
  235.     $data = json_decode($str); 
  236.     return intval($data->results->score); 
  237.   } 
  238.   /** 
  239.    * 
  240.    * get google page rank 
  241.    * @param string $url 
  242.    * @return integer 
  243.    */ 
  244.   public static function page_rank($url
  245.   { 
  246.      $query = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=".self::CheckHash(self::HashURL($url)). "&features=Rank&q=info:".$url."&num=100&filter=0"
  247.       $data = self::get_html($query);//die(print_r($data)); 
  248.     $pos  = strpos($data"Rank_"); 
  249.     if($pos === false) 
  250.     { 
  251.       return NULL; 
  252.     } 
  253.     else 
  254.     { 
  255.       $pagerank = substr($data$pos + 9); 
  256.       return $pagerank
  257.     } 
  258.   } 
  259.   // functions for google pagerank 
  260.   /** 
  261.    * To calculate PR functions 
  262.    */ 
  263.   public static function StrToNum($Str$Check$Magic
  264.   { 
  265.     $Int32Unit = 4294967296; // 2^32 
  266.     $length = strlen($Str); 
  267.     for ($i = 0; $i < $length$i++) { 
  268.       $Check *= $Magic
  269.       //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), 
  270.       // the result of converting to integer is undefined 
  271.       // refer to http://www.php.net/manual/en/language.types.integer.php 
  272.       if ($Check >= $Int32Unit) { 
  273.         $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit)); 
  274.         //if the check less than -2^31 
  275.         $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check
  276.       } 
  277.       $Check += ord($Str{$i}); 
  278.     } 
  279.     return $Check
  280.   } 
  281.   /** 
  282.    * Genearate a hash for a url 
  283.    */ 
  284.   public static function HashURL($String
  285.   { 
  286.     $Check1 = self::StrToNum($String, 0x1505, 0x21); 
  287.     $Check2 = self::StrToNum($String, 0, 0x1003F); 
  288.     $Check1 >>= 2; 
  289.     $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F); 
  290.     $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF); 
  291.     $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF); 
  292.     $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F ); 
  293.     $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 ); 
  294.     return ($T1 | $T2); 
  295.   } 
  296.   /** 
  297.    * genearate a checksum for the hash string 
  298.    */ 
  299.   public static function CheckHash($Hashnum
  300.   { 
  301.     $CheckByte = 0; 
  302.     $Flag = 0; 
  303.     $HashStr = sprintf('%u'$Hashnum) ; 
  304.     $length = strlen($HashStr); 
  305.     for ($i = $length - 1; $i >= 0; $i --) { 
  306.       $Re = $HashStr{$i}; 
  307.       if (1 === ($Flag % 2)) { 
  308.         $Re += $Re
  309.         $Re = (int)($Re / 10) + ($Re % 10); 
  310.       } 
  311.       $CheckByte += $Re
  312.       $Flag ++; 
  313.     } 
  314.     $CheckByte %= 10; 
  315.     if (0 !== $CheckByte) { 
  316.       $CheckByte = 10 - $CheckByte
  317.       if (1 === ($Flag % 2) ) { 
  318.         if (1 === ($CheckByte % 2)) { 
  319.           $CheckByte += 9; 
  320.         } 
  321.         $CheckByte >>= 1; 
  322.       } 
  323.     } 
  324.     return '7'.$CheckByte.$HashStr
  325.   } 

使用范例

  1. <?php 
  2. include 'seoreport.php'
  3. ini_set('max_execution_time', 180); 
  4.   $url = (isset($_GET['url']))?$_GET['url']:'http://phpclasses.org'
  5.   $meta_tags = seoreport::meta_info($url); 
  6.   //die(var_dump($meta_tags)); 
  7.   //first check if site online 
  8.   if ($meta_tags!==FALSE) 
  9.   { 
  10.     $stats = array(); 
  11.     $stats['meta'] = $meta_tags
  12.     $stats['alexa']['rank'] = seoreport::alexa_rank($url); 
  13.     $stats['alexa']['links'] = seoreport::alexa_links($url); 
  14.     $stats['domain']['WOT_rating'] = seoreport::WOT_rating($url);   
  15.     $stats['domain']['domain_age'] = seoreport::domain_age($url);   
  16.     $stats['social']['twitter'] = seoreport::tweet_count($url);   
  17.     $stats['social']['facebook'] = seoreport::facebook_shares($url); 
  18.     $stats['google']['page_rank'] = seoreport::page_rank($url); 
  19.     $stats['google']['page_speed'] = seoreport::page_speed($url); 
  20.     $stats['google']['pages'] = seoreport::google_pages($url); 
  21.     $stats['google']['links'] = seoreport::google_links($url); 
  22.     var_dump($stats); 
  23.   } 
  24.   else 'Site not online. '.$url;

Tags: php获取网站SEO

分享到: