RSS граббер

#
Re: RSS граббер
<?php

/* Подключаем основные классы */
require_once('main_classes.php');

/* Загружаем модули */
$GLOBALS['kernel']->LoadModules();

/* Адрес RSS-канала */
$url = $GLOBALS['LA']['rss_adres_importa'];

/* Идентификатор информационной системы, в которую помещаются элементы */
$infsys_id = 27;

/* Группа, в которую помещается новый элемент */
$infgroup_id = 0;

$rss = new RssRead();

$result = $rss->ReadRSS($url);

echo "$url";
echo "<pre>";
print_r($result);
echo "<pre>";

$InformationSystem = new InformationSystem();

$DateClass = new DateClass();

/* Цикл по полученным элементам */
for($i = 0; $i < count($result['items']) - 1; $i++)
/*Что-то дополнительное*/
/*$count_all = count($result['items']) - 1;*/

/* Ограниченное кол-во */
/* $count_all = 1;
for($i = 0; $i <= $count_all; $i++) */
{


   /* Если не найдено элементов с таким-же именем */
   /*if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>$result['items'][$i]['title'],'information_blocks_id'=>$infsys_id))) == 0)*/

   if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>trim($result['items'][$i]['title']),'information_blocks_id'=>$infsys_id))) == 0)

   {

      /* Форимруем полный путь к источнику материала */
      $link = $result['items'][$i]['link'];

      /* Заголовок */
      $title = iconv("UTF-8", "Windows-1251", $result['items'][$i]['title']);
      
      /* Дата */
      $desc = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);
      
      /* Описание элемента */
      $text = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);

      /* Фотография */
      $img = $result['items'][$i]['enclosure']['url'];

      /* Тест элемента */
      $date = $DateClass->DateUnixToSQL(strtotime($result['items'][$i]['pubdate']));

      /* Вставка элемента */
      /* Идентификатор элемента информационной системы */
      $information_items_id = $InformationSystem->InsertInformationItems(0, 0, $infsys_id, $infgroup_id, $date, $title, $desc, 1, '', '', 0, $_SERVER['REMOTE_ADDR']);

      /* Идентификатор свойства информационной системы */
      $information_propertys_id = 39;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value = $link;
      
      /* Идентификатор свойства информационной системы */
      $information_propertys_id_imaga = 40;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value_imaga = $img;

      /* Вставка ПОЛНОГО ПУТИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id, $information_items_id, $information_propertys_items_value, '' );

      /* Вставка ФОТОГРАФИИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id_imaga, $information_items_id, $information_propertys_items_value_imaga, '' );

   }
}
?>

Вставил код, заместо того, который щас закоменчен, но все равно результат тот же, новости импортированные из RSS дублируются.
#
Re: RSS граббер
CCron, сообщите, пожалуйста, адрес сайта, адрес страницы с описанной проблемой, данные доступа к разделу администрирования, название инфосистемы и дублирующихся элементов.
#
Re: RSS граббер
Отправил данные в службу поддержки.
#
Re: RSS граббер
Проблема была в том, что новости импортируются в несоответствующей кодировке, поэтому при вставке мы обрабатываем их функцией iconv. А при использовании метода GetExternalInformationSystemItem передаем для поиска исходную новость, не обработанную iconv. Естественно, в инфосистеме нет новостей не обработанных iconv. Поэтому условие срабатывает и осуществляется вставка уже имеющейся новости.
Поэтому внесите след. исправления(выделено жирным):
<?php

/* Подключаем основные классы */
require_once('main_classes.php');

/* Загружаем модули */
$GLOBALS['kernel']->LoadModules();

/* Адрес RSS-канала */
$url = $GLOBALS['LA']['rss_adres_importa'];

/* Идентификатор информационной системы, в которую помещаются элементы */
$infsys_id = 27;

/* Группа, в которую помещается новый элемент */
$infgroup_id = 0;

$rss = new RssRead();

$result = $rss->ReadRSS($url);

echo "$url";
echo "<pre>";
print_r($result);
echo "<pre>";

$InformationSystem = new InformationSystem();

$DateClass = new DateClass();

/* Цикл по полученным элементам */
for($i = 0; $i < count($result['items']) - 1; $i++)
/*Что-то дополнительное*/
/*$count_all = count($result['items']) - 1;*/

