Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать тИЦ и PR, ...с помощью пхп... 
:(
    Опции темы
coyl
Дата 28.1.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



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

но для самостоятельного продукта неприемлимо
PM MAIL   Вверх
AztEK
Дата 29.1.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



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

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


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
soloweb
Дата 9.2.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Georgian
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 30.10.2006

Репутация: нет
Всего: нет



Функция выдаст вам результат тица в виде цифр.
Код

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

PM MAIL WWW ICQ   Вверх
Levsha
Дата 10.6.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



Продолжаю по поводу 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" на разных системах работает по разному. Точнее это происходит при использовании больших и/или отрицательных чисел. Я пытался на это жаловаться здесь. Итак может кто-нибудь предложить другой способ добывания PageRank ? Или другой вариант подсчетов ключа (без '^')


--------------------
PM   Вверх
Levsha
Дата 10.6.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



Спасибо всем, кто не успел поучавствовать 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 


--------------------
PM   Вверх
teroni
Дата 10.6.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 1
Всего: 22



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

Для несуществующих или неизвестных хостов вместо нуля выдаёт либо 403 ошибку, либо пустой массив $data. Для нормальных сайтов вроде не врет!
PM MAIL   Вверх
Levsha
Дата 11.6.2007, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



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

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

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

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


--------------------
PM   Вверх
teroni
Дата 11.6.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 1
Всего: 22



http://scripts.incutio.com/httpclient/ - неплохая штука, через сокеты работает, посмотри.
PM MAIL   Вверх
Levsha
Дата 11.6.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



teroni, ух, немаленький класс. Скачал, изучу, отпишусь.


--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0989 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.