Advertisement
If you have a new account but are having problems posting or verifying your account, please email us on hello@boards.ie for help. Thanks :)
Hello all! Please ensure that you are posting a new thread or question in the appropriate forum. The Feedback forum is overwhelmed with questions that are having to be moved elsewhere. If you need help to verify your account contact hello@boards.ie

get pagerank with php

Options
  • 20-09-2007 8:37am
    #1
    Registered Users Posts: 648 ✭✭✭


    hi,

    does anyone know a PHP api or lib to grab the pagerank for a url ?

    tnx


Comments

  • Registered Users Posts: 3,594 ✭✭✭forbairt


    This page might be of some use ... google.com ...

    second hit .. :D

    http://torrentialwebdev.com/blog/archives/30-Displaying-a-google-pagerank.html


  • Closed Accounts Posts: 48 WeeDiddly


    Sounds like a hell of a lot of trouble to me if I read that link correctly!


  • Registered Users Posts: 145 ✭✭RedCardinal


    hi,

    does anyone know a PHP api or lib to grab the pagerank for a url ?

    tnx
    <?php
    //settings - host and user agent
    $googlehost='toolbarqueries.google.com';
    $googleua='Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)';
    
    //convert a string to a 32-bit integer
    function StrToNum($Str, $Check, $Magic) {
        $Int32Unit = 4294967296;  // 2^32
    
        $length = strlen($Str);
        for ($i = 0; $i < $length; $i++) {
            $Check *= $Magic; 	
            //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), 
            //  the result of converting to integer is undefined
            //  refer to http://www.php.net/manual/en/language.types.integer.php
            if ($Check >= $Int32Unit) {
                $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
                //if the check less than -2^31
                $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
            }
            $Check += ord($Str{$i}); 
        }
        return $Check;
    }
    
    //genearate a hash for a url
    function HashURL($String) {
        $Check1 = StrToNum($String, 0x1505, 0x21);
        $Check2 = StrToNum($String, 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);
    }
    
    //genearate a checksum for the hash string
    function CheckHash($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;
    }
    
    //return the pagerank checksum hash
    function getch($url) { return CheckHash(HashURL($url)); }
    
    //return the pagerank figure
    function getpr($url) {
    	global $googlehost,$googleua;
    	$ch = getch($url);
    	$fp = fsockopen($googlehost, 80, $errno, $errstr, 30);
    	if ($fp) {
    	   $out = "GET /search?client=navclient-auto&ch=$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=info:$url HTTP/1.1\r\n";
    	   //echo "<pre>$out</pre>\n"; //debug only
    	   $out .= "User-Agent: $googleua\r\n";
         $out .= "Accept: application/atom+xml,application/xml,text/xml,text/html\r\n";
    	   $out .= "Host: $googlehost\r\n";
    	   $out .= "Connection: Close\r\n\r\n";
    	
    	   fwrite($fp, $out);
    	   
    	   //$pagerank = substr(fgets($fp, 128), 4); //debug only
    	   //echo $pagerank; //debug only
    	   while (!feof($fp)) {
    			$data = fgets($fp, 128);
    			//echo $data;
    			$pos = strpos($data, "Rank_");
    			if($pos === false){} else{
    				$pr=substr($data, $pos + 9);
    				$pr=trim($pr);
    				$pr=str_replace("\n",'',$pr);
    				return $pr;
    			}
    	   }
    	   //else { echo "$errstr ($errno)<br />\n"; } //debug only
    	   fclose($fp);
    	}
    }
    
    //generate the graphical pagerank
    function pagerank($url,$width=40,$method='image') {
    	if (!preg_match('/^(http:\/\/)?([^\/]+)/i', $url)) { $url='http://'.$url; }
    	$pr=getpr($url);
    	$pagerank=" PageRank: $pr/10";
    
    	//The (old) image method
    	if ($method == 'image') {
    	$prpos=$width*$pr/10;
    	$prneg=$width-$prpos;
    	$html='<img src="pos.gif" width='.$prpos.' height=4 border=0 alt="'.$pagerank.'"><img src="http://www.google.com/images/neg.gif" width='.$prneg.' height=4 border=0 alt="'.$pagerank.'">';
    	}
    	//The pre-styled method
    	if ($method == 'style') {
    	$prpercent=100*$pr/10;
    	$html='<div style="position: relative; width: '.$width.'px; padding: 0; background: #D9D9D9;"><strong style="width: '.$prpercent.'%; display: block; position: relative; background: #5EAA5E; text-align: center; color: #333; height: 4px; line-height: 4px;"><span></span></strong></div>';
    	}
    	
      return $pagerank;
    }
    
    if ((!isset($_POST['url'])) && (!isset($_GET['url']))) { echo '<form action="" method="post"><input name="url" type="text"><input type="submit" name="Submit" value="Get Pagerank"></form>'; }
    
    ?>
    

    That may or may not work in that format (I had custom hacked it for another purpose and removed my hacks). I know that the hash and request is fine - only issues you might have are with some of the function calls. If you're familiar with php you should have no probs.

    Bear in mind that if you hammer Google with a large number of PR requests you'll quickly find yourself getting spyware warnings from Google when using their search (unless your IP is dynamic and you can reset it). Google is getting very touchy about anything automated these days.

    Use at your own risk!


  • Registered Users Posts: 3,594 ✭✭✭forbairt


    I'd say cache it when you do a request or save the result to a database / file and check the time you last made the request ..

    1 query every day ... wouldn't hurt ... I'll assume ...


  • Registered Users Posts: 11,987 ✭✭✭✭zAbbo


    I was speaking to a couple of guys who are on Matt Cutts team, and they are keen to discourage all this Page Rank emphasis, it's one small feature of the Algo, and focusing solely on it, may not be a good idea.

    The emphasis is on quality traffic to your site :)


  • Advertisement
  • Registered Users Posts: 3,594 ✭✭✭forbairt


    zabbo wrote:
    focusing solely on it, may not be a good idea.

    While I wouldn't focus solely on it ... a lot of customers are aware of the term and want to have as high a ranking as possible :( in as short a time as possible


Advertisement