Как автоматически парсить новые записи на сайте?

Доброго времени суток. У меня есть парсер новостей на php. Он должен парсить новости с РБК. Я почти всё написал, но у меня возникла пара вопросов:
  1. Нормальны ли такие конструкции. Насколько я понимаю, это будет работать. Я прав? Я использую php и phpQuery.
    $content = $pq -> find('.article__text_free') -> remove('.article__special_container:has(p>strong:contains(Читайте также))');
    (должно найти тег strong, родителем которого является безымянный тег p и удалить блок, содержащий эти элементы). Вторая конструкция:
    require_once '/page_templates/header.php';
      require_once '/page_templates/footer.php';
    //Содержат в себе переменные $parse_footer_template='что-то %s и что-то' и $parse_header_template='что-то'
      $head = $parse_header_template;
      $footer = $parse_footer_template;
      $title = 'News24 | ' + $file_name
      $file_template = $data_content['text'];
      $file_content = sprintf($head + '%s' + $footer, $title, $file_template);

    Эта часть скрипта создаёт новую страницу-новость при помощи полученных ранее распаршенных данных. Сработает ли в таком случае %s для sprintf()?

  2. Главный вопрос. Как узнавать, когда на сайте выходит новая статья и вызывать функцию для парсинга этой статьи? Не могу придумать алгоритм.
  3. Как можно упростить этот код? Я на php не писал очень много, поэтому(

    Код
    <?
      require_once 'phpQuery/phpQuery/phpQuery.php';
      require_once '/page_templates/header.php';
      require_once '/page_templates/footer.php';
    
    
      function translit($filename) {
        $converter = array(
          'а' => 'a',    'б' => 'b',    'в' => 'v',    'г' => 'g',    'д' => 'd',
          'е' => 'e',    'ё' => 'e',    'ж' => 'zh',   'з' => 'z',    'и' => 'i',
          'й' => 'y',    'к' => 'k',    'л' => 'l',    'м' => 'm',    'н' => 'n',
          'о' => 'o',    'п' => 'p',    'р' => 'r',    'с' => 's',    'т' => 't',
          'у' => 'u',    'ф' => 'f',    'х' => 'h',    'ц' => 'c',    'ч' => 'ch',
          'ш' => 'sh',   'щ' => 'shch',  'ь' => '',     'ы' => 'y',    'ъ' => '',
          'э' => 'e',    'ю' => 'yu',   'я' => 'ya',
          'А' => 'A',    'Б' => 'B',    'В' => 'V',    'Г' => 'G',    'Д' => 'D',
          'Е' => 'E',    'Ё' => 'E',    'Ж' => 'Zh',   'З' => 'Z',    'И' => 'I',
          'Й' => 'Y',    'К' => 'K',    'Л' => 'L',    'М' => 'M',    'Н' => 'N',
          'О' => 'O',    'П' => 'P',    'Р' => 'R',    'С' => 'S',    'Т' => 'T',
          'У' => 'U',    'Ф' => 'F',    'Х' => 'H',    'Ц' => 'C',    'Ч' => 'Ch',
          'Ш' => 'Sh',   'Щ' => 'Shch',  'Ь' => '',     'Ы' => 'Y',    'Ъ' => '',
          'Э' => 'E',    'Ю' => 'Yu',   'Я' => 'Ya',
        );
    
        //Массив с соответствиями букв языков
    
        $new = '';
        $file = pathinfo(trim($filename));
        if (!empty($file['dirname']) && @$file['dirname'] != '.') {
          $new .= rtrim($file['dirname'], '/') . '/';
        }
        if (!empty($file['filename'])) {
          $file['filename'] = str_replace(array(' ', ','), '-', $file['filename']);
          $file['filename'] = strtr($file['filename'], $converter);
          $file['filename'] = mb_ereg_replace('[-]+', '-', $file['filename']);
          $file['filename'] = trim($file['filename'], '-');
          $new .= $file['filename'];
        }
        //Переводим имя файла
    
        if (!empty($file['extension'])) {
          $new .= '.' . $file['extension'];
        }
        return $new;
      }
    
    
      function return_articles ($link) {
    
        function parse_articles ($url) {
    
          $html = file_get_contents($url);
          $pq = phpQuery::newDocument($html);
    
          $header = $pq -> find('.article__header__title-in');
          // Получаем заголовок статьи
          $content = $pq -> find('.article__text_free') -> remove('.article__special_container:has(p>strong:contains(Читайте также))');
          // Получаем весь контент статьи (Текст, фото и т. п.), убираем блоки «Читайте также».
    
          $data = array();
          $data[] = array(
            'head' => $header -> html(),
            'text' => $content -> html()
          );
          // Записываем данные в массив, который потом вернётся из функции.
          phpQuery::unloadDocuments();
          return $data;
        };
    
        function create_articles ($link) {
          $data_content = parse_articles($link);
          $file_name = $data_content['head'];
          $fh = fopen("\/articles\/" + translit($file_name), 'w');
    
          $head = $parse_header_template;
          $footer = $parse_footer_template;
          $title = 'News24 | ' + $file_name;
          $file_template = $data_content['text'];
    
          $file_content = sprintf($head + '%s' + $footer, $title, $file_template);
          fwrite($fh, $stringData);
          fclose($fh);
    
        };
    
        create_articles($link);
      };
    ?>
    под катом
    Причём, мне нужно именно парсить новые записи, а не отлавливать обновления rss. API я не нашёл. Подскажите, как?
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
07 мая 2024, в 19:52
50000 руб./за проект
07 мая 2024, в 19:34
10000 руб./за проект
07 мая 2024, в 18:48
5000 руб./за проект