PDA

Просмотр полной версии : О контрольной сумме Google


Adm
24.01.2008, 09:38
Люди!
Объясните мне - кто такая Google CheckSum (только не надо писать, что "это то, что стоит после 'ch=' в адресе...") и как ее вычислить, зная URL?

Oshparenniy
24.01.2008, 11:34
Ой, а где ето явление можно понабдюдать? куда заходить то?

Adm
24.01.2008, 14:05
Ой, а где ето явление можно понабдюдать? куда заходить то?

Наблюдать можно в скриптах для подсчета PR. У меня даже есть такой скриптик, но в пхп разбираюсь как свинья - в апельсинах и перевести то, что там написано, не могу :(

Oshparenniy
24.01.2008, 14:17
Наблюдать можно в скриптах для подсчета PR. У меня даже есть такой скриптик, но в пхп разбираюсь как свинья - в апельсинах и перевести то, что там написано, не могу :(
Так елки-моталки, кидай этот скриптик сюда...

Adm
24.01.2008, 14:42
Так елки-моталки, кидай этот скриптик сюда...
<html>
<head>
<title>Определение ТИЦ и PR интересуемого Интернет-ресурса</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<meta http-equiv="content-language" content="ru">
</head>

<body bgcolor="darkseagreen" color="black">

<?php
if ($action == "exec")
{
// Определяем константу GOOGLE_MAGIC
define('GOOGLE_MAGIC', 0xE6359A60);

// Удаляем "www." из $url
$url = str_replace("www.", "", $_REQUEST['url']);

/* 1. Функции для определения ТИЦ */

//
// Функция, определяющая значение тематического индекса цитирования (ТИЦ) Яндекса
//
// Входные данные:
// $url - адрес страницы, ТИЦ которой требуется определить
//
// Выходные данные:
// $ci[1] - значение ТИЦ для страницы $url
//
function getCI($url)
{
$url = str_replace("www.", "", $url);
$ci_url = "http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.".$url."/";
$ci_data = implode("", file("$ci_url"));
preg_match("/value=\"(.\d*)\"/", $ci_data, $ci);

if ($ci[1] == "")
return 0; // Если не смогли определить ТИЦ...
else
return $ci[1]; // Вот оно счастье...
}
/* 2. Функции для определения PR */

//
// Функция, выполняющая беззнаковый сдвиг вправо
//
// Входные данные:
// $a - переменная, подвергаемая сдвигу
// $b - величина сдвига
//
// Выходные данные:
// $a - результат выполнения сдвига
//
function zeroFill($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;
}

// Функция используется при вычислении Google Checksum (см. ниже)
function mix($a, $b, $c)
{
$a -= $b;
$a -= $c;
$a ^= (zeroFill($c, 13));

$b -= $c;
$b -= $a;
$b ^= ($a << 8);

$c -= $a;
$c -= $b;
$c ^= (zeroFill($b, 13));

$a -= $b;
$a -= $c;
$a ^= (zeroFill($c, 12));

$b -= $c;
$b -= $a;
$b ^= ($a << 16);

$c -= $a;
$c -= $b;
$c ^= (zeroFill($b, 5));

$a -= $b;
$a -= $c;
$a ^= (zeroFill($c, 3));

$b -= $c;
$b -= $a;
$b ^= ($a << 10);

$c -= $a;
$c -= $b;
$c ^= (zeroFill($b, 15));

return array($a, $b, $c);
}

//
// Функция, вычисляющая Google Checksum (контрольную сумму Google)
//
// Входные данные:
// $url - URL, для которого требуется определить Google Checksum
// $length - длина строки $url (по умолчанию - null, вычисляется в функции)
// $init - "волшебное" число
//
// Выходные данные:
// $mix[2] - значение Google Checksum для заданного адреса $url
//
function GoogleCH($url, $length = null, $init = GOOGLE_MAGIC)
{
if (is_null($length))
{
$length = sizeof($url);
}

$a = $b = 0x9E3779B9;
$c = $init;
$k = 0;
$len = $length;

while($len >= 12)
{
$a += ($url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24));
$b += ($url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] << 24));
$c += ($url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] << 24));
$mix = mix($a, $b, $c);
$a = $mix[0];
$b = $mix[1];
$c = $mix[2];
$k += 12;
$len -= 12;
}

