2010-08-27 79 views
1

有誰知道是否有可能顯示使用PHP腳本的特定網站的谷歌網頁排名?PHP腳本顯示谷歌排名結果

如果有可能,我該怎麼做?

+0

您是指PageRank(PR)還是結果中列表的實際位置? – 2010-08-28 04:07:45

+0

你應該閱讀http://stackoverflow.com/faq#howtoask並考慮標記一些你的問題的答案***接受**並使用**投票**投票了所有答案,這對你有幫助。 – Oleg 2010-08-28 10:36:46

+0

@ Oleg:大部分問題都沒有給我想要的答案。我應該把它標記爲無益嗎? @Cody Snider:我正在嘗試0到10之間的實際pagerang(PR)數字 – Smith 2010-08-28 12:18:20

回答

0

好的,我重新編寫了我的答案,只提取了我的搜索引擎優化助手的相關部分(我的以前的版本有其他的東西,如Alexa排名,谷歌索引,雅虎鏈接等,如果你正在尋找,只是請查看這個答案的舊版本!)

請注意,有些網頁沒有PAGERANK,而且我也不是意思是ZERO。沒有。這可能是因爲該頁面非常不重要(甚至比PR 0更重要),或者只是如此新,但可能非常重要。 這與我班的PR 0相同!

這有一些優點和一些缺點。如果可能的話,你應該在你的邏輯中單獨處理它,但這並不總是可能的,所以0是下一個最好的方法。

此外:

該代碼被反向engeneered和不利用某種API的具有任何形式的SLA或任何的。 因此,它可能會停止工作任何時間!

並請不要讓洪水GOOGLE!

我做了測試。如果您只有很短的睡眠時間,Google會在1000次請求後阻止您(相當長時間!)。隨着1.5到2秒的隨機睡眠,它看起來很好。

我曾經爲70k頁抓取過PageRank。只有一次,因爲我只是需要它。我從幾個IP每天只做5k,現在我有數據,它不會過時,因爲這些頁面已經存在了幾十年。

IMO完全可以一次檢查一次pagerank甚至一次,但不要錯過使用此代碼或谷歌可能鎖定我們所有在一起!

<?php 
/* 
* @author Joe Hopfgartner <[email protected]> 
*/ 
class Helper_Seo 
{ 

    protected function _pageRankStrToNum($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 
      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 
    */ 
    protected function _pageRankHashURL($String) { 
     $Check1=self::_pageRankStrToNum($String,0x1505,0x21); 
     $Check2=self::_pageRankStrToNum($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 
    */ 
    protected 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; 
    } 
    public static function getPageRank($url) { 
     $fp=fsockopen("toolbarqueries.google.com",80,$errno,$errstr,30); 
     if(!$fp) { 
      trigger_error("$errstr ($errno)<br />\n"); 
      return false; 
     } 
     else { 
      $out="GET /search?client=navclient-auto&ch=".self::CheckHash(self::_pageRankHashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0 HTTP/1.1\r\n"; 
      $out.="Host: toolbarqueries.google.com\r\n"; 
      $out.="User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n"; 
      $out.="Connection: Close\r\n\r\n"; 
      fwrite($fp,$out); 
      #echo " U: http://toolbarqueries.google.com/search?client=navclient-auto&ch=".$this->CheckHash($this->_pageRankHashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0"; 
      #echo "\n"; 
      //$pagerank = substr(fgets($fp, 128), 4); 
      //echo $pagerank; 
      #echo "DATA:\n\n"; 
      $responseOK = false; 
      $response = ""; 
      $inhead = true; 
      $body = ""; 
      while(!feof($fp)) { 

       $data=fgets($fp,128); 

       if($data == "\r\n" && $inhead) { 
        $inhead = false; 
       } else { 
        if(!$inhead) { 
         $body.= $data; 
        } 
       } 

       //if($data == '\r\n\r\n') 
       $response .= $data; 
       if(trim($data) == 'HTTP/1.1 200 OK') { 
        $responseOK = true; 
       } 

       #echo "D ".$data; 
       $pos=strpos($data,"Rank_"); 
       if($pos===false) { 
       } 
       else { 
        $pagerank=trim(substr($data,$pos+9)); 
        if($pagerank === '0') { 
          fclose($fp); 
          return 0; 
        } else if(intval($pagerank) === 0) { 
         throw new Exception('couldnt get pagerank from string: '.$pagerank); 
         //trigger_error('couldnt get pagerank from string: '.$pagerank); 
         fclose($fp); 
         return false; 
        } else { 
         fclose($fp); 
         return intval($pagerank); 
        } 
       } 
      } 
      fclose($fp); 


      //var_dump($body); 
      if($responseOK && $body=='') { 
       return 0; 
      } 
      //return 0; 
      throw new Exception('couldnt get pagerank, unknown error. probably google flood block. my tests showed that 1req/sec is okay! i recommend a random sleep between 1.5 and 2 secs. no sleep breaks at ~1000 reqs.'); 
      //trigger_error('couldnt get pagerank, unknown error. probably google flood block.'); 
      return false; 
     } 
    } 

} 
$url = "http://www.2xfun.de/"; 
$pagerank = Helper_Seo::getPagerank($url); 
var_dump($pagerank); 
?> 
+0

+1對於代碼體太長,我不想要通讀來驗證它的實際正確 – Chris 2010-08-28 13:43:45

+0

lol:D我認爲它沒有去短。而不是正確的錯誤處理(忽略在課程結束時的3個lil函數,這些函數就在那裏,並且不需要被讀取......我把它們留在了那裏,因爲它們也可以用於某些想知道的人公關) – 2010-08-28 14:13:12

+0

你好,有沒有什麼辦法可以讓我知道api。如果谷歌阻止它,我希望他們不會阻止該網站使用任何谷歌服務來自frim的呼叫,因爲我使用了很多谷歌服務。這是否違規? – Smith 2010-09-13 15:16:01