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.

#1. PHP

W tym celu tworzymy plik pagerank.php, do którego wklejamy zamieszczony niżej kod:

<?php
//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.1rn";
  $out .= "User-Agent: $googleuarn";
  $out .= "Host: $googlehostrn";
  $out .= "Connection: Closernrn";
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:

<?php
$adresURL = "onet.pl";
echo "Pagerank dla domeny <strong>$adresURL</strong> wynosi: ".getPagerank($adresURL);
?>

Aktualizacja: skrypt łączy się teraz przez host Google, posiada user agent.

#2.1. PHP

Ponieważ powyższy kod obecnie nie działa, zamieszczam drugą funkcję.


<?php
/**
 * 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
?>
↑ Skocz do góry

Opublikowano: 20 maja 2010. Autor: Bartosz Stefanicki.
Tagi: , , , , .

Dodaj komentarz

6 komentarzy do "Skrypt obliczający Google Pagerank (PR)"

avatar
Sortuj wg:   najnowszy | najstarszy | oceniany
Bartosz Stefanicki
Gość

@Wiesław,

Dodałem 2 pkt. i nowy kod obliczania wartości PR.

Wiesław
Gość

Cześć - kod przestał działać (a było all ok). Przypuszczam, że adres strony (zew) jest nieaktualny?

Comandeer
Gość

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...

Bartosz Stefanicki
Gość

@Comandeer, zmieniłem nagłówek na Mozilla Firefox 3.6.

r9s
Gość

Nie działa. Dla każdej strony generuje PR = -1. Fail.

Bartosz Stefanicki
Gość

@r9s,
Skrypt działa na pewno - powodem tych błędów mogą być zabezpieczenia lub ustawienia PHP na serwerze, brak indeksacji serwisu w wyszukiwarce Google a nawet blokada IP.. Wstaw ten skrypt na inny serwer i zobacz czy działa.

wpDiscuz