/* Ограниченное кол-во */
/* $count_all = 1;
for($i = 0; $i <= $count_all; $i++) */
{


   /* Если не найдено элементов с таким-же именем */
   /*if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>$result['items'][$i]['title'],'information_blocks_id'=>$infsys_id))) == 0)*/

   if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>iconv("UTF-8", "Windows-1251", $result['items'][$i]['title']),'information_blocks_id'=>$infsys_id))) == 0)


   {

      /* Форимруем полный путь к источнику материала */
      $link = $result['items'][$i]['link'];

      /* Заголовок */
      $title = iconv("UTF-8", "Windows-1251", $result['items'][$i]['title']);
      
      /* Дата */
      $desc = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);
      
      /* Описание элемента */
      $text = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);

     /* Фотография */
      $img ='';
      if(isset($result['items'][$i]['enclosure']['url']))
      {
      $img = $result['items'][$i]['enclosure']['url'];
      }


      /* Тест элемента */
      $date = $DateClass->DateUnixToSQL(strtotime($result['items'][$i]['pubdate']));

      /* Вставка элемента */
      /* Идентификатор элемента информационной системы */
      $information_items_id = $InformationSystem->InsertInformationItems(0, 0, $infsys_id, $infgroup_id, $date, $title, $desc, 1, '', '', 0, $_SERVER['REMOTE_ADDR']);

      /* Идентификатор свойства информационной системы */
      $information_propertys_id = 39;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value = $link;
      
      /* Идентификатор свойства информационной системы */
      $information_propertys_id_imaga = 40;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value_imaga = $img;

      /* Вставка ПОЛНОГО ПУТИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id, $information_items_id, $information_propertys_items_value, '' );

      /* Вставка ФОТОГРАФИИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id_imaga, $information_items_id, $information_propertys_items_value_imaga, '' );

   }
}
?>
#
Re: RSS граббер
Например:
$colvo = $InformationSystem->GetCountInformationSystemItem(27, 0);

Как это сопаставить с:
select * from orders where create_date < (select create_date from orders order by create_date desc limit 100, 1)

только вместо первого select * from orders надо будет потом написать delete from orders
ну и не orders, а rss таблицу
подзапрос возвращает дату 100-той новости
а первый запрос удаляет все что позже было

Если учесть что в БД таблице инфоэлименты с разных сайтов, то не получаеться. Чиститься всё, при том не относящиеся к этому сайту.

P.S.
Не получается вывести, если вставить:
$colvo = $InformationSystem->GetCountInformationSystemItem(27, 0);
echo "$colvo";

то rss граббер не работает, просто выдает пустую страницу.

P.S.P.S.
Как вызывать с помощью crontab динамическую страницу, если сайт Alias, прописанный в Apache? Например страница: http://test2.test.ru/imp_rss/
На сервере же нет физически этой директории, а все хранится в 0:/usr/home/test/
Модератор
#
Re: RSS граббер
CCron писал(а):
P.S.P.S.
Как вызывать с помощью crontab динамическую страницу, если сайт Alias, прописанный в Apache? Например страница: http://test2.test.ru/imp_rss/
На сервере же нет физически этой директории, а все хранится в 0:/usr/home/test/


http://www.hostcms.ru/documentation/crontab/
#
Re: RSS граббер
CCron, метод GetCountInformationSystemItem(27, 0) с такими параметрами вернет вам количество элементов в корне инфосистемы. Возможно, вам нужно общее количество всех элементов, тогда параметры будут такие: GetCountInformationSystemItem(27, false).
Что касается sql-запроса:
CCron писал(а):
Чиститься всё, при том не относящиеся к этому сайту.
- вы же можете ограничивать удаляемые элементы, передавая идентификатор сайта и инфосистемы через секцию WHERE в sql-запросе.
#
Re: RSS граббер
$rss_limit = "mysql> delete from 'information_items_table' where information_blocks_id = 27 and 'information_items_date' <
(select 'information_items_date' from 'information_items_table' where information_blocks_id = 27 order by 'information_items_date' desc limit 10, 1)";

'information_items_table' таблица инфоэлементов
information_blocks_id = 27 номер инфосистемы
'information_items_date' столбец с датой

Должно оставлять 10 новостей, а старые удалять, вставляю в тело скрипта импорта rss, не работает. Подскажите в чем проблема.
#
Re: RSS граббер
Подобное условие в запросе использовать не обязательно. Можно сразу указать направление сортировки удаляемых элементов.
CCron, прежде всего сначала рекомендуется проверить работу данного запроса на операторе SELECT. Т.е. будут ли вообще выбраны какие-то записи(подлежащие удалению).
Например вот этот код выберет все записи кроме десяти с самой поздней датой и удалит их:

$mysql = new MySQL();

$query = "SELECT count(*) as count FROM information_items_table WHERE information_blocks_id = 27";

$rez = $mysql->select($query);

if ($row = mysql_fetch_assoc($rez))
{
if($count_del > 0)
{
$query = "DELETE FROM information_items_table WHERE information_blocks_id = 27 ORDER BY 'information_items_date' ASC  LIMIT $count_del";
$mysql->query($query);
}

}
#
Re: RSS граббер
Пробовал делать только SELECT, количество выбранных элементов - не выводиться. Подскажите, пожалуйста в чем может быть проблема.
<?php

/* Подключаем основные классы */
require_once('main_classes.php');

/* Загружаем модули */
$GLOBALS['kernel']->LoadModules();

/* Адрес RSS-канала */
$url = $GLOBALS['LA']['rss_adres_importa'];

/* Идентификатор информационной системы, в которую помещаются элементы */
$infsys_id = 27;

/* Группа, в которую помещается новый элемент */
$infgroup_id = 0;

$rss = new RssRead();

$result = $rss->ReadRSS($url);


echo "$rez";
echo "$url";
echo "<pre>";
print_r($result);
echo "<pre>";

$InformationSystem = new InformationSystem();

$DateClass = new DateClass();

/* Цикл по полученным элементам */
for($i = 0; $i < count($result['items']) - 1; $i++)
/*Что-то дополнительное*/
/*$count_all = count($result['items']) - 1;*/

/* Ограниченное кол-во */
/* $count_all = 1;
for($i = 0; $i <= $count_all; $i++) */
{


   /* Если не найдено элементов с таким-же именем */
   /*if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>$result['items'][$i]['title'],'information_blocks_id'=>$infsys_id))) == 0)*/

   if (mysql_num_rows(
   $InformationSystem->GetExternalInformationSystemItem
   (array('information_items_name'=>iconv("UTF-8", "Windows-1251", $result['items'][$i]['title']),'information_blocks_id'=>$infsys_id))) == 0)
  
   {

      /* Форимруем полный путь к источнику материала */
      $link = $result['items'][$i]['link'];

      /* Заголовок */
      $title = iconv("UTF-8", "Windows-1251", $result['items'][$i]['title']);

      /* Дата */
      $desc = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);

      /* Описание элемента */
      $text = iconv("UTF-8", "Windows-1251", $result['items'][$i]['desc']);

      /* Фотография */
      $img ='';
      if(isset($result['items'][$i]['enclosure']['url']))
      {
      $img = $result['items'][$i]['enclosure']['url'];
      }

      /* Тест элемента */
      $date = $DateClass->DateUnixToSQL(strtotime($result['items'][$i]['pubdate']));

      /* Вставка элемента */
      /* Идентификатор элемента информационной системы */
      $information_items_id = $InformationSystem->InsertInformationItems(0, 0, $infsys_id, $infgroup_id, $date, $title, $desc, 1, '', '', 0, $_SERVER['REMOTE_ADDR'], '', 0);

      /* Идентификатор свойства информационной системы */
      $information_propertys_id = 39;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value = $link;

      /* Идентификатор свойства информационной системы */
      $information_propertys_id_imaga = 40;

      /* Иначение элемента информационной системы */
      $information_propertys_items_value_imaga = $img;

      /* Вставка ПОЛНОГО ПУТИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id, $information_items_id, $information_propertys_items_value, '' );

      /* Вставка ФОТОГРАФИИ в дополнительные свойства */
      $InformationSystem->InsertInformationPropertysItems(0, 0, $information_propertys_id_imaga, $information_items_id, $information_propertys_items_value_imaga, '' );
   }
}

$mysql = new MySQL();

$query = "SELECT count(*) as count FROM information_items_table WHERE information_blocks_id = 27";

$rez = $mysql->select($query);

if ($row = mysql_fetch_assoc($rez))
{
if($count_del > 0)
   {
   $query = "DELETE FROM information_items_table WHERE information_blocks_id = 27 ORDER BY 'information_items_date' ASC  LIMIT $count_del";
   $mysql->query($query);
   }

}
?>
Авторизация