Whilst working on a semi-automated directory submitter I wanted to automatically retrieve the Google Pagerank for those directories. After some searching and trying out different scripts I found one that was fast, efficient and didn’t drain the server’s resources. I found it at brightyoursite.com but since I use CodeIgniter for most of my PHP work I decided to rewrite it to a class and clean it up a bit. Below You’ll find my revised version of the script.
<?php /* Original version of the script found at http://www.brightyoursite.com/blog/2010/06/01/use-php-to-get-google-page-rank/ Reworked into a class-based script by Luc De Brouwer ( http://www.lucdebrouwer.nl ) */ class GooglePR { 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; } // Generate a proper hash for an url function HashURL($String) { $Check1 = $this->StrToNum($String, 0x1505, 0x21); $Check2 = $this->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); } // Generate a checksum for the hash 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; } // Get the Google Pagerank function getPagerank($url) { $query = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=" . $this->CheckHash($this->HashURL($url)) . "&features=Rank&q=info:" . $url . "&num=100&filter=0"; $data = $this->file_get_contents_curl($query); $pos = strpos($data, "Rank_"); if($pos !== false){ $pagerank = substr($data, $pos + 9); return trim($pagerank); } } // Use curl the get the file contents function file_get_contents_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Set curl to return the data instead of printing it to the browser. curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); return $data; } }
Now you can easily use the code below to retrieve the PageRank of any domain.
<?php $gpr = new GooglePR(); $pagerank = $gpr->getPagerank('http://www.domain.com'); ?>
Thank you very much!
This script is the first one of 6 tested pagerank checkers that really worked for me!
Worked really well and more important fact is showing result fast.
Hey Luc,
How do you get around the problem of being banned if too many request are made?
To be honest, I haven’t got a clue. This is something nice to incorporate in an SEO tool, not something to start hammering Google’s servers with :).
it’s not working in local.
Working perfectly fine in a local development environment over here.
Hi Luc,
It is returning NULL. Any reason why? I need to implement this urgently. Any help will be appreciated.
Warm regards,
Parshwa
Okay found the solution
Just need to replace the URL from which page rank is being fetched to the following:
$query = "http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank&ch=" . $this->CheckHash($this->HashURL($url)) . "&q=info:" . $url . "&num=100&filter=0";
Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\pagerank.php on line 88 << ??? ?/
Looks like you haven’t got Curl installed.
thanks for that, i have seen something similar here: https://github.com/eyecatchup/SEOstats/
it has a lot of methods/classes for getting seo data