Skrypt obliczający Google Pagerank (PR)
Google Pagerank to system punktacji stworzony przez koncern Google, w celu nadania stronom internetowym odpowiedniej rangi. Generalnie można powiedzieć, że im strona jest popularniejsza tym ma wyższy PR.
Pagerank jest pokazywany jako jedna z opcji dostępnych w pasku narzędziowym Google'a, oraz w wielu serwisach niezależnych. W tym wpisie przedstawię skrypt, dzięki któremu będziemy mogli umieścić na stronie lub blogu, informację o posiadanej wartości pagerank.
Skrypt #1
W tym celu tworzymy plik pagerank.php, do którego wklejamy zamieszczony niżej kod:
//PageRank Lookup v1.1 by HM2K (update: 31/01/07)
//Oparty na algorytmie: http://pagerank.gamesaga.net/
//ustawienia - host i user agent
$googlehost='toolbarqueries.google.com';
$googleua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/3.6';
function strtonum($Str, $check, $Magic) {
$intunit = 4294967296; // 2^32
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$check *= $Magic;
if ($check >= $intunit) {
$check = ($check - $intunit * (int) ($check / $intunit));
$check = ($check < -2147483648) ? ($check + $intunit) : $check;
}
$check += ord($Str{$i});
}
return $check;
}
//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);
}
//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;
}
//pagerank checksum hash
function getHash($url) { return checkHash(hashURL($url)); }
//pagerank figure
function getPagerank($url) {
global $googlehost,$googleua;
$ch = getHash($url);
$fp = fsockopen($googlehost, 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET /search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url HTTP/1.1\r\n";
$out .= "User-Agent: $googleua\r\n";
$out .= "Host: $googlehost\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){} else{
$pr=substr($data, $pos + 9);
$pr=trim($pr);
$pr=str_replace("\n",'',$pr);
return $pr;
}
}
fclose($fp);
}
}
?>
Przykładowe użycie funkcji:
$adresURL = "onet.pl";
echo "Pagerank dla domeny <strong>$adresURL</strong> wynosi: ".getPagerank($adresURL);
?>
Aktualizacja: skrypt łączy się teraz przez host Google, posiada user agent.
Skrypt #2
Ponieważ powyższy kod obecnie nie działa, zamieszczam drugą funkcję która została przeze mnie sprawdzona.
* PageRank Lookup (Based on Google Toolbar for Mozilla Firefox)
*
* @copyright 2011 HM2K <hm2k@php.net>
* @link http://pagerank.phurix.net/
* @author James Wade <hm2k@php.net>
* @version $Revision: 2.0 $
* @require PHP 4.3.0 (file_get_contents)
* @updated 06/10/11
*/
function GetPageRank($q,$host='toolbarqueries.google.com',$context=NULL) {
$seed = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.";
$result = 0x01020345;
$len = strlen($q);
for ($i=0; $i<$len; $i++) {
$result ^= ord($seed{$i%strlen($seed)}) ^ ord($q{$i});
$result = (($result >> 23) & 0x1ff) | $result << 9;
}
$ch=sprintf('8%x', $result);
$url='http://%s/tbr?client=navclient-auto&ch=%s&features=Rank&q=info:%s';
$url=sprintf($url,$host,$ch,$q);
@$pr=file_get_contents($url,false,$context);
return $pr?substr(strrchr($pr, ':'), 1):false;
}
//Example usage:
if (isset($_GET['q'])) { echo GetPageRank($_GET['q']); }
//eof
Podobne porady
- Ubuntu: Klawisz Backspace nie działa w Mozilla Firefox
- Adres IP i HOST osoby odwiedzającej
- Efekt Marquee czyli przewijający się tekst
Komentarze (6)
-
Nawet fajne, tylko ja bym to wsadził do jakiejś klasy. I zmienił ten nagłówek przeglądarki, bo przedstawianie się jako FF 1.5 w dzisiejszych czasach...
-
Cześć - kod przestał działać (a było all ok). Przypuszczam, że adres strony (zew) jest nieaktualny?
Nie działa. Dla każdej strony generuje PR = -1. Fail.