Нужен парсер

Тема в разделе "PHP Pro", создана пользователем Юрец, 8 июн 2009.

Статус темы:
Закрыта.
  1. Юрец

    Юрец

    Регистр.:
    20 авг 2006
    Сообщения:
    152
    Симпатии:
    21
    Нужен парсер.
    На входе получает список урлов в формате тхт.


    Берет каждый урл и анализирует по параметрам:
    1. PR основного домена
    2. ТИЦ основного домена
    3. Возраст основного домена


    *Желательно серверный, на пхп4.
    Жду вопрос по ТЗ и ориентировочную цену.
     
  2. lobzik

    lobzik

    Регистр.:
    8 авг 2006
    Сообщения:
    311
    Симпатии:
    49
    Если бы все было так просто =) Гугл будет банить через некоторое время. Яндекс лучше сразу парсить через XML(придется регестрироваться и тоже будет ограничения). Бан обходится путем юзания прокси или придется делать большие заддержки.
    Все зависит от того, что вам нужно - можно написать парсер, который в фоне пропарсит данные (время не важно) или быстрый чекер с асинхронным парсингом (результат видно сразу, но будет ограничение на к-во урлов)
     
  3. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Отписал в личку
     
  4. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    немного оффтоп.
    если не обязательно серверный софт, то скачай десктопный на сайте у солюшена:)
     
  5. pori

    pori Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    114
    Симпатии:
    18
    Вы правы - это обходится путем юзания мозга, хотя бы чуть чуть...

    Мой скрипт проверки PR и ИЦ без задержек, следовало бы его зашифровать, ну да ладно, изучайте:

    PHP:
    <?php
    class PageRankGrabber {
        public function 
    getRank($url) {
            
    $pageUrl $this->getRankUrlStingByPageUrl($url);
            
    $content $this->getContentCurl($pageUrl);
            
    $parts   explode(":"$content);
            return 
    intval(@$parts[count($parts)-1]);
        }

        public function 
    getContentCurl($url) {
           
    $ch curl_init();
           
    curl_setopt($chCURLOPT_URL$url);
           
    curl_setopt($chCURLOPT_HEADER0);
           
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
           
    $result curl_exec($ch);
           
    curl_close($ch);
           return 
    $result;        
        }

        public function 
    getRankUrlStingByPageUrl($page) {
            
    $this->awesomeHash($page);
            
    $hash "8" $this->awesomeHash($page);
            
    $url  "http://toolbarqueries.google.com/search?sourceid=" .
                    
    "navclient-ff&features=Rank&client=navclient-auto-ff&";
            
    $url .= "ch=" $hash "&q=info:" urlencode($page);
            return 
    str_replace(' '''$url);        
        }

        private function 
    toHex8($num) {
            
    $vector "0123456789abcdef";
            return 
    $vector[($num 256) / 16] . $vector[$num 16];
        }

        private function 
    hexEncodeU32($num) {
            
    $result  $this->toHex8($this->zerofillShift($num24));
            
    $result .= $this->toHex8($this->zerofillShift($num16) & 255);
            
    $result .= $this->toHex8($this->zerofillShift($num8) & 255);
            return 
    $result $this->toHex8($num 255);
        }

        private function 
    awesomeHash($value)  {
            
    $hashSeed "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE." .
                        
    "Yes, I'm talking to you, scammer.";
            
    $intValue 16909125;
            for(
    $i 0$i strlen($value); $i++ ){
                
    $intValue ^=
                    
    $this->charCodeAt($hashSeed$i strlen($hashSeed)) ^
                    
    $this->charCodeAt($value$i);
                
    $intValue =
                    
    $this->zerofillShift($intValue,  23) | $intValue << 9;
            }
            return 
    $this->hexEncodeU32($intValue);
        }

        private function 
    charCodeAt($value$position) {
            
    $symbol $value[$position];
            return 
    ord($symbol);
        }

        private function 
    zerofillShift($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;
        }   
    }

    class 
    TYGrabber
    {
      public function 
    getTy($url) {
        
    $full_url "http://bar-navig.yandex.ru/u?ver=4.2.0&url=".urlencode($url)."&show=1";
        
    $xml $this->getContentCurl($full_url);
        
    $regex '|<tcy rang="([0-9]*)" value="([0-9]*)"/>|is';
        
    preg_match($regex$xml$out);
        return 
    $out[2];
      }

      private function 
    getContentCurl($url) {
          
    $ch curl_init();
          
    curl_setopt($chCURLOPT_URL$url);
          
    curl_setopt($chCURLOPT_HEADER0);
          
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
          
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
          
    $result curl_exec($ch);
          
    curl_close($ch);
          return 
    $result;        
        }
    }

    #$url = $_GET['url'];

    $pr_check = new PageRankGrabber();
    #$my_pr = $pr_check->getRank($url);

    $ty = new TYGrabber();
    #$my_ty = $ty->getTy($url);

    $file file("urls.txt");

    foreach (
    $file as $url) {

      
    $my_pr $pr_check->getRank($url);
      
    $my_ty $ty->getTy($url);

      echo 
    "{$url}:\tPR: {$my_pr}<br>\r\nTY: {$my_ty}<br>\r\n";
      
    flush();
    }
    Кладете в папку со скриптом файлик urls.txt - в нем по урлу на строку.
     
    Юрец нравится это.
Статус темы:
Закрыта.