Слежка за сайтом

Тема в разделе "Коммерческие", создана пользователем MavriK, 1 июл 2008.

Информация :
Публиковать (для всех) нуленые версии, особенно от modulesgarden КАТЕГОРИЧЕСКИ не стоит. Тема мониторится оным разработчиком, а к нам приходят абузы которые нельзя игнорировать.
Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. MavriK

    MavriK

    Регистр.:
    24 мар 2006
    Сообщения:
    160
    Симпатии:
    16
    Вот понадобилось, что-то вроде "слежки" за сайтом, а именно, надо скачивать с определённого сайта, в определённое время (ежедневного) определённые страницы, т.е. всю информацию и текст которые на этих страницах расположены.

    Может кто посоветует как это лучше сделать? Просто каждый день в определённое время заходить и самому смотреть нету возможности. Так же нету возможно использования какого-нибудь софта, так что новерное подойдёт только скрипт.
     
  2. mdss

    mdss ♖♘♗♕♔♗♘♖

    Moderator
    Регистр.:
    20 фев 2007
    Сообщения:
    1.126
    Симпатии:
    668
    настрой под себя NewsGrabber
    http://www.nulled.ws/forumdisplay.php?f=64
    По крону запусти нужное тебе время, в шаблонах укажи старинцы с которых брать контент и что именно.
    Как я понял это именно то, что тебе нужно ;)
     
  3. bork1234

    bork1234 Постоялец

    Регистр.:
    25 июн 2008
    Сообщения:
    65
    Симпатии:
    13
    Воспользовавшись советом SainT.v2 выкладываю небольшой скрипт для PHP4,5. Для его работы необходимо, чтобы сокеты в PHP были включены (по умолчанию включено). Лучше всего положить скрипт в отдельную папку (месторасположение не имеет значения).

    В начале скрипта указываются страницы, которые желаете получить (массив $pages). Запускается скрипт коммандной строкой
    Код:
    php -f файл_этого_скрипта
    После своей работы создает лог-файл с наименованием страниц, которые изменились с прошлой проверкой. А также создает директорию "pages", в которую копируются изменившиеся страницы, с почасовой разбивкой.

    PHP:
    <?
    // НАСТРОЙКИ: какие страницы требуется проверить
    $pages = array();
    $pages[] = 'http://cms/';
    $pages[] = 'http://cms/home/';
    $utf false// поставьте true, если сайт в кодировке utf8 (в PHP должен быть подключен модуль mb_string)
    $no_tags true// удалять все HTML-теги. Поставьте false, если не требуется


    // ---------------------------------
    // ЗАПУСКАЕМ ПРОВЕРКУ
    $cur_path dirname(__FILE__).'/';
    set_time_limit(0); // скрипт живет вечно
    $last_data = array();
    $last_data_file $cur_path.'last_data.dat';

    //возьмем предыдущую информацию, если она есть 
    if (is_file($last_data_file)) {
      
      
    $file file_get_contents($last_data_file);
      if (
    $file && ($k = @unserialize($file))) 
        
    $last_data $k;
    }

    // создадим папку логов
    if (!is_dir($cur_path.'pages') && !mkdir($cur_path.'pages'))
      die (
    'Не удается создать директорию: '.$cur_path.'pages');

    // пройдемся по страницам и попробуем их получить
    foreach($pages as $url) {
      
    $url = (string) $url;
      
    $content file_get_contents($url); // получаем
      
    if ($utf$content mb_convert_encoding($content'cp1251''utf8');
      if (
    $no_tags$content strip_tags($content); // убираем теги
      
      
    if (!isset($last_data[$url]) || $last_data[$url] != $content) { // нашли различие
        
    $fp fopen($cur_path.'differences.log''a+');
        
    $log date('Y.m.d H:i:s') . " Изменилась страница $url \r\n";
        
    fwrite($fp$log);
        
    fclose($fp);
        
        
    // сохраним эту страницу
        
    $dirsave $cur_path.'pages/'.date('Y.m.d H-00-00').'/';
        if (!
    is_dir($dirsave)) mkdir($dirsave); 
        
    $replacements = array();
        
    $replacements[] = '\\';
        
    $replacements[] = '/';
        
    $replacements[] = '&';
        
    $replacements[] = '?';
        
    $replacements[] = ':';
        
    $filename str_replace($replacements'_'$url);
        
        
    $fp fopen($dirsave $filename'w');
        
    fwrite($fp$content);
        
    fclose($fp);
      }
        
      
    $last_data[$url] = $content// запоминаем текущее состояние страницы
    }

    // сохраним текущее состояние
    $fp fopen($last_data_file'w');
    fwrite($fpserialize($last_data));
    fclose($fp);
    ?>
     
  4. =TopOR=

    =TopOR= Создатель

    Регистр.:
    17 июн 2008
    Сообщения:
    11
    Симпатии:
    1
    Массив заполняется из всех страниц в промежутке между http://cms/ и http://cms/home/?
    Или нужно вводить вручную?
    Что нужно дописать что-бы скрипт брал страницы с сайта http://cms/ на глубину вхождения 1, т.е. http://cms/1, http://cms/2, http://cms/3...
     
  5. allov

    allov

    Регистр.:
    7 июл 2008
    Сообщения:
    156
    Симпатии:
    214
    А можно и при помощи софта - Website-Watcher
    Возможности можно посмотреть в обзоре на 3ДНьюс, который, правда, несколько устарел
     
  6. =TopOR=

    =TopOR= Создатель

    Регистр.:
    17 июн 2008
    Сообщения:
    11
    Симпатии:
    1
    Поэтому Website-Watcher не подойдет. Сам ищу скрипт с подобным функционалом.
     
  7. bork1234

    bork1234 Постоялец

    Регистр.:
    25 июн 2008
    Сообщения:
    65
    Симпатии:
    13
    Изменил. Указываете домен и скрипт парсит первую страницу на предмет ссылок, а затем обрабатывает найденные ссылки на первой странице.

    PHP:
    <?

    // НАСТРОЙКИ: 
    $domain 'site.ru'// домен сайта
    $utf false// поставьте true, если сайт в кодировке utf8 (в PHP должен быть подключен модуль mb_string)
    $no_tags true// удалять все HTML-теги. Поставьте false, если не требуется

    // ---------------------------------
    // ЗАПУСКАЕМ ПРОВЕРКУ

    $pages = array();
    $cur_path dirname(__FILE__).'/';
    set_time_limit(0); // скрипт живет вечно
    $last_data = array();
    $last_data_file $cur_path.'last_data.dat';

    // возьмем первую страницу
    $first_page file_get_contents('http://'.$domain.'/');

    // парсим на предмет ссылок
    $matches = array();
    if (!
    $first_page || !preg_match_all('#<a[^>]+href=["\']?([^\'" >]+)["\' >]?#sim'$first_page$matches))
      die(
    'Connection refused!');

    $pages[] = 'http://'.$domain.'/';  
    foreach(
    $matches[1] as $link) {
      
      if (
    strpos($link'mailto:')!==false)
        continue;
        
      if ((
    $k=strpos($link'#'))!==false)
        
    $link substr($link0$k);
      
      if (
    strpos($link'http://')===false)
        
    $pages[] = 'http://'.$domain'/' ltrim($link'/');  
      elseif(
    strpos($link$domain)!==false)
        
    $pages[] = $link
    }

    $pages array_unique($pages);

    //возьмем предыдущую информацию, если она есть 
    if (is_file($last_data_file)) {
      
      
    $file file_get_contents($last_data_file);
      if (
    $file && ($k = @unserialize($file))) 
        
    $last_data $k;
    }

    // создадим папку логов
    if (!is_dir($cur_path.'pages') && !mkdir($cur_path.'pages'))
      die (
    'Не удается создать директорию: '.$cur_path.'pages');

    // пройдемся по страницам и попробуем их получить
    foreach($pages as $url) {
      
    $url = (string) $url;
      
    $content file_get_contents($url); // получаем
      
    if ($utf$content mb_convert_encoding($content'cp1251''utf8');
      if (
    $no_tags$content strip_tags($content); // убираем теги
      
      
    if (!isset($last_data[$url]) || $last_data[$url] != $content) { // нашли различие
        
    $fp fopen($cur_path.'differences.log''a+');
        
    $log date('Y.m.d H:i:s') . " Изменилась страница $url \r\n";
        
    fwrite($fp$log);
        
    fclose($fp);
        
        
    // сохраним эту страницу
        
    $dirsave $cur_path.'pages/'.date('Y.m.d H-00-00').'/';
        if (!
    is_dir($dirsave)) mkdir($dirsave); 
        
    $replacements = array();
        
    $replacements[] = '\\';
        
    $replacements[] = '/';
        
    $replacements[] = '&';
        
    $replacements[] = '?';
        
    $replacements[] = ':';
        
    $filename str_replace($replacements'_'$url);
        
        
    $fp fopen($dirsave $filename'w');
        
    fwrite($fp$content);
        
    fclose($fp);
      }
        
      
    $last_data[$url] = $content// запоминаем текущее состояние страницы
    }

    // сохраним текущее состояние
    $fp fopen($last_data_file'w');
    fwrite($fpserialize($last_data));
    fclose($fp);
    ?>
     
    =TopOR= нравится это.
Статус темы:
Закрыта.