Модификация RSS импортера

#
Модификация RSS импортера
Прочитал все старые темы по RSS на форуме. Подскажите возможно ли модифицировать стандартный код импорта RSS чтобы он сохранял полный текст новости, а так же загружал фото на сервер и менял соответствующие внешние ссылки на внутренние? Или придется писать собственный плагин модифицирующий базу данных
Модератор
#
Re: Модификация RSS импортера
sersh_k,
импорт в типовой, если есть подробный текст, через импорт он доступен, в противном случае взять его просто неоткуда. Все изменения ссылок Вы можете сами сделать в типовой дин. странице.
#
Re: Модификация RSS импортера
Т.е. нельза модифицировать стандартный шаблон импорта, так, чтобы он "вытягивал" содержание страницы, по ссылке в RSS ленте на полную новость с конкретного сайта? Получается содержание берется только с самой RSS ленты и не более... т.е. нужен дополнительный модуль.

И еще, можно ли модифицировать код таким образом, чтобы он загружал фото из ленты в тегах
<description>...</description>
на хостинг и присваивал им соответствующие ссылки в инфосистеме, по типу как это организованно в тегах
<enclosure url .../>
Модератор
#
Re: Модификация RSS импортера
sersh_k писал(а):
Т.е. нельза модифицировать стандартный шаблон импорта, так, чтобы он «вытягивал» содержание страницы, по ссылке в RSS ленте на полную новость с конкретного сайта?

Модифицировать можно, код типовой открыт, это не задача парсера RSS-ленты.
sersh_k писал(а):
Получается содержание берется только с самой RSS ленты и не более…

Естественно, что все данные берутся исключительно из ленты.
#
Re: Модификация RSS импортера
Подскажите пожалуйста как поместить в информационный элемент метки?
Сами метки я формирую из заголовка новости, т.к. они как правило длинные, вот таким образом:

/* создаем теги из заголовка */
$str_tag = preg_replace('/[^a-zA-ZА-Яа-я\s]/u','',$title); // удаляем все символы кроме букв
$str_tag = mb_strtolower($str_tag, 'UTF8'); // переводим все буквы в строчные
$str_tag = str_replace(' ',', ',$str_tag); // разделяем теги запятыми

Все переменные для ИЭ заносятся в таблицу вот этим кодом:

// Вставка элемента + SEO
$item_id = $InformationSystem->InsertInformationItems(0, 0, $infsys_id,
$infgroup_id, $date, $title, $desc, 1, $text, $information_item_image, 0,
$_SERVER['REMOTE_ADDR'], '', 1, $seo_title, $seo_desc, $seo_key, -1, array('information_items_small_image' =>
$information_item_small_image));

Но колонки для меток в таблице нет как в 5-ой версии, т.к. метки находятся в отдельной таблице и присваиваются ИЭ видимо через id. Возможно ли их прописать в ИЭ, как это сделать, хотя бы методику в общих чертах?
Модератор
#
Re: Модификация RSS импортера
Примерно так:
// Оставляем только буквы
$str_tag = mb_strtolower(
   preg_replace('/[^a-zA-ZА-Яа-я\s]/u','',$title)
);
$aTagsNames = explode(' ', $str_tag);

foreach ($aTagsNames as $sTagName)
{
   // Доабвляются только теги, которые уже есть в справочнике тегов
   $oTag = Core_Entity::factory('Tag')->getByName($sTagName);

   if ($oTag)
   {
      // Связываем тег с инфомрационным элементом
      $oInformationsystem_Item->add($oTag);
   }
}

