Voici une fonction PHP qui calcule le page rank google d'une page donnée.
La fonction est extraite du site http://code.seebz.net/p/google-pagerank/ :
<?php
/**
* google_pagerank <http://code.seebz.net/p/googlepagerank/>
*
* Copyright (c) 2010 Sébastien Corne, <http://seebz.net>
*
* This script is an adaptation of the GooglePR Class made by FloBaoti.
* <http://www.phpcs.com/codes/GOOGLE-PAGERANK-CHECKSUM-ALGORITHM_40649.aspx>
*/
function google_pagerank($url, $server = 'toolbarqueries.google.com')
{
// Usefulls functions
$fStrToNum = create_function('$str, $check, $magic',
'
$int32Unit = 4294967296; // 2^32
$length = strlen($str);
for ($i = 0; $i < $length; $i++){
$check *= $magic;
if ($check >= $int32Unit){
$check = ($check - $int32Unit * (int) ($check / $int32Unit));
$check = ($check < -2147483648) ? ($check + $int32Unit) : $check;
}
$check += ord($str{$i});
}
return $check;
');
$fHashURL = create_function('$str',
'
$fStrToNum = "'.$fStrToNum.'";
$check1 = $fStrToNum($str, 0x1505, 0x21);
$check2 = $fStrToNum($str, 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);
');
$fCheckHash = create_function('$hashNum',
'
$checkByte = 0; $flag = 0;
$hashStr = sprintf("%u", $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 "7" . $checkByte . $hashStr;
');
// Checksum calcul
$checksum = $fCheckHash($fHashURL($url));
// Google request
$requestUrl = sprintf(
'http://%s/search?client=navclient-auto&ch=%s&ie=UTF-8&oe=UTF-8&features=Rank&q=info:%s',
$server,
$checksum,
urlencode($url)
);
if ( ($c = @file_get_contents($requestUrl)) === false )
return false;
elseif( empty($c) )
return -1;
else
return intval(substr($c, strrpos($c, ':')+1));
}
?>
6 commentaire