PR(全称PageRank)是Google衡量一个网站的重要标准之一,从而影响Google搜索结果排名。Google官方提供了查询PR的API,如本站PR值:
http://toolbarqueries.google.com.hk/tbr?client=navclient-auto&features=Rank:&q=info:phpddt.com&ch=8fabc62ea
Google PR值查询原理及其简单,只要获取如上接口返回的值处理下就OK了:
<?php /* *功能:对URL进行编码 *参数说明:$web_url 网站URL,不包含"http://" */ function HashURL($url) { $SEED = "Mining PageRank is AGAINST GOOGLE’S TERMS OF SERVICE. Yes, I’m talking to you, scammer."; $Result = 0x01020345; for ($i=0; $i<strlen($url); $i++) { $Result ^= ord($SEED{$i%87}) ^ ord($url{$i}); $Result = (($Result >> 23) & 0x1FF) | $Result << 9; } return sprintf("8%x", $Result); } /* *功能:根据google提供的pr查询接口获取pagerank *参数说明:$domain 网站域名,不包含"http://" */ function pagerank($domain) { $StartURL = "http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank:&q=info:"; $GoogleURL = $StartURL.$domain. '&ch='.HashURL($domain); echo $GoogleURL.'<br>'; $fcontents = file_get_contents("$GoogleURL"); $pagerank = substr($fcontents,9); if (!$pagerank) return "0";else return $pagerank; } echo pagerank("phpddt.com"); ?>
值得注意的是该接口需要获取一个ch的值,已有HashURL()解决,但是该代码传到服务器Linux 64上出现了int overflow溢出问题,可用如下代码解决:
function trunkbitForce32bit($n) { if (PHP_INT_SIZE <= 4) { settype($n, 'float'); if ($n < 0) $n += 4294967296; return $n; } else { $clearbit = ''; for ($i = 0; $i < PHP_INT_SIZE - 4; $i++) { $clearbit .= '00'; } for ($i = 0; $i < 4; $i++) { $clearbit .= 'ff'; } return ($n & hexdec($clearbit)); } }