P.S. В пятой версии также не было никаких колонок для меток, они хранились в разных таблицах.
#
Re: Модификация RSS импортера
Принцип понятен, но сценарий возвращает ошибку:
Цитата:
Импорт новостей Замечание: Undefined variable: oInformationsystem_Item в файле /home/s/sersh/hostcms/public_html/hostcmsfiles/lib/lib_41/lib_41.php (строка 63)
Fatal error: Call to a member function add() on a non-object in /home/s/sersh/hostcms/public_html/hostcmsfiles/lib/lib_41/lib_41.php on line 63
Модератор
#
Re: Модификация RSS импортера
я не знаю в какой код Вы все это вставляете. oInformationsystem_Item должен быть, вероятно называется по другому.
#
Re: Модификация RSS импортера
Что-то у меня ничего не получается. В форме центра администрирования "Метки", теги не появляются.

Вот полный код RSS импортера немного модифицированный, подскажите куда вставить импорт меток:
<?php

// Идентификатор информационной системы, в которую помещаются элементы
$infsys_id = Core_Type_Conversion::toInt($GLOBALS['LA']['informationsystemId']);

// Группа, в которую помещается новый элемент
$infgroup_id = Core_Type_Conversion::toInt($GLOBALS['LA']['informationGroupId']);

// Список источников
$RssSourceTextList = Core_Type_Conversion::toStr($GLOBALS['LA']['sourcesList']);

// Разделяем на список источников
$array_RssSourceTextList = explode("\n", $RssSourceTextList);

$rss = new RssRead();

$InformationSystem = & singleton('InformationSystem');

$DateClass = new DateClass();

$kernel = & singleton('kernel');

$count_import_item = 0;

$infsys_row = $InformationSystem->GetInformationSystem($infsys_id);

// Получаем список тэгов
foreach ($array_RssSourceTextList as $url)
{
   $result = $rss->ReadRSS($url);

   /* Цикл по полученным элементам */
   for ($i = 0; $i < count($result['items']) - 1; $i++)
   {
      $count_result = $InformationSystem->GetExternalInformationSystemItem(array(
      'information_items_name' => $result['items'][$i]['title'],
      'information_systems_id' => $infsys_id));

      /* Если не найдено элементов с таким же именем */
      if (mysql_num_rows($count_result) == 0)
      {
         /* Формируем полный путь к источнику материала */
         $link = $result['items'][$i]['link'];

         /* Заголовок */
         $title = $result['items'][$i]['title'];

         /* создаем теги из заголовка */

            $str_tag = preg_replace('/[^a-zA-ZА-Яа-я\s]/u','',$title); // удаляем все символы кроме букв
            $str_tag = mb_strtolower($str_tag, 'UTF8'); // переводим все буквы в строчные
            $str_tag = str_replace(' ',', ',$str_tag); // разделяем теги запятыми

         /* Описание элемента */
         $desc = $result['items'][$i]['desc'];

            $desc = preg_replace('/<[\/]?a[^>]*>/i', '', $desc); // удаляем все гиперссылки
            $str = 'Постоянный адрес публикации: ';
            $none = '';
                         $desc = str_replace($str, $none, $desc); // удаляем строку в переменной "str"

         /* Текст элемента */

            $host = parse_url($url, PHP_URL_HOST); // выделяем имя домена из url-адреса

         $text = "<h1>$title</h1>" . $result['items'][$i]['desc'] . "<p style='color: #999;'>Источник: $host</p>" . "\n Метки: $str_tag";

            $text = preg_replace('/<[\/]?a[^>]*>/i', '', $text); // удаляем все гиперссылки
                         $text = str_replace($str, $none, $text); // удаляем строку в переменной "str"

         /* Дата */
         $date = $DateClass->DateUnixToSQL (strtotime ($result['items'][$i]['pubdate']));

         /* создаем SEO из заголовка */

            $seo_title = $title; // заголовок
            $seo_desc = $title; // описание
            $seo_key = $str_tag; // ключевые слова из тегов

         if (!empty($title))
         {
            // КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ
            $information_item_small_image = '';
            $information_item_image = '';
            
            // Вставка элемента + SEO
            $item_id = $InformationSystem->InsertInformationItems(0, 0, $infsys_id,
            $infgroup_id, $date, $title, $desc, 1, $text, $information_item_image, 0,
            $_SERVER['REMOTE_ADDR'], '', 1, $seo_title, $seo_desc, $seo_key, -1, array('information_items_small_image' =>
            $information_item_small_image));
            
            if (isset($result['items'][$i]['enclosure']['url']))
            {
               // Формируем путь к папке информационного элемента по идентификатору информационного элемента
               $item_dir = $InformationSystem->GetInformationItemDir($item_id);
               
               // Создаем папку для информационного элемента
               $kernel->PathMkdir($item_dir);
            
               $uploaddir = CMS_FOLDER . $item_dir;
               
               $img = Core_Type_Conversion::toStr($result['items'][$i]['enclosure']['url']);

               $temp_file = tempnam(TMP_DIR, "TMP_");

               $fh = fopen($temp_file, "w");

               $content_file = $kernel->GetUrl($img);

               if (@fwrite($fh, $content_file))
               {
                  chmod($temp_file, CHMOD_FILE);

                  $param_img = array();

                  /* ---------------------------------- */
                  // Определяем расширение файла
                  $exp = strtolower($kernel->GetExtension($img));

                  $name = 'information_items_' . time() . $count_import_item . '.' . $exp;

                  //CMS_FOLDER . $InformationSystem->GetInformationItemDir()

                  //$information_item_image = CMS_FOLDER . UPLOADDIR . $name;
                  //$information_item_small_image = CMS_FOLDER . UPLOADDIR . 'small_' . $name;
                  
                  $information_item_image = $uploaddir . $name;
                  $information_item_small_image = $uploaddir . 'small_' . $name;

                  $param = array();
                  
                  // Путь к файлу-источнику большого изображения;
                  $param['path_source_big_image'] = $temp_file;

                  // Путь к файлу-источнику малого изображения;
                  //$param['path_source_small_image'] = $temp_file;
                  
                  $param['path_source_small_image'] = '';

                  //Оригинальное имя файла большого изображения
                  $param['original_file_name_big_image'] = $name;

                  // Путь к создаваемому файлу большого изображения
                  $param['path_target_big_image'] = $information_item_image;

                  // Путь к создаваемому файлу малого изображения;
                  $param['path_target_small_image'] = $information_item_small_image;

                  // Оригинальное имя файла малого изображения
                  $param['original_file_name_small_image'] = $name;

                  // Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
                  $param['use_big_image'] = true;

                  // Значение максимальной ширины большого изображения
                  $param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];

                  // Значение максимальной высоты большого изображения
                  $param['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];

                  // Значение максимальной ширины малого   изображения;
                  $param['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];

                  // Значение максимальной высоты малого   изображения;
                  $param['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];

                  // Путь к файлу с "водяным знаком"
                  $param['watermark_file_path'] = '';
                  
                  $result_img = $kernel->AdminLoadFiles($param);

                  if ($result_img['big_image'])
                  {
                     $information_item_image = basename($param['path_target_big_image']);
                  }

                  if ($result_img['small_image'])
                  {
                     $information_item_small_image = basename($param['path_target_small_image']);
                  }
                  
                  $param_item = array ();

                  $param_item['information_items_id'] = $item_id;
                  $param_item['information_items_image'] = $information_item_image;
                  $param_item['information_items_small_image'] = $information_item_small_image;

         
                  // Обновляем информацио о информационном элементе после создания изображений
                  $item_id = $InformationSystem->InsertInformationItem($param_item);
                  

                  @unlink($temp_file);
               }
               
               fclose($fh);
            }

            $count_import_item++;
         }
      }
   }
}
?>
<h1>Импорт информационных элементов</h1>
<p>Проимпортировано <?php echo $count_import_item?> элементов</p>

Модератор
#
Re: Модификация RSS импортера
У Вас типовая от пятой версии, обновите типовую дин. страницу из дистрибутива.
Авторизация