$c += $length;

switch ($len)
{
case 11: $c += ($url[$k + 10] << 24);
case 10: $c += ($url[$k + 9] << 16);
case 9 : $c += ($url[$k + 8] << 8);
// Первый байт $c зарезервирован для значения $length
case 8 : $b += ($url[$k + 7] << 24);
case 7 : $b += ($url[$k + 6] << 16);
case 6 : $b += ($url[$k + 5] << 8);
case 5 : $b += ($url[$k + 4]);
case 4 : $a += ($url[$k + 3] << 24);
case 3 : $a += ($url[$k + 2] << 16);
case 2 : $a += ($url[$k + 1] << 8);
case 1 : $a += ($url[$k + 0]);
}

$mix = mix($a, $b, $c);

return $mix[2];
}

//
// Функция, преобразующая строку в массив целых чисел, содержащий числовые
// значения каждого символа преобразуемой строки<br/> //
// Входные данные:
// $string - преобразуемая строка
//
// Выходные данные:
// $result - массив целых чисел, содержащий числовые значения каждого
// символа строки $string
//
function strord($string)
{
for ($i = 0; $i < strlen($string); $i++)
{
$result[$i] = ord($string{$i});
}
return $result;
}

//
// Функция, определяющая значение Google PageRank (PR)
//
// Входные данные:
// $url - адрес страницы, PageRank которой требуется определить
// $prefix - тип получаемых сведений (в данном примере получаем
// сведения Google Toolbar - $prefix = "info:")
// $datacenter - сервер, с которого требуется получить сведения (по
// умолчанию - www.google.com)
//
// Выходные данные:
// $rank - значение PageRank для страницы $url
//
function getrank($url, $prefix = "info:", $datacenter = "www.google.com")
{
$url = $prefix.$url;
$ch = GoogleCH(strord($url)); // Вычисляем Google Checksum
$file = "http://$datacenter/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url";

// Примечание: для получения детализированного результата запроса (в XML
// формате) требуется убрать "&features=Rank"; обработка подобного результата
// существенно отличается от рассматриваемой обработки результата запроса
// и в данном скрипте не рассматривается

$olderrorlevel = error_reporting(0); // Временно приостанавливаем выдачу сообщений об ошибках
$data = file($file);
error_reporting($olderrorlevel); // Устанавливаем предыдущий уровень сообщений об ошибках
// Если $data не содержит данных Google или введен неверный URL
// Примечание: здесь функция preg_match выполняет роль простого средства,
// проверяющего URL на корректность
if (!$data || preg_match("/(.*)\.(.*)/i", $url) == 0)
return "Нет данных";

$rankarray = explode(':', $data[2]); // Две строчки отделяют значение Google PageRank
$rank = trim($rankarray[2]); // Удаляем ненужные пробелы и символы новой строки
// Если не удалось определить PageRank
if ($rank == "")
return "Нет данных";

return $rank; // Вот оно счастье...
}
?>
PageRank: <?php echo getrank($url); ?><br>
ТИЦ: <?php echo getCI($url); ?><br>
<?php
}
?>
<br><br>
<form method="post" action="pr.php?action=exec">
Введите адрес (например, <b>yandex.ru</b> или <b>google.ru</b>):<br>
<input style="width: 200px;" type="text" name="url"><br>
<input style="width: 200px;" type="submit" value="Определение ТИЦ и PR"><br>
</form>
</body>

</html>

Можешь объяснить, что происходит в этих двух функциях?

mik-a-el
25.01.2008, 11:46
Контрольная сумма используется для получения данных о PageRank страницы.

Adm
25.01.2008, 11:58
Контрольная сумма используется для получения данных о PageRank страницы.

Для чего она используется я знаю.

Nemo
25.01.2008, 13:13
и как ее вычислить, зная URL?

http://tumanov.com/projects/scriptlets/googlepagerankchecksum.asp

Adm
25.01.2008, 13:21
http://tumanov.com/projects/scriptlets/googlepagerankchecksum.asp

Спасибо! С этим уже разберусь!

Rambler's Top100