我正在創建一個Mozilla Firefox工具欄來顯示當前網站的PageRank和Alexa排名。我知道的一種方法是在我的JavaScript文件中使用XMLHttpRequest
以從我網站服務器上託管的PHP頁面獲取信息。Firefox的擴展名,以獲得谷歌PageRank和alexa排名
PHP類具有這樣的功能:
function check($page) {
// Open a socket to the toolbarqueries address, used by Google Toolbar
$socket = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);
// If a connection can be established
if($socket) {
// Prep socket headers
$out = "GET /tbr?client=navclient-auto&ch=".$this->checkHash($this->createHash($page)).
"&features=Rank&q=info:".$page."&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";
// Write settings to the socket
fwrite($socket, $out);
// When a response is received...
$result = "";
while(!feof($socket)) {
$data = fgets($socket, 128);
$pos = strpos($data, "Rank_");
if($pos !== false){
$pagerank = substr($data, $pos + 9);
$result += $pagerank;
}
}
// Close the connection
fclose($socket);
// Return the rank!
return $result;
}
有沒有更好的辦法讓我的自定義工具欄的Firefox的網頁排名,而無需主機PHP服務?
// Create a url hash
function createHash($string) {
$check1 = $this->stringToNumber($string, 0x1505, 0x21);
$check2 = $this->stringToNumber($string, 0, 0x1003F);
$factor = 4;
$halfFactor = $factor/2;
$check1 >>= $halfFactor;
$check1 = (($check1 >> $factor) & 0x3FFFFC0) | ($check1 & 0x3F);
$check1 = (($check1 >> $factor) & 0x3FFC00) | ($check1 & 0x3FF);
$check1 = (($check1 >> $factor) & 0x3C000) | ($check1 & 0x3FFF);
$calc1 = (((($check1 & 0x3C0) << $factor) | ($check1 & 0x3C)) << $halfFactor) | ($check2 & 0xF0F);
$calc2 = (((($check1 & 0xFFFFC000) << $factor) | ($check1 & 0x3C00)) << 0xA) | ($check2 & 0xF0F0000);
return ($calc1 | $calc2);
}
//創建哈希
function checkHash($hashNumber)
{
$check = 0;
$flag = 0;
$hashString = sprintf('%u', $hashNumber) ;
$length = strlen($hashString);
for ($i = $length - 1; $i >= 0; $i --) {
$r = $hashString{$i};
if(1 === ($flag % 2)) {
$r += $r;
$r = (int)($r/10) + ($r % 10);
}
$check += $r;
$flag ++;
}
$check %= 10;
if(0 !== $check) {
$check = 10 - $check;
if(1 === ($flag % 2)) {
if(1 === ($check % 2)) {
$check += 9;
}
$check >>= 1;
}
}
return '7'.$check.$hashString;
}
謝謝你的回覆。這肯定會節省很多工作。就一件事。這個請求的URL使用HASH而不是Web域名。我已經編輯了這個問題以包含CreateHash函數。我可以直接在java腳本中執行此操作嗎? – Flamingo
@Flamingo:在我的回答中添加了一段。 –
嘗試了這段帶有前綴7的代碼。我不知道我是否得到錯誤的哈希代碼!我甚至嘗試過使用此功能:http://abhinavsingh.com/blog/2009/04/getting-google-page-rank-using-javascript-for-adobe-air-apps/#comments – Flamingo