Google page rank script

I have the next page rank script:

It worked fine, but after a while i get:

<html> <head> <title>403 Forbidden</title> <style> body {font-family: Arial, sans-serif;}</style></head><body bgcolor="#ffffff" text="#000000" link="#0000cc" vlink="#551a8b" alink="#ff0000"> <table cellpadding="0" cellspacing="0" border="0"><tr><td><b><font face=times color=#0039b6 size=10>G</font><font face=times color=#c41200 size=10>o</font><font face=times color=#f3c518 size=10>o</font><font face=times color=#0039b6 size=10>g</font><font face=times color=#30a72f size=10>l</font><font face=times color=#c41200 size=10>e</font></b></td><td valign=middle width="100%" style="padding-left: 10px"><table bgcolor="#e5ecf9" width="100%" cellpadding="0" cellspacing="0" border="0" style="border-top: 1px solid #3366cc"><tr><td><font size="+1">&nbsp;<b>Error</b></font></td><td align="right" nowrap><font size="-1">&nbsp;</font></td></tr></table></td></tr></table><blockquote><h1>We're sorry...</h1><p>... but your query looks similar to automated requests from a computer virus or spyware application.  To protect our users, we can't process your request right now.</p> <p>We'll restore your access as quickly as possible, so try again soon. In the meantime, if you suspect that your computer or network has been infected, you might want to run a <a href=""> virus checker</a> or <a href="">spyware remover</a> to make sure that your systems are free of viruses and other spurious software.</p><p>We apologize for the inconvenience, and hope we'll see you again on Google. </blockquote><br><table width=100% cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img alt="" width=1 height=3></td></tr></table></body></html>

 * PageRankXor32 class created by MagicBeanDip
 * PageRank class was created by others
 * Look for updates at
 * This code is released into the Public Domain
 * Sample use:
 * include('PageRankXor32.php');
 * $oPR=new PageRankXor32();
 * echo $oPR->getRank('');
function isUrlValid($Url) {
        return (strpos(strtolower($Url),'http://')===0);
function pageRankImage($Url)
   if (isUrlValid($Url))
    $oPR=new PageRankXor32();
   if($PageRank>=0  && $PageRank!="")
   $prImage = "/images/pr/pr" . $PageRank . ".gif";
   else if($PageRank == -1)
   $prImage = "/images/pr/blank.gif";
   $prImage = "/images/pr/blank.gif";
return $PageRank;
define('GOOGLE_MAGIC', 0x00000000E6359A60);
// Use this class if your server is having problems with bitwise operations
class PageRankXor32 extends PageRank {
        function xor32($a, $b) {
                return $this->int32($a) ^ $this->int32($b);
        //return least significant 32 bits
        //works by telling unserialize to create an integer even though we provide a double value
        function int32($x) {
                return unserialize("i:$x;");
                //return intval($x); // This line doesn't work on all servers.
        function mix($a,$b,$c) {
                $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,13));
                $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<8);
                $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,13));
                $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,12));
                $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<16);
                $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,5));
                $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,3));
                $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<10);
                $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,15));
                return array($a,$b,$c);
//This class should work on most servers
class PageRank {
        function zeroFill($a, $b){
                $z = hexdec(80000000);
                if ($z & $a){
                        $a = ($a>>1);
                        $a &= (~$z);
                        $a |= 0x40000000;
                        $a = ($a>>($b-1));
                        $a = ($a>>$b);
                return $a;
        function mix($a,$b,$c) {
                $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,13));
                $b -= $c; $b -= $a; $b ^= ($a<<8);
                $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,13));
                $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,12));
                $b -= $c; $b -= $a; $b ^= ($a<<16);
                $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,5));
                $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,3));
                $b -= $c; $b -= $a; $b ^= ($a<<10);
                $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,15));
                return array($a,$b,$c);
        function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
                if(is_null($length)) {
                        $length = sizeof($url);
                $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 = $this->mix($a,$b,$c);
                        $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
                        $k += 12;
                        $len -= 12;
                $c += $length;
                        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]);
                $mix = $this->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++) {
                        $result[$i] = ord($string{$i});
                return $result;
        //returns -1 if no page rank was found
        function getRank($url){
                $ch = "6".$this->GoogleCH($this->strord("info:" . $url));
                $fp = fsockopen("", 80, $errno, $errstr, 30);
                if (!$fp) {
                        echo "$errstr ($errno)<br />\n";
                } else {
                        $out = "GET /search?client=navclient-auto&ch=" . $ch .  "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n" ;
                        $out .= "Host:\r\n" ;
                        $out .= "Connection: Close\r\n\r\n" ;
                        fwrite($fp, $out);
                        while (!feof($fp)) {
                                $data = fgets($fp, 128);
                                $pos = strpos($data, "Rank_");
                                if($pos === false){
                                $pagerank = trim(substr($data, $pos + 9));
                return $pagerank;

Open in new window

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

So, what's your question. From what you posted, it seems the remote system is tracking how much request you make on a given period of time and blocks you after you exceed that limit. This is something you would need to address with the resource provider.
rares_dumitrescuAuthor Commented:
This message i get from google
OK. Then the problem is that Google limits the number of requests for a given time period. They are the ones tracking how many requests you make, say within a hour, and if you exceed that limit then they give you that error instead. This is not a programmatic problem. It is a service denial by Google. You can't get around this. I don't know if you have some contract with them. If you do, maybe they will be willing to "increase" the number of queries/requests per ?hour? when the request comes from your site.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.