Как проверить ТИЦ и PR из PHP
1.
XoPyC (12.07.2010 / 22:21)
Недавно столкнулся с задачей автоматизированной проверки показателей PR и ТИЦ из скрипта на PHP. Если с яндексом все оказалось на удивление просто, то с гуглом пришлось повозиться… При запросах к гуглу нужно вычислять по специальному алгоритму контрольную сумму от адреса проверяемой страницы. Если контрольная сумма неправильная – запрос не обрабатывается…
2.
XoPyC (12.07.2010 / 22:22)
Используются нижеприведенные скрипты таким образом:
<?php
//получить значение PageRank
$google = new GooglePR;
$googlepr = $google->getPagerank ($url);
//получить значение ТИЦ
$yandex = new YandexCY;
$yandexcy = $yandex->getCY ($url);
?>
3.
XoPyC (12.07.2010 / 22:22)
Переменная $url должна содержать урл страницы (или сайта для ТИЦ).
<?php
//Определение ТИЦ
class YandexCY
{
function getCY ($url)
{
$response = @file ("http://bar-navig.yandex.ru/u?ver=2&url=$url&show=1");
for ($i=0; $i<sizeof($response); $i++)
{
$num_found = preg_match('/value="(\d+)"/', $response[$i], $matches);
if ($num_found > 0) {
return $matches[1];
}
}
}
}
?>
4.
WCO (12.07.2010 / 22:24)
а гугльПр класс?
5.
XoPyC (12.07.2010 / 22:26)
<?php
//Определение PR
class GooglePR {
function checksum ($url, $length = null, $init = 0xE6359A60) {
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 = $this->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);
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 = $this->mix($a, $b, $c);
return $mix[2];
}
продолжение следует
6.
XoPyC (12.07.2010 / 22:26)
function mix ($a, $b, $c) {
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 13)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 8));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 13)));
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 12)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 16));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 5)));
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 3)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 10));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 15)));
return array($a,$b,$c);
}
function zero_fill ($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;
}
7.
XoPyC (12.07.2010 / 22:27)
function to_int_32 (&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}
function getPagerank ($full_url) {
$ch_url = "info:$full_url";
$checksum = $this->checksum($this->strord($ch_url));
$url = "http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$ch_url";
$data = @file_get_contents($url);
// Data is 'Rank_1:1:3', page rank is the last digit or '3'
preg_match('#Rank_[0-9]:[0-9]:( [0-9]+){1,}#si', $data, $p);
$value = @($p[1]) ? $p[1] : 0;
return $value;
}
function strord ($string) {
for($i = 0; $i < strlen($string); $i++) {
$result[$i] = ord($string{$i});
}
return $result;
}
}?>
8.
XoPyC (12.07.2010 / 22:28)
5,6,7 это один файл)))
URL:
https://visavi.net/topics/11493