Определение Google PageRank

Тема в разделе 'Библиотеки, классы', создана пользователем Admin, 18 май 2011.

  1. Admin Админ

    Описание: данный PHP класс позволяет узнать и вывести SEO параметр - Google PageRank
    Автор: David Walsh

    Код:
    PHP:

    class GooglePageRankChecker {

        private static 
    $instance;

        function 
    getRank($page) {

            if(!isset(
    self::$instance)) {
                
    self::$instance = new self();
            }
            
    // Результат
            
    return self::$instance->check($page);
        }

        
    // Конвертируем строку в число
        
    function stringToNumber($string,$check,$magic) {
            
    $int32 4294967296;  // 2^32
            
    $length strlen($string);
            for (
    $i 0$i &lt$length$i++) {
                
    $check *= $magic;
                if(
    $check >= $int32) {
                    
    $check = ($check $int32 * (int) ($check $int32));
                    
    //if the check less than -2^31
                    
    $check = ($check < -($int32 2)) ? ($check $int32) : $check;
                }
                
    $check += ord($string{$i});
            }
            return 
    $check;
        }

        
    // Создаем url hash
        
    function createHash($string) {
            
    $check1 $this->stringToNumber($string0x15050x21);
            
    $check2 $this->stringToNumber($string00x1003F);

            
    $factor 4;
            
    $halfFactor $factor/2;

            
    $check1 >>= $halfFactor;
            
    $check1 = (($check1 >&gt$factor) &amp0x3FFFFC0 ) | ($check1 &amp0x3F);
            
    $check1 = (($check1 >&gt$factor) &amp0x3FFC00 ) | ($check1 &amp0x3FF);
            
    $check1 = (($check1 >&gt$factor) &amp0x3C000 ) | ($check1 &amp0x3FFF);

            
    $calc1 = (((($check1 &amp0x3C0) <&lt$factor) | ($check1 &amp0x3C)) <&lt$halfFactor ) | ($check2 &amp0xF0F );
            
    $calc2 = (((($check1 &amp0xFFFFC000) <&lt$factor) | ($check1 &amp0x3C00)) <&lt0xA) | ($check2 &amp0xF0F0000 );

            return (
    $calc1 $calc2);
        }

        
    // Create checksum for hash
        
    function checkHash($hashNumber)
        {
            
    $check 0;
            
    $flag 0;

            
    $hashString sprintf('%u'$hashNumber) ;
            
    $length strlen($hashString);

            for (
    $i $length 1;  $i >= 0;  $i --) {
                
    $r $hashString{$i};
                if(
    === ($flag 2)) {
                    
    $r += $r;
                    
    $r = (int)($r 10) + ($r 10);
                }
                
    $check += $r;
                
    $flag ++;
            }

            
    $check %= 10;
            if(
    !== $check) {
                
    $check 10 $check;
                if(
    === ($flag 2) ) {
                    if(
    === ($check 2)) {
                        
    $check += 9;
                    }
                    
    $check >>= 1;
                }
            }

            return 
    '7'.$check.$hashString;
        }

        function 
    check($page) {

            
    $socket fsockopen("toolbarqueries.google.com"80$errno$errstr30);

            
    // Если соединение установлено
            
    if($socket) {

                
    $out "GET /search?client=navclient-auto&ch=".$this->checkHash($this->createHash($page))."&features=Rank&q=info:".$page."&num=100&filter=0 HTTP/1.1\r\n";
                
    $out .= "Host: toolbarqueries.google.com\r\n";
                
    $out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n";
                
    $out .= "Connection: Close\r\n\r\n";

                
    // Запись настроек в сокет
                
    fwrite($socket$out);

                
    // При получении ответа...
                
    $result "";
                while(!
    feof($socket)) {
                    
    $data fgets($socket128);
                    
    $pos strpos($data"Rank_");
                    if(
    $pos !== false){
                        
    $pagerank substr($data$pos 9);
                        
    $result += $pagerank;
                    }
                }
                
    // Закрываем соединение
                
    fclose($socket);

                
    // Возврат PageRank
                
    return $result;
            }
        }
    }
    Пример, будет возвращено число 0:
    PHP:
    $rank GooglePageRankChecker::getRank("validweb.ru");
    dim565 нравится это.
  2. Beaten_Sect0r Новичок

    PHP:
    <?php
    Error_Reporting
    (E_ALL & ~E_NOTICE);
    Error_Reporting (ERROR WARNING);

            function 
    get_download($url){

                    
    $ret false;

                    if( 
    function_exists('curl_init') ){
                            if( 
    $curl curl_init() ){

                                    if( !
    curl_setopt($curl,CURLOPT_URL,$url) ) return $ret;
                                    if( !
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true) ) return $ret;
                                    if( !
    curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30) ) return $ret;
                                    if( !
    curl_setopt($curl,CURLOPT_HEADER,false) ) return $ret;
                                    if( !
    curl_setopt($curl,CURLOPT_ENCODING,"gzip,deflate") ) return $ret;

                                    
    $ret curl_exec($curl);

                                    
    curl_close($curl);
                            }
                    }
                    else{
                            
    $u parse_url($url);

                            if( 
    $fp = @fsockopen($u['host'],!empty($u['port']) ? $u['port'] : 80 ) ){

                                
    $headers 'GET '.  $u['path'] . '?' $u['query'] .' HTTP/1.0'"\r\n";
                                
    $headers .= 'Host: '$u['host'] ."\r\n";
                                
    $headers .= 'Connection: Close' "\r\n\r\n";

                                
    fwrite($fp$headers);
                                
    $ret '';

                                    while( !
    feof($fp) ){
                                            
    $ret .= fgets($fp,1024);
                                    }

                                    
    $ret substr($ret,strpos($ret,"\r\n\r\n") + 4);

                                    
    fclose($fp);
                            }
                    }

                    return 
    $ret;
            }

    function 
    get_yandex($url){
            
    $ret 'N/A';
            if( 
    substr($url,0,7) != 'http://' )
                    
    $url 'http://' $url;
            if( 
    $content get_download('http://bar-navig.yandex.ru/u?ver=2&url='urlencode($url) .'&show=1&post=0') ){

                    if( 
    class_exists('SimpleXMLElement') ){
                            if( 
    $xmldoc = new SimpleXMLElement($content) ){
                                    
    $tcy $xmldoc->tcy;
                                    if( !empty(
    $tcy) ){
                                            
    $ret $tcy['value'];
                                    }
                            }
                    }
                    else{
                            
    preg_match("/value=\"(.\d*)\"/",$content,$tic);
                            if( !empty(
    $tic[1]) ) $ret $tic[1];
                    }
            }

            return 
    $ret;
    }
    function 
    yandex($url) {
    if (!
    preg_match('/^(http:\/\/)?([^\/]+)/i'$url)) { $url='http://'.$url; }
    $yandex=get_yandex($url);
    $out='тИЦ: '.$yandex.' ';
    return 
    $out;
    }
    if ((!isset(
    $_POST['url'])) && (!isset($_GET['url']))) { echo '<form action="" method="post">тИЦ:<br /><input name="url" type="text" class="input" style="width: 120pt;" /> <input type="submit" name="submit" value="Go" style="cursor: hand;" /></form>'; }
    if (isset(
    $_REQUEST['url']))
    {
        echo 
    yandex($_REQUEST['url']);
    }
    ?>
    Тоже самое для яндекса. можете переименовать тему или перенести в отдельную...
    
    Admin и f-duck нравится это.
  3. Admin Админ

    Вот за это спасибо. :) Попозже перенесу в отдельную тему
  4. XmP ADD ebx, 110h

    Уже два:)
  5. Admin Админ

    Да, PR подрос, в ап Яндекса должен и тИЦ подрости.

Поделиться этой страницей