Нужна прога для мониторинга сайтов

Discussion in 'PHP' started by ^_WhitE_DeMoN_^, 26 Aug 2009.

  1. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Нужна прога которая следила бы за присутствием моей ссылки/HTML/JavaScript кода на чужых сайтах.
    Вчера целый день гуглил, сегодня Ачат перекаповал - не нашол :( Помогите...
     
    #1 ^_WhitE_DeMoN_^, 26 Aug 2009
    Last edited: 27 Aug 2009
  2. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Автоматом или полу автоматом?

    Готовое решение не предложу (принципильно) но дам направление

    Список ресурсов +

    PHP/Perl скрипт - тянеш страниц с ресурсов по списку +

    Загоняеш в регулярку и ищеш свой код +

    не нашол , отправляеш себе мыло

    Это все в крон (под винду тоже есть порт)

    Примерно с полтинник строк кода
     
  3. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Да какую нибуть... Любая помощ или инфо будет очень полезна ! Нужно чтобы скрипт/прога обхажывала указанные сайты и их страницы в поиске нужного кода, в конце показавала результат. Желательно обойтись без спама на мыло :D Текущий список сайтов ~ 50 штук, будет стремительно увеличиватся...
     
  4. +casper+

    +casper+ Banned

    Joined:
    27 Jun 2009
    Messages:
    158
    Likes Received:
    34
    Reputations:
    0
    Пишеш php скрипт. Гет страницы, парсинг, запись результов в файл. А вот чтоб следить чтоб ссылка находилась в видимом поле низнаю и как.
     
  5. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    код написал, но только есть одна загвоздка.
    не могу придумать как найти нужную ссылку на всей странице ?
    Что в preg_match нужно написать, чтобы он нашёл нужный текст ?

    ТС, вид у ссылки какой ?
    <a href="http://antichat.ru">ANTICHAT.RU</a> ?
     
  6. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    @+casper+ На этом варианте остановлися...
    @geforse Надо еще придумать как найти ссылку на ВСЕХ остальных станицах сайта =) Тоесть, скрипт должен искать линки, ведущие на страницы сканируемого сайта и проверять о наличии кода там (можно и обойтись... но не желательно). Вид ссылки может быть разный, надо искать это <a href="http://antichat.ru
    С JavaScript-ом, думаю будет лекче, он один для всех, но спец-символов полно...

    Еще думаю - не лучше ли будет, впарить еще один JavaScript к линкам/коду который будет орать моему серверу - "Я на http://antichat.ru/index.php !". Но тогда могут вырезать ссылку и оставить только оратора =)

    Иду доки курить, скрипты искать, голову мучеть...
     
    #6 ^_WhitE_DeMoN_^, 27 Aug 2009
    Last edited: 27 Aug 2009
  7. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Загоняем страницу в переменную с file_get_contents()
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ^_WhitE_DeMoN_^ Решили конкурировать с сапой, но на пхп все сделать? :D
    PHP:
    $input file_get_contents('Страниццо');
    $array = array('<a href="http://ссылка1">http://ссылка1</a>''<a href="http://ссылка2">http://ссылка2</a>''вообще любой текст');
    foreach(
    $array as $one)
    {
    echo 
    'Текст '.$one.(strpos($input,$one)!==false?' есть ':' отсутствует ').'на странице <br/>';
    }
     
    _________________________
    1 person likes this.
  9. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Как же это я не догадался :D

    Я больше cURL люблю, чем file_get_contents()
    Я имел ввиду что нужно написать в preg_match_all(), чтобы нашлась нужная ссылка

    Быть может найти все ссылки -> Поместить в массив -> Циклом проверять каждый элемент массива на соответствие с нужной...
     
  10. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    @Gifts Большая конкуренция не получится =) Но надо же както выживать... Да и люди не любят back-link ставить, придется заставить =)
    Спасибо за код, очень помогло !
    @geforse С cURL-ом не знаком... Все равно...
    Работаю над етим =)

    + Потом буду ставить, кто больше поможет... Спасибо всем !

    Вот пока что накодил:
    Code:
    <?php   
    $opts = array(  
      'http'=>array(  
        'method'=>"GET",  
        'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://для.красоты\n  " 
      )  
    );  
    
    $context = stream_context_create($opts);  
       $a = file_get_contents('http://ищем.сдесь', false,$context);  
    if (preg_match("/<a href=\"http:\/\/искомый.линк/i", $a)) {
        echo "Линк найден.";
    } else {
        echo "Линк не найден.";
    }
    
    ?>
     
  11. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    @geforse Ты мне об этом говорил ?
    PHP:
    <?php   
    $opts 
    = array(  
      
    'http'=>array(  
        
    'method'=>"GET",  
        
    'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришол/\n  " 
      
    )  
    );  

    echo 
    '<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';

    $context stream_context_create($opts); 
    $urls  = array('сайт.1''сайт.2''и.так.далее');
    foreach(
    $urls as $url)
    {
    $input file_get_contents('http://'.$urlfalse,$context); 
    $array = array('a href="http://че.ищем''a href="http://может.еще.че''название.нашего.сервиса'); 
    foreach(
    $array as $one

    echo 
    $url.' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
    }  
    }

    echo 
    '</body></html>';
    ?>
    Дописал чуть :D

    Но какой метод лучше пользовать, preg_match или strpos ?

    Еще, база адресов у меня находится в .dat (txt) файле, вот в таком формате
    Code:
    циферки.числа||циферки.числа||0||0||текст||http://адрес.сайта/||
    циферки.числа||циферки.числа||1||0||текст||http://адрес.сайта/||
    Буду разжевовать как их выдернуть от туда и запихнуть напр. в $urls
     
    #11 ^_WhitE_DeMoN_^, 27 Aug 2009
    Last edited: 28 Aug 2009
  12. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Нет, это не мой код
     
  13. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Да знаю что не твой :D
    Я про это:
     
  14. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Помогитее =)

    Вот че написал:
    PHP:
    <?php   
    $opts 
    = array(  
      
    'http'=>array(  
        
    'method'=>"GET",  
        
    'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришли/\n  " 
      
    )  
    );  

        echo 
    '<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';
        
    $line file('http://мой.сайт/папка/index.dat'FILE_IGNORE_NEW_LINES);
    foreach(
    $line as $value) {
        if(
    strlen($value)<20) continue;
        
    $value     str_replace(array("http://","www.","/"),array('','',''),$value);
        
    $urls      explode('||',$value);

        
    $context   stream_context_create($opts);
        foreach(
    $urls[5] as $url) {
            
    $input file_get_contents('http://'.$urlfalse,$context); 
            
    $array = array('a href="http://че.ищем''a href="http://может.еще.че''название.сервиса'); 
            foreach(
    $array as $one) { 
                echo 
    $url.' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
            }  
        }
    }
    echo 
    '</body></html>';
    ?>
    Но, скрипт ругается:
    Тоесть на foreach($urls[5] as $url)
    Че я не так делаю ? Поправьте меня... Доки курить нет времени и желания, дрыхнуть пора :( Но, Ачат не спит ;)
     
    #14 ^_WhitE_DeMoN_^, 30 Aug 2009
    Last edited: 30 Aug 2009
  15. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    :confused: Но echo urls[5]; выводит все нужные елементы массива ..? Предложте решение...
     
  16. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Извини, но, я так думаю или ты правда перепутал чето...
    ??

    //Edit:
    Какой же я придурок...
    PHP:
    <?php   
    $opts 
    = array(  
      
    'http'=>array(  
        
    'method'=>"GET",  
        
    'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришол/\n  " 
      
    )  
    );  

    echo 
    '<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';
        
    $line file('http://мой.сайт/папка/index.dat'FILE_IGNORE_NEW_LINES);
    foreach(
    $line as $value
    {
        if(
    strlen($value)<20) continue;
        
    $value     str_replace(array("http://","www.","//|","/|"),array('','','|','|'),$value);
        
    $urls      explode('||',$value);
        
    $context   stream_context_create($opts);
        
    $input     file_get_contents('http://'.$urls[5], false,$context); 
        
    $array     = array('a href="http://че.ищем''a href="http://может.еще.че''Имя.нашего.сервиса'); 
        foreach(
    $array as $one
            { 
            echo 
    $urls[5].' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
            }  
        
    }
    echo 
    '</body></html>';
    ?>
    Разобрался...
    У кого есть идеи, пусть не стесняется :D Может лучше вариант предложит...
     
    #16 ^_WhitE_DeMoN_^, 30 Aug 2009
    Last edited: 30 Aug 2009
  17. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    если это некий чекер, то лучше curl_multi или просто curl

    Code:
    $value     = str_replace(array("http://","www.","//|","/|"),array('','','|','|'),$value);
        $urls      = explode('||',$value); 
    
    имхо лучше регуляркой
    Code:
    циферки.числа||циферки.числа||1||0||текст||http://адрес.сайта/||
    
    preg_match_all('/([0-9.]*)\|\|([0-9.]*)\|\|1\|\|0\|\|([a-z]*)\|\|([^\n|$]*)/ims', $array, $match)
    как-то так
    
    Code:
        $array     = array('a href="http://че.ищем', 'a href="http://может.еще.че', 'Имя.нашего.сервиса'); 
        foreach($array as $one) 
            { 
            echo $urls[5].' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'; 
            }   
    
    этот кусок вообще индусский код.... Если идёт выборка - такие вещи делаются регуляркой, если же просто проверка, то лучше вынести отдельно, чем лепить в 1 строку
     
    #17 FireFenix, 31 Aug 2009
    Last edited: 31 Aug 2009
  18. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    FireFenix Большое спасибо, люблю такие мнения.
    Да, это должно быть похоже на чекер :D
    С curl-ом не знаком...
    Особых преимуществ регулярных выражений сдесь не вижу, а и я о них еще только читаю :)
    А про индусский код - согласен, посмотрю что можно сделать, как только дочитаю... и еще - этот кусок не мой, один чувак его скинул в тему :D
     
  19. rewiaca

    rewiaca New Member

    Joined:
    25 Jun 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    - deleted -
     
    #19 rewiaca, 3 Sep 2009
    Last edited: 26 Jan 2018