Задать вопрос

Как расставить контент после парсинга?

Здравствуйте уважаемые программисты. Решил я себе написать парсер статей из VK для сайта.
По урлу, допустим Этому, скачиваю страницу:
$res = array();
             $options = array(
             CURLOPT_RETURNTRANSFER => true,     // return web page
             CURLOPT_HEADER         => false,    // do not return headers
             CURLOPT_FOLLOWLOCATION => true,     // follow redirects
             CURLOPT_USERAGENT      => "spider", // who am i
             CURLOPT_AUTOREFERER    => true,     // set referer on redirect
             CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
             CURLOPT_TIMEOUT        => 120,      // timeout on response
             CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
             );
             $ch      = curl_init( $_POST['Url'] );
             curl_setopt_array( $ch, $options );
             $content = curl_exec( $ch );
             $err     = curl_errno( $ch );
             $errmsg  = curl_error( $ch );
             $header  = curl_getinfo( $ch );
             curl_close( $ch );

             $res['content'] = $content;


Далее я начинаю перебирать контент:
# Получаем список ссылок на изображения в статье
              preg_match_all('/"(.*)":\["(.*)",[0-9]{3},[0-9]{3}\]/S', $res['content'], $retData);
              # Получаем текст из статьи, если он есть
              preg_match_all('/<p  class="article_decoration_first article_decoration_last" >(.*)<\/p>/S', $res['content'], $retText);
              preg_match_all('/<p  class="article_decoration_first" >(.*)<\/p>/S', $res['content'], $retTextFirst);
              # Получаем заголовки к каждому параграфу, если они есть
              preg_match_all('/<strong>(.*)<\/strong>/S', $res['content'], $retTextStrong);
              # Получим нумерованные списки, если есть
              preg_match_all('/<\/span>(.*)<\/h2>/S', $res['content'], $retNum);
              # Получаем Основной заголовок для статьи, если он есть
              preg_match_all('|\<h1.*\><span class=\'article_anchor_title\'>(.*)<\/span>(.*)<\/h1>|isU', $res['content'], $retZag);
              if(isset($retZag[2])){
              $string = implode(", ", $retZag[2]);
              $stringStrip = strip_tags($string);
              $strEx = substr($stringStrip, 5);
              }

Дальше я считаю кол-во элементов в каждом массиве
if(isset($retData[2])){$retDataCount = count($retData[2]);}
if(isset($retText[1])){$retTextCount = count($retText[1]);}
             if(isset($retTextFirst[1])){$retTextFirstCount = count($retTextFirst[1]);}
             if(isset($retNum[1])){$retNumCount = count($retNum[1]);}
             if(isset($retTextStrong[1])){$retTextStrongCount = count($retTextStrong[1]);}
             # находим максимальный счетчик из представленных массивов
             $maxCount = max($retDataCount, $retTextCount, $retTextFirstCount, $retTextStrongCount);
             # Начинаем формировать строчку
             $retSTR = '';

Ну а далее, по максимальному счетчику выполняю кол-во циклов сбора строки.
for($i=0;$i<$maxCount;$i++){
             # Если есть заголовок для параграфа - добавляем в строку
             if(isset($retTextStrong[1][$i])){$retSTR .= ''.$retTextStrong[1][$i].'<br /><br />';}           
             if(isset($retData[2][$i])){$retData[2] = array_map('stripslashes', $retData[2]);}
             # Если есть изображения в статье, добавляем их в строку
             # Скачиваем картинки на сервер
             if(isset($retData[2][$i])){
             $link = $func->urlLoadFile($retData[2][$i],$cat_upload,$cat_dnload,$url_dnload,$tmpPath,$author,$_SESSION['AID']);
             $retSTR .= '<img src="'.$link.'" style="max-width:640px;width:auto;"><br />';
             }
             # Если есть текст в статье, добавляем в строку
             if(isset($retText[1][$i])){$retSTR .= '<br />'.strip_tags($retText[1][$i]).'<br />';}
             if(isset($retTextFirst[1][$i])){$retSTR .= '<br />'.strip_tags($retTextFirst[1][$i]).'<br />';}
             # Если есть Нумерованный список, добавляем в строку
             if(isset($retNum[1][$i])){$retSTR .= '<h2>'.$retNum[1][$i].'</h2>';}
             }

Я получил все необходимые данные из статьи, НО, порядок публикации этих элементов я не знаю и собираю строку "на угад". Можно как-то это определять или может подход изначально другой должен быть?
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
попробуйте не парсить регулярками, а работать через DOM php.net/manual/ru/book.dom.php
голова опухнет, но это будет полезный опыт
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы