За последние 24 часа нас посетили 52527 программистов и 1483 робота. Сейчас ищут 1224 программиста ...

PR, узнать кол-во от первоисточника

Тема в разделе "Прочее", создана пользователем .50, 19 авг 2008.

  1. .50

    .50 Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    136
    Симпатии:
    0
    Адрес:
    СПб
    Не думал, что придется когда-нибудь писать такую шняжку... Вообще надо на неком сайте через форму узнавать PR.

    Кто-нибудь знает, если ли сервис на подобие http://search.yaca.yandex.ru/yca/cy/ch/php.ru/ , но только от гугла. Вообще как можно узнать RP не юзая гуглбар? Есть мысли?
     
  2. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Посмотреть как гуглбар узнает PR и сделать аналогично
     
  3. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    вся сложность получения информации по ПР от гугла состоит в том, что в ссылке передается контрольная сумма, расчитываемая с участием урла.
    когда то давно часть тасчета этой проверки выглядело так:
    Код (Text):
    1. function GoogleChecksum(Value: TDynByteArray): Integer;
    2. const
    3.   GOOGLE_MAGIC = $E6359A60;
    4. var
    5.   I: Integer;
    6.   A, B, C, K, Len: Integer;
    7. begin
    8.   A := $9E3779B9;
    9.   B := $9E3779B9;
    10.   C := GOOGLE_MAGIC;
    11.   K := 0;
    12.   Len := Length(Value);
    13.   while Len >= 12 do
    14.   begin
    15.     A := AddEx(A,
    16.       AddEx(Value[k],
    17.       AddEx((Value[k + 1] shl 8),
    18.       AddEx((Value[k + 2] shl 16),
    19.       (Value[k + 3] shl 24)))));
    20.     B := AddEx(B,
    21.       AddEx(Value[k + 4],
    22.       AddEx((Value[k + 5] shl 8),
    23.       AddEx((Value[k + 6] shl 16),
    24.       (Value[k + 7] shl 24)))));
    25.     C := AddEx(C,
    26.       AddEx(Value[k + 8],
    27.       AddEx((Value[k + 9] shl 8),
    28.       AddEx((Value[k + 10] shl 16),
    29.       (Value[k + 11] shl 24)))));
    30.     Mix(A, B, C);
    31.     Inc(K, 12);
    32.     Dec(Len, 12);
    33.   end;
    34.   C := AddEx(C, Length(Value));
    35.   if Len > 10 then
    36.     C := AddEx(C, Value[K + 10] shl 24);
    37.   if Len > 9 then
    38.     C := AddEx(C, Value[K + 9] shl 16);
    39.   if Len > 8 then
    40.     C := AddEx(C, Value[K + 8] shl 8);
    41.   if Len > 7 then
    42.     B := AddEx(B, Value[K + 7] shl 24);
    43.   if Len > 6 then
    44.     B := AddEx(B, Value[K + 6] shl 16);
    45.   if Len > 5 then
    46.     B := AddEx(B, Value[K + 5] shl 8);
    47.   if Len > 4 then
    48.     B := AddEx(B, Value[K + 4]);
    49.   if Len > 3 then
    50.     A := AddEx(A, Value[K + 3] shl 24);
    51.   if Len > 2 then
    52.     A := AddEx(A, Value[K + 2] shl 16);
    53.   if Len > 1 then
    54.     A := AddEx(A, Value[K + 1] shl 8);
    55.   if Len > 0 then
    56.     A := AddEx(A, Value[K]);
    57.  
    58.   Mix(A, B, C);
    59.   Result := C;
    60. end;
    не страшно? :)
    а вот сейчас они что то там изменили, и лень заново все выковаривать...
     
  4. NOmeR1

    NOmeR1 Активный пользователь

    С нами с:
    11 май 2008
    Сообщения:
    97
    Симпатии:
    0
    PHP:
    1. <?php
    2.     function zeroFill($a, $b) {
    3.         $z = hexdec(80000000);
    4.         if ($z & $a) {
    5.             $a = ($a>>1);
    6.             $a &= (~$z);
    7.             $a |= 0x40000000;
    8.             $a = ($a>>($b-1));
    9.         } else {
    10.             $a = ($a>>$b);
    11.         }
    12.         return $a;
    13.     }
    14.     function mix($a,$b,$c) {
    15.         $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
    16.         $b -= $c; $b -= $a; $b ^= ($a<<8);
    17.         $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
    18.         $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
    19.         $b -= $c; $b -= $a; $b ^= ($a<<16);
    20.         $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
    21.         $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
    22.         $b -= $c; $b -= $a; $b ^= ($a<<10);
    23.         $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
    24.         return array($a,$b,$c);
    25.     }
    26.     function GoogleCH($url, $length=null, $init=0xE6359A60) {
    27.         if(is_null($length)) {
    28.             $length = sizeof($url);
    29.         }
    30.         $a = $b = 0x9E3779B9;
    31.         $c = $init;
    32.         $k = 0;
    33.         $len = $length;
    34.         while($len >= 12) {
    35.             $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
    36.             $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
    37.             $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
    38.             $mix = mix($a,$b,$c);
    39.             $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
    40.             $k += 12;
    41.             $len -= 12;
    42.         }
    43.         $c += $length;
    44.         switch($len) {
    45.             case 11: $c+=($url[$k+10]<<24);
    46.             case 10: $c+=($url[$k+9]<<16);
    47.             case 9 : $c+=($url[$k+8]<<8);
    48.             case 8 : $b+=($url[$k+7]<<24);
    49.             case 7 : $b+=($url[$k+6]<<16);
    50.             case 6 : $b+=($url[$k+5]<<8);
    51.             case 5 : $b+=($url[$k+4]);
    52.             case 4 : $a+=($url[$k+3]<<24);
    53.             case 3 : $a+=($url[$k+2]<<16);
    54.             case 2 : $a+=($url[$k+1]<<8);
    55.             case 1 : $a+=($url[$k+0]);
    56.         }
    57.         $mix = mix($a,$b,$c);
    58.         return $mix[2];
    59.     }
    60.     function strord($string) {
    61.         for($i=0;$i<strlen($string);$i++) {
    62.             $result[$i] = ord($string{$i});
    63.         }
    64.         return $result;
    65.     }
    66.     function get_pr($url) {
    67.         $result=array("",-1);
    68.         if(($url.""!="")&&($url.""!="http://")):
    69.             if(substr(strtolower($url),0,7)!="http://"):
    70.                 $url="http://".$url;
    71.             endif;
    72.             $url="info:".$url;
    73.             $checksum=GoogleCH(strord($url));
    74.             $google_url=sprintf("http://www.google.com/search?client=navclient-auto&ch=6%u&features=Rank&q=".$url,$checksum);
    75.             $contents = file_get_contents($google_url);
    76.             $p=explode(":",$contents);
    77.             if(isset($p[2])):
    78.                 $result[1]=$p[2];
    79.             endif;
    80.         endif;
    81.         return $result;
    82.     }
    83.     function getPR_url($url) {
    84.         global $db;
    85.         if(eregi('^http://www.',$url)) {
    86.             $url_www = str_replace('http://www.','http://',$url);
    87.         } else {
    88.             $url_www = str_replace('http://','http://www.',$url);
    89.         }
    90.         $pr=get_pr($url);
    91.         $output=$pr[0];
    92.         $pagerank=$pr[1];
    93.         sleep(1);
    94.         $pr=get_pr($url_www);
    95.         $output_www=$pr[0];
    96.         $pagerank_www=$pr[1];
    97.         if($pagerank<$pagerank_www) {
    98.             $pagerank=$pagerank_www;
    99.         }
    100.         if($pagerank==-1) {
    101.             $pagerank=0;
    102.         }
    103.         return intval($pagerank);
    104.     }
    105.     echo getPR_url('www.google.com');
    106. ?>
    Кто написал код - хз.
     
  5. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    вот фак, а я инженерил %)
     
  6. .50

    .50 Активный пользователь

    С нами с:
    7 июн 2006
    Сообщения:
    136
    Симпатии:
    0
    Адрес:
    СПб
    Спасибо за варианты.

    Дополню кодом, как узнать тИЦ, автор Жилинский Владимир.

    PHP:
    1.  
    2. <?php
    3.  
    4. function yandex_tic($url){
    5.         $file=file_get_contents("http://search.yaca.yandex.ru/yca/cy/ch/$url/");
    6. if(preg_match("!—\s+([0-9]{0,8})<\/b>!is",$file,$ok)){
    7.    
    8.             $str=$ok[1];
    9.         }
    10.         else if(preg_match("!<td class=\"current\" valign=\"middle\">(.*?)</td>\n</tr>!si", $file, $ok)){
    11.                 if(preg_match("!<td align=\"right\">(.*?)</td>\n</tr>!si", $ok[0], $str)){
    12.            
    13.                     $str=$str[1];
    14.                 } else {
    15.                     $str=0;
    16.                 }
    17.         }
    18.         else {
    19.             $str=0;
    20.         }
    21.  
    22. return trim($str);
    23. }
    24.  
    25. echo yandex_tic("ya.ru")
    26.  
    27.  
    Не юзал. Но если даже не работает, суть, как можно сделать, на ладони.
     
  7. ValaR

    ValaR Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    196
    Симпатии:
    0
    Адрес:
    Челябинск
    http://pr-cy.ru - Один из сервисов для узнавания тИЦ и PR. Вообще дата центров полно, около 70 штук более менее надежных, списки надо искать на SEO-форумах. И выложу тоже свой скрипт определения PR (им со мной любезно поделился один из участников форума, не помню кто):

    Код (Text):
    1.  
    2. //Получения PageRank
    3. $pr = get_pr($website);
    4.  
    5.  
    6. function ($Str, $Check, $Magic)
    7. {
    8.     $Int32Unit = 4294967296;  // 2^32
    9.  
    10.     $length = strlen($Str);
    11.     for ($i = 0; $i < $length; $i++) {
    12.         $Check *= $Magic;    
    13.         //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
    14.         //  the result of converting to integer is undefined
    15.         //  refer to http://www.php.net/manual/en/language.types.integer.php
    16.         if ($Check >= $Int32Unit) {
    17.             $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
    18.             //if the check less than -2^31
    19.             $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
    20.         }
    21.         $Check += ord($Str{$i});
    22.     }
    23.     return $Check;
    24. }
    25.  
    26. /*
    27.  * Genearate a hash for a url
    28.  */
    29. function HashURL($String)
    30. {
    31.     $Check1 = StrToNum($String, 0x1505, 0x21);
    32.     $Check2 = StrToNum($String, 0, 0x1003F);
    33.  
    34.     $Check1 >>= 2;    
    35.     $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    36.     $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    37.     $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);    
    38.    
    39.     $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
    40.     $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
    41.    
    42.     return ($T1 | $T2);
    43. }
    44.  
    45. /*
    46.  * genearate a checksum for the hash string
    47.  */
    48. function CheckHash($Hashnum)
    49. {
    50.     $CheckByte = 0;
    51.     $Flag = 0;
    52.  
    53.     $HashStr = sprintf('%u', $Hashnum) ;
    54.     $length = strlen($HashStr);
    55.    
    56.     for ($i = $length - 1;  $i >= 0;  $i --) {
    57.         $Re = $HashStr{$i};
    58.         if (1 === ($Flag % 2)) {              
    59.             $Re += $Re;      
    60.             $Re = (int)($Re / 10) + ($Re % 10);
    61.         }
    62.         $CheckByte += $Re;
    63.         $Flag ++;    
    64.     }
    65.  
    66.     $CheckByte %= 10;
    67.     if (0 !== $CheckByte) {
    68.         $CheckByte = 10 - $CheckByte;
    69.         if (1 === ($Flag % 2) ) {
    70.             if (1 === ($CheckByte % 2)) {
    71.                 $CheckByte += 9;
    72.             }
    73.             $CheckByte >>= 1;
    74.         }
    75.     }
    76.  
    77.     return '7'.$CheckByte.$HashStr;
    78. }
    79.  
    80. function get_pr($href)
    81. {
    82.    global $prs;
    83.    if (isset($prs[$href]))
    84.       return $prs[$href];
    85.    elseif (strpos($href, '&') !== false)
    86.       return $prs[$href] = 0;
    87.    // Берём PR
    88.    $tq_servers = array('72.14.221.99', '72.14.221.100', '72.14.221.101', '72.14.221.102', '64.233.161.19', '64.233.161.99', '64.233.163.189', '64.233.171.44', '64.233.171.101', '64.233.183.99', '64.233.183.147', '64.233.185.19', '64.233.185.84', '64.233.185.133', '66.102.9.107', '66.102.11.115', '66.249.81.84', '66.249.81.101', '66.249.89.83', '72.14.203.19', '72.14.205.44', '72.14.207.19', '72.14.209.104', '209.85.143.84', '216.239.59.17', '216.239.59.81');
    89.    $url = 'http://'.$tq_servers[array_rand($tq_servers)].'/search?client=navclient-auto&ch='.CheckHash(HashURL($href)).'&features=Rank:&q=info:'.$href;
    90.    $success = false;
    91.    $counter = 0;
    92.    while ($success == false)
    93.    {
    94.       if ($counter == 15) return $prs[$href] = 0;
    95.       $counter ++;
    96.       $php_errormsg = '';
    97.       $text = file_get_contents($url);
    98.       if (!isset($php_errormsg)) $php_errormsg = '';
    99.       if (strpos($php_errormsg, 'HTTP/1.0 403') !== false)
    100.          $text = 'Rank_1:1:0';
    101.       if ($text != "")
    102.          $success = true;
    103.       $php_errormsg = '';
    104.    }
    105.    $text = str_replace(array("\n", "\r"), '', $text);
    106.    preg_match("|Rank_[0-9]+\:[0-9]+\:([0-9]+)|i", $text, $matches2);
    107.    $prs[$href] = intval($matches2[1]);
    108.    return intval($matches2[1]);
    109. }
    Но при этом, вроде, любой скрипт определения PR имеют какой-то процент ошибки.
     
  8. ValaR

    ValaR Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    196
    Симпатии:
    0
    Адрес:
    Челябинск
    Так себе скрипт, траффика будет жрать нехило, лучше через bar-nagiv.yandex.ru

    Помоему, этот будет побыстрее:
    Код (Text):
    1. function get_cy($href)
    2. {
    3.    $url = 'http://bar-navig.yandex.ru/u?ver=3&show=3&url=' . $href;
    4.    $text = file_get_contents($url);
    5.    preg_match("/<tcy rang="[0-9]" value="([0-9]+)/", $text, $matches2);
    6.    return $matches2[1];  
    7. }