Mar 19
Calculate Google Pagerank with PHP
Posted by Thanadon March 19, 2007 at 9:10 pm 1 Views
Filed under: Internet, Programming, PHP
This is modified code that I found from the Internet the orginal code that may not work on some server that php has 32bit operation problem and I already tested on my server.
PHP:
-
<?php
-
-
//unsigned shift right
-
function zeroFill($a, $b)
-
{
-
if ($z & $a)
-
{
-
$a = ($a>>1);
-
$a &= (~$z);
-
$a |= 0x40000000;
-
$a = ($a>>($b-1));
-
}
-
else
-
{
-
$a = ($a>>$b);
-
}
-
return $a;
-
}
-
-
function toInt32(& $x){
-
$y = (int)$x;
-
if($y==-$z&&$x<-$z){
-
$y = (int)((-1)*$x);
-
$y = (-1)*$y;
-
}
-
$x = $y;
-
}
-
-
function mix($a,$b,$c) {
-
$a -= $b; $a -= $c; toInt32($a); $a = (int)($a ^ (zeroFill($c,13)));
-
$b -= $c; $b -= $a; toInt32($b); $b = (int)($b ^ ($a<<8));
-
$c -= $a; $c -= $b; toInt32($c); $c = (int)($c ^ (zeroFill($b,13)));
-
$a -= $b; $a -= $c; toInt32($a); $a = (int)($a ^ (zeroFill($c,12)));
-
$b -= $c; $b -= $a; toInt32($b); $b = (int)($b ^ ($a<<16));
-
$c -= $a; $c -= $b; toInt32($c); $c = (int)($c ^ (zeroFill($b,5)));
-
$a -= $b; $a -= $c; toInt32($a); $a = (int)($a ^ (zeroFill($c,3)));
-
$b -= $c; $b -= $a; toInt32($b); $b = (int)($b ^ ($a<<10));
-
$c -= $a; $c -= $b; toInt32($c); $c = (int)($c ^ (zeroFill($b,15)));
-
}
-
-
function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
-
}
-
$a = $b = 0x9E3779B9;
-
$c = $init;
-
$k = 0;
-
$len = $length;
-
while($len>= 12) {
-
$a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
-
$b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
-
$c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
-
$mix = mix($a,$b,$c);
-
$a = $mix[0]; $b = $mix[1]; $c = $mix[2];
-
$k += 12;
-
$len -= 12;
-
}
-
-
$c += $length;
-
switch($len) /* all the case statements fall through */
-
{
-
case 11: $c+=($url[$k+10]<<24);
-
case 10: $c+=($url[$k+9]<<16);
-
case 9 : $c+=($url[$k+8]<<8);
-
/* the first byte of c is reserved for the length */
-
case 8 : $b+=($url[$k+7]<<24);
-
case 7 : $b+=($url[$k+6]<<16);
-
case 6 : $b+=($url[$k+5]<<8);
-
case 5 : $b+=($url[$k+4]);
-
case 4 : $a+=($url[$k+3]<<24);
-
case 3 : $a+=($url[$k+2]<<16);
-
case 2 : $a+=($url[$k+1]<<8);
-
case 1 : $a+=($url[$k+0]);
-
/* case 0: nothing left to add */
-
}
-
$mix = mix($a,$b,$c);
-
/*-------------------------------------------- report the result */
-
return $mix[2];
-
}
-
-
//converts a string into an array of integers containing the numeric value of the char
-
function strord($string) {
-
for($i=0;$i<strlen($string);$i++) {
-
}
-
return $result;
-
}
-
-
-
// converts an array of 32 bit integers into an array with 8 bit values. Equivalent to (BYTE *)arr32
-
-
function c32to8bit($arr32) {
-
for($i=0;$i<count($arr32);$i++) {
-
for ($bitOrder=$i*4;$bitOrder<=$i*4+3;$bitOrder++) {
-
$arr8[$bitOrder]=$arr32[$i]&255;
-
$arr32[$i]=zeroFill($arr32[$i], 8);
-
}
-
}
-
return $arr8;
-
}
-
-
-
function get_page_rank($url){
-
$reqgr = "info:".$url;
-
$gch = "6".GoogleCH(strord($reqgr));
-
if ( !$fsock ){
-
echo 'Can not connect to server';
-
return -1;
-
}
-
$base_get = "/search?client=navclient-auto&ch=".$gch."&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=".$reqgre;
-
fputs($fsock, "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n");
-
}
-
return $m[1];
-
}else{
-
return -1;
-
}
-
}
-
-
-
?>
Posted on Monday, March 19th, 2007 at 9:10 pm and under category Internet, Programming, PHP.
You can read any responses through the RSS 2.0 feed.
You can give a response, or trackback from your site.