Скрипт получения PageRank произвольной страницы
Прислано Alipapa November 26 2011 14:31:32
Привожу код скрипта на PHP, выводящего PR заданной веб-странцы. Его можно встроить в какой-либо информер, выводящий информацию о сайте (конечно, позаботиться о получении веб-адреса страницы - например, использовав суперглобальный массив $_SERVER):
<?php
class PageRankGrabber {
public function getRank($url) {
$pageUrl = $this->getRankUrlStingByPageUrl($url);
$content = $this->getContentCurl($pageUrl);
$parts = explode(":", $content);
return intval(@$parts[count($parts)-1]);
}
public function getContentCurl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
public function getRankUrlStingByPageUrl($page) {
$this->awesomeHash($page);
$hash = "8" . $this->awesomeHash($page);
// Следующее выражение содержит строку запроса, которая иногда меняется. Поэтому, если скрипт перестанет выдавать правильные значения, причину ищите здесь в первую очередь (смотрите новости, связанные с google toolbar):
$url = "http://toolbarqueries.google.com/tbr?sourceid=" .
"navclient-ff&features=Rank&client=navclient-auto-ff&";
$url .= "ch=" . $hash . "&q=info:" . urlencode($page);
return str_replace(' ', '', $url);
}
private function toHex8($num) {
$vector = "0123456789abcdef";
return $vector[($num % 256) / 16] . $vector[$num % 16];
}
private function hexEncodeU32($num) {
$result = $this->toHex8($this->zerofillShift($num, 24));
$result .= $this->toHex8($this->zerofillShift($num, 16) & 255);
$result .= $this->toHex8($this->zerofillShift($num, 8) & 255);
return $result . $this->toHex8($num & 255);
}
private function awesomeHash($value) {
$hashSeed = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE." .
"Yes, I'm talking to you, scammer.";
$intValue = 16909125;
for($i = 0; $i < strlen($value); $i++ ){
$intValue ^=
$this->charCodeAt($hashSeed, $i % strlen($hashSeed)) ^
$this->charCodeAt($value, $i);
$intValue =
$this->zerofillShift($intValue, 23) | $intValue << 9;
}
return $this->hexEncodeU32($intValue);
}
private function charCodeAt($value, $position) {
$symbol = $value[$position];
return ord($symbol);
}
private function zerofillShift($a, $b) {
$z = hexdec(80000000);
if ($z & $a) {
$a = ($a >> 1);
$a &= (~$z);
$a |= 0x40000000;
$a = ($a >> ($b-1));
} else {
$a = ($a >> $b);
}
return $a;
}
}
$obj = new PageRankGrabber();
$rank = $obj->getRank('http://tagilsv.ru/news.php?readmore=31'); //сюда подставьте адрес интересующей веб-страницы
echo $rank;
?>
copyright © 2010