首页 > 开发 > PHP > 正文

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

2024-05-04 23:33:47
字体:
来源:转载
供稿:网友

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

使用范例

 

 
  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. $stats = array(); 
  10. $stats['meta'] = $meta_tags
  11. $stats['alexa']['rank'] = seoreport::alexa_rank($url); 
  12. $stats['alexa']['links'] = seoreport::alexa_links($url); 
  13. $stats['domain']['WOT_rating'] = seoreport::WOT_rating($url);  
  14. $stats['domain']['domain_age'] = seoreport::domain_age($url);  
  15. $stats['social']['twitter'] = seoreport::tweet_count($url);  
  16. $stats['social']['facebook'] = seoreport::facebook_shares($url); 
  17. $stats['google']['page_rank'] = seoreport::page_rank($url); 
  18. $stats['google']['page_speed'] = seoreport::page_speed($url); 
  19. $stats['google']['pages'] = seoreport::google_pages($url); 
  20. $stats['google']['links'] = seoreport::google_links($url); 
  21. var_dump($stats); 
  22. else 'Site not online. '.$url

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表