mckee1990

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

查看演示

posted on 2013-08-30 12:09  mckee1990  阅读(850)  评论(0编辑  收藏  举报