Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Узнать тИЦ и PR


Автор: MegaRulez 30.7.2006, 19:06
Возможно ли при помощи php узнать тИЦ и PR сайта? 

Автор: kuhan 30.7.2006, 20:12
http://forum.dklab.ru/viewtopic.php?p=92128#92128 

Автор: MegaRulez 30.7.2006, 20:37
СПАСИБО БОЛЬШЕ!!! Очень выручил!!! 

Автор: Alone 1.8.2006, 12:52
ага, вот только бы еще гугль отдавал че нить по такому запросу.
а то видеть 403 форбидден как то не улыбает... smile

Автор: kuhan 1.8.2006, 15:20
Alone, не гони!
нормльно все работает, только что сам проверил

Автор: Alone 2.8.2006, 10:41
kuhan, не гоню.

Warning: file(http://www.google.com/search?client=navclient-auto&ch=6-2147364761&features=Rank&q=info:www.ibm.com): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /home/alone/public_html/gpr.php on line 87
PageRank:

А при попытке пойти по ссылке http://www.google.com/search?client=navclient-auto&ch=6-2147364761&features=Rank&q=info:www.ibm.com 

получаю:

Google     
Error
 

    Forbidden
    Your client does not have permission to get URL /search?client=navclient-auto&ch=6-2147364761&features=Rank&q=info:www.ibm.com from this server. (Client IP address: 195.24.128.84)

    Please see Google's Terms of Service posted at http://www.google.com/terms_of_service.html 

Автор: kuhan 2.8.2006, 11:19
Цитата(Alone @  2.8.2006,  10:41 Найти цитируемый пост)
http://www.google.com/search?client=navclient-auto&ch=6-2147364761&features=Rank&q=info:www.ibm.com


странно...
такой ссылки он вообще не мог выдать, там в переменной ch только цифры, и никаких минусов там быть не может

мне скрипт на www.ibm.com выдал: 
Код

PageRank: 9
 по ссылке: http://www.google.com/search?client=navclient-auto&ch=61830809081&features=Rank&q=info:www.ibm.com

и вообще этот код я на многих сайтах встречал, и на работоспособность никто не жаловался 

Автор: Alone 4.8.2006, 13:26
-2147364761 оказывается это мне функция возвращает... smile которая GoogleCH()

Автор: ST_Falcon 23.8.2006, 15:37
Alone, ты с локальной машины запускаешь?

Автор: Alone 24.8.2006, 15:57
А какая скрипту разница?
С сервака своего.

Автор: ST_Falcon 28.8.2006, 15:39
Alone, у меня с локального не тянуло. а на серваке нормально

Автор: Garret 16.9.2006, 12:11
Кстати Гугл и Яндекс могли бы уже и апишку сделать для получения ИЦ и ПР, чем им это навредит? А то не всегда получаеться получить нужные данные(соединение отпадает или еще что то). Для каких то серьезных целей метод с парсингом страницы не сильно катит smile 

Автор: IZ@TOP 22.9.2006, 15:47
Модератор: для тех кто в танке - не флудим товарищи и не ругаемся! Живем мирно и дружно!

Автор: coyl 27.1.2007, 00:02
Цитата(Garret @  16.9.2006,  12:11 Найти цитируемый пост)
Кстати Гугл и Яндекс могли бы уже и апишку сделать для получения ИЦ и ПР

У яндекса давно есть такая апишка, а вот гугл почему-то скрывает ПР и поэтому сделал эту контрольную сумму,которая в скрипте и вычисляется.

Автор: AztEK 27.1.2007, 09:43
Недавно нашел сервис http://cy-pr.net.ru/ - довольно удобно.

Автор: coyl 28.1.2007, 16:33
Цитата(AztEK @  27.1.2007,  09:43 Найти цитируемый пост)
сервис http://cy-pr.net.ru/ - довольно удобно. 

но для самостоятельного продукта неприемлимо

Автор: AztEK 29.1.2007, 13:51
Цитата(coyl @  28.1.2007,  19:33 Найти цитируемый пост)
но для самостоятельного продукта неприемлимо

не спорю smile просто это легко и быстро

Автор: soloweb 9.2.2007, 22:34
Функция выдаст вам результат тица в виде цифр.
Код

<?php

    function getYandexTic($url)
        {
            
            $xml='http://bar-navig.yandex.ru/u?ver=2&lang=1049&url='.$url.'&target=_No__Name:5&show=1&thc=0';            
            $obj=new DOMDocument();            
            $obj->load($xml);            
            $urlinfo=$obj->childNodes;
            foreach ($urlinfo as $url)
            {
                $nodes=$url->childNodes;
                
                foreach ($nodes as $node)
                {                
                    if($node->nodeName=='tcy')
                    {                        
                        $attributes=$node->attributes;
                        foreach ($attributes as $atribut)
                        {                            
                            if($atribut->name=='value')
                            {
                                $tic=$atribut->value;
                            }                            
                        }                    
                }                    
                    
            }    
            
        }            
            return $tic;
    }
?>

Автор: Levsha 10.6.2007, 10:06
Продолжаю по поводу Page Rank.
Задача узнать вышеупомянутый средствами PHP. Есть для этого старый удобный код:
Код

<?php

define('GOOGLE_MAGIC', 0xE6359A60);

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;
}


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);
}

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)              /* all the case statements fall through */
    {
        case 11: $c+=($url[$k+10]<<24);
        case 10: $c+=($url[$k+9]<<16);
        case 9 : $c+=($url[$k+8]<<8);
          /* the first byte of c is reserved for the 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]);
         /* case 0: nothing left to add */
    }
    $mix = mix($a,$b,$c);
    return $mix[2];
}

function strord($string) {
    for($i=0;$i<strlen($string);$i++) {
        $result[$i] = ord($string{$i});
    }
    return $result;
}

function getrank($url) {
$url = 'info:'.$url;
$ch = GoogleCH(strord($url));
$file = "http://www.google.com/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url";
$data = file($file);

$rankarray = explode (':', $data[2]);
$rank = $rankarray[2];
return $rank;
}

echo 'PageRank: '.getrank($url);

?>

Он хорош, но зависит от платформы. Разобрав его по кусочкам выяснил, что операция "$a = $b ^ $c" на разных системах работает по разному. Точнее это происходит при использовании больших и/или отрицательных чисел. Я пытался на это жаловаться http://forum.vingrad.ru/forum/topic-155417.html. Итак может кто-нибудь предложить другой способ добывания PageRank ? Или другой вариант подсчетов ключа (без '^')

Автор: Levsha 10.6.2007, 10:36
Спасибо всем, кто не успел поучавствовать smile 
Меня выручил следующий код код
Код

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;
}

function GPR_toHex8($intega){
        $Ziffer = "0123456789abcdef";
        return $Ziffer[($intega%256)/16].$Ziffer[$intega%16];
}

function GPR_hexEncodeU32($num) {
        $result = GPR_toHex8(zeroFill($num,24));
        $result .= GPR_toHex8(zeroFill($num,16) & 255);
        $result .= GPR_toHex8(zeroFill($num,8) & 255);
        return $result . GPR_toHex8($num & 255);
}


function GPR_awesomeHash($value) {
        $GPR_HASH_SEED = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.";
        $kindOfThingAnIdiotWouldHaveOnHisLuggage = 16909125;
        for($i = 0; $i < strlen($value); $i++ ) {
                $kindOfThingAnIdiotWouldHaveOnHisLuggage ^= ord(substr($GPR_HASH_SEED, $i % strlen($GPR_HASH_SEED),1)) ^ ord(substr($value, $i,1));
                $kindOfThingAnIdiotWouldHaveOnHisLuggage = zeroFill($kindOfThingAnIdiotWouldHaveOnHisLuggage,23) | $kindOfThingAnIdiotWouldHaveOnHisLuggage << 9;
        }
        return '8'.GPR_hexEncodeU32($kindOfThingAnIdiotWouldHaveOnHisLuggage);
}

function getrank($url) {
        $ch = GPR_awesomeHash($url);
        $file = "http://toolbarqueries.google.com/search?client=navclient-auto&features=Rank&ch=$ch&q=info:$url";
        $data = file($file);

        $rankarray = explode (':', $data[2]);
        $rank = $rankarray[2];
        if (!$rank) $rank=0;
        return $rank;
}


Хотя если у кого и этот не заработает, пишите, прорвемся smile 

Автор: teroni 10.6.2007, 12:14
Не знаю почему, но в 42-й строчке $rankarray = explode (':', $data[2]); надо менять на $rankarray = explode (':', $data[0]);

Для несуществующих или неизвестных хостов вместо нуля выдаёт либо 403 ошибку, либо пустой массив $data. Для нормальных сайтов вроде не врет!

Автор: Levsha 11.6.2007, 01:45
Цитата(teroni @  10.6.2007,  12:14 Найти цитируемый пост)
надо менять на $rankarray = explode (':', $data[0]);

Да кстати, иой косяк, забыл упомянуть...

Цитата(teroni @  10.6.2007,  12:14 Найти цитируемый пост)
Для несуществующих или неизвестных хостов вместо нуля выдаёт либо 403 ошибку, либо пустой массив

Вот кстати по теме, подскажите товарищи, как получить какую ошибку вернул сервер, не только 404, а и остальные, типа 302, 403 и т.д. (не используя curl) smile 
Давно задаюсь этим вопросом, хочу подусовершенствовать скрипт.

Автор: teroni 11.6.2007, 10:36
http://scripts.incutio.com/httpclient/ - неплохая штука, через сокеты работает, посмотри.

Автор: Levsha 11.6.2007, 19:18
teroni, ух, немаленький класс. Скачал, изучу, отпишусь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)