Парсинг RSS и создание новых ресурсов

Написал сниппет для парсинга RSS-ленты местного новостного сайта с созданием ресурсов. Сделал проверку по дате публикации, чтобы существующий ресурс в базе MODX не создавался снова, но проблема в том, что создается только один ресурс с последней новостью из RSS, а при появлении новой новости в RSS новый ресурс в базе MODX не создается. Помогите, пожалуйста, найти ошибку.
Код:
$path = 'http://www.amur.info/index.rss';
$ctx = stream_context_create(array('http' => array('timeout' => 6)));
$file = file_get_contents($path, 0, $ctx);

if ($file) {
    $rss = simplexml_load_string($file);
    $i = 0;
    foreach ($rss->channel->item as $item){
        $namespaces = $item->getNameSpaces(true);
        $yandex = $item->children($namespaces['yandex']); 
        
        $full_text = (string)$yandex->{'full-text'};       //полный текст статьи
        $title = $item->title;                             //заголовок статьи
        $pubdate = $item->pubDate;                         //дата публикации
        $link = $item->link;                               //ссылка на новость
        
        echo '<b>'. $title. '</b></br>';
     	
	//проверка
        $docfind = $modx->getObject('modResource',array('parent' => '19','longtitle' => $pubdate));            
        if($docfind) {
		echo '<i>Документ с такой датой публикации уже есть </i></br>';
        }
        else {
	    //создаем ресурсы
            $response = $modx->runProcessor('resource/create', array(
           	'pagetitle' => $title,
            	'longtitle' => $pubdate,
            	'description' => $link,
            	'introtext' => '',
            	'content' => $full_text,
            	'template' => $template,
            	'hidemenu' => 1,
            	'published' => 1,
            	'parent' => '19'
            ));
        }
        $i++;
        if ($i == 3) break;
    }
}
Василий Stepanov
01 апреля 2017, 10:28
modx.pro
1
1 578
+1
Поблагодарить автора Отправить деньги

Комментарии: 4

Алексей Ерохин
01 апреля 2017, 15:39
+1
На вскидку:
if($docfind instanceof modResource) {
		continue;
        }
    Владимир
    01 апреля 2017, 16:22
    0
    А этот modstore.pro/packages/import-and-export/xparser не подходит потому что платный?
    Он очень продуманный, удобный, все есть- крон и т.п. Создает обычные ресурсы или тикеты.
      Василий Stepanov
      02 апреля 2017, 04:05
      +1
      Согласен, отличный мощный компонент для реализации сильных проектов. В моем случае стоит задача спарсить лишь одну ленту с десятью новостями и создать ресурсы, задача на первый взгляд простая и есть инетерес написать сниппет самим.
      Василий Stepanov
      02 апреля 2017, 04:18
      2
      +1
      Сделал вот так. Работает.
      //собираем заголовки из категории ресурсов
      $docfind = $modx->getCollection('modResource',array('parent' => '19'));
      foreach ($docfind as $k => $res) {
          $title_m = $res->get('pagetitle');
          $titles[] = $title_m;
      }
      
      $path = 'http://www.amur.info/index.rss';
      $ctx = stream_context_create(array('http' => array('timeout' => 6)));
      $file = file_get_contents($path, 0, $ctx);
      
      if ($file) {
          $rss = simplexml_load_string($file);
          $i = 0;
          foreach ($rss->channel->item as $item){
              $namespaces = $item->getNameSpaces(true);
              $yandex = $item->children($namespaces['yandex']); 
              
              $full_text = (string)$yandex->{'full-text'};       //полный текст статьи
              $title = $item->title;                             //заголовок статьи
              $pubdate = $item->pubDate;                         //дата публикации
              $link = $item->link;                               //ссылка на новость
              
      	//создаем ресурсы в MODX, если ресурсов с такими заголовками еще нет
              if (in_array($title, $titles) == false) {
                  $response = $modx->runProcessor('resource/create', array(
                      'pagetitle' => $title,
                      'longtitle' => $pubdate,
                      'description' => $link,
                      'introtext' => '',
                      'content' => $full,
                      'template' => $template,
                  	'hidemenu' => 1,
                  	'published' => 1,
                  	'parent' => '19'
                  ));
              }
              
              $i++;
              if ($i == 5) break;
          }
      }
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4