[Сценарий] Получение и чтение RSS + другие скрипты

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: чтение RSS + другие скрипты

Сообщение nick7zmail » Пн ноя 20, 2017 3:27 pm

Эти параметры просто передаются в метод для обработки, не более. Чтобы были доступны несколько новостей - тольк в свойство накапливать, или напрямую с sql тянуть.
За это сообщение автора nick7zmail поблагодарил:
Gelezako (Пн ноя 20, 2017 4:07 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Logrus
Сообщения: 2077
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 456 раз

Re: чтение RSS + другие скрипты

Сообщение Logrus » Пн ноя 20, 2017 3:29 pm

в рсс только анекдоты и пишу в файл

Код: Выделить всё

/*
$params['URL'] --link
$params['TITLE'] -- title
$params['BODY'] -- body
$params['CHANNEL_ID'] -- channel ID
$params['CHANNEL_TITLE'] -- channed title

//say($params['TITLE']); // reading news
*/

$text = (strip_tags($params['BODY']));
$filename = "C:/_majordomo/htdocs/texts/joke.txt";
$fp = fopen($filename , "a"); // Открываем файл
$joke = fwrite($fp, "\r\n".$text);
fclose($fp); //Закрытие файла

//say("Всё запомнила в файл анекдоты.",1);  
на малинке пути другие $filename = "/var/www/texts/joke.txt";
в шаблонах поведения
Расскажи анекдот

Код: Выделить всё

$joke=getRandomLine(joke);
sayReply($joke, 1); 
вполне вероятно, возможно как полностью файл чистить, так и отдельные строки
За это сообщение автора Logrus поблагодарил:
Gelezako (Пн ноя 20, 2017 4:04 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: чтение RSS + другие скрипты

Сообщение Gelezako » Пн ноя 20, 2017 4:06 pm

Logrus, да, спасибо, делаю приблизительно тоже самое, но в качестве хранилища планирую использовать свойство класса внутри МЖД, а не файл на файловой системе.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
xor
Сообщения: 2036
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 283 раза
Поблагодарили: 628 раз

Re: чтение RSS + другие скрипты

Сообщение xor » Пн ноя 20, 2017 10:24 pm

Gelezako писал(а):ну дёргать запросы из базы это полный хардкор :)
а проще решение есть ? :)
Зачем дополнительно хранить что-то в свойствах, файлах, если это уже в таблице лежит структурировано, по полочкам разложено?
Запросы - это просто!

Вот простейший скрипт, который читает пять последних заголовков

Код: Выделить всё

 say('последние новости',1);
   $states = SQLSelect('SELECT  `TITLE` ,  `ADDED` FROM  `rss_items` ORDER BY  `ADDED` DESC LIMIT 0 , 5');
// отбери заголовок, когда добавлено из таблицы записи_RSS, отсортируй по времени добавления по убыванию и ограничь показ пятью записями
   $cnt=Count($states);
   For($i=0; $i<$cnt; $i++) {
      say($states[$i]['TITLE'],1); 
   }
 
За это сообщение автора xor поблагодарили (всего 2):
Gelezako (Вт ноя 21, 2017 8:24 pm) • vitosmaxim80sad145 (Сб апр 11, 2020 3:45 pm)
Рейтинг: 2.33%
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: чтение RSS + другие скрипты

Сообщение Gelezako » Вт ноя 21, 2017 8:25 pm

xor, спасибо, с вашим кодом стало намного проще реализовать мою идею :)
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Sas
Сообщения: 207
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: чтение RSS + другие скрипты

Сообщение Sas » Пн июн 11, 2018 11:22 pm

xor писал(а):
Пн ноя 20, 2017 10:24 pm
Вот простейший скрипт, который читает пять последних заголовков
еще бы добавить проверку на одинаковость этих новостей, ну и моего скрипта.

исправил скрипт анекдотов
хранит в базе в таблице anekdots последние 50 анекдотов и при проговаривании ставит отметку о прочтении
чтоб не рассказывать его повторно что постоянно делал стары скрипт найденный тут или в коннекте у кого то
При обновлении удаляет все анекдоты и закачивает снова.
Обновлять можно ручками или автоматом раз в день, сам обновляет анекдоты после того как расскажет все.
Для обновления по таймеру или ручками надо запустить:

Код: Выделить всё

runScript('anekdot',array('UPDATE'=>TRUE));
Для проговаривания анекдотов надо запустить

Код: Выделить всё

runScript('anekdot');
Обратите внимание на уровень проговаривания в sayReply("",10) - 10 везде надо изменить на свой
При первом запуске надо запустить создание таблицы 2 строка, а после ее закаментить обратно.

Код: Выделить всё

SQLExec("CREATE TABLE `anekdots` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `TITLE` varchar(255) NOT NULL DEFAULT '',   `R_TRASH` int(10) NOT NULL DEFAULT '0', `LAST_UPDATE` timestamp, PRIMARY KEY (`ID`)) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;");

Код: Выделить всё

function update_a(){
//SQLExec("CREATE TABLE `anekdots` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `TITLE` varchar(255) NOT NULL DEFAULT '',   `R_TRASH` int(10) NOT NULL DEFAULT '0', `LAST_UPDATE` timestamp, PRIMARY KEY (`ID`)) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;");
SQLExec("TRUNCATE anekdots;");
DebMes("Anekdots updating");
$xml_file="http://www.anekdot.ru/rss/export_top.xml"; // адрес xml файла
$t=time();
$sql=array();
$anekdot = array();
$xml = simplexml_load_file($xml_file); // раскладываем xml на массив
$xml_cnt = count($xml->channel->item);
$random= rand(0,$xml_cnt);
$num=1;
foreach( $xml->channel->item as $curr) {
$anekdot[]= (string) $curr->description;
}
foreach($anekdot as $an){
$a=preg_replace('/<br>/',' ',$an); 
$sql['TITLE']=$a;
$sql['LAST_UPDATE']=$t;
$sql['ID']=$num;
SQLInsert('anekdots',$sql);
$num++;}
}
function read_a(){
$co=SQLSelectOne("SELECT ID,TITLE FROM anekdots WHERE R_TRASH = 0  ORDER BY RAND() LIMIT 1;");
SQLExec("UPDATE anekdots SET R_TRASH=1 WHERE ID='".$co['ID']."'");
return $co['TITLE'];
}
$r=read_a();
if ( empty($r)){
sayReply("Новых анекдотов нет, обновляю список",10);
 update_a();
 read_a();
}elseif($params['UPDATE']){
 update_a();
}else{
 sayReply("$r",10);
}
Последний раз редактировалось Sas Пт июн 15, 2018 4:00 pm, всего редактировалось 3 раза.
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: чтение RSS + другие скрипты

Сообщение Gelezako » Вт июн 12, 2018 11:18 am

Sas писал(а):
Пн июн 11, 2018 11:22 pm
При первом запуске надо запустить создание таблицы 2 строка, а после ее закаментить обратно.

Код: Выделить всё

SQLExec("CREATE TABLE `anekdots` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `TITLE` varchar(255) NOT NULL DEFAULT '',   `R_TRASH` int(10) NOT NULL DEFAULT '0',   `LAST_UPDATE` timestamp, PRIMARY KEY (`ID`)  ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;")
1. нет точки с запятой в конце
2. после запуска, ошибка:

Код: Выделить всё

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''anekdots' ( 'ID int(10) unsigned NOT NULL AUTO_INCREMENT, 'TITLE' varchar(255) ' at line 1
CREATE TABLE 'anekdots' ( 'ID int(10) unsigned NOT NULL AUTO_INCREMENT, 'TITLE' varchar(255) NOT NULL DEFAULT '', 'R_TRASH' int(10) NOT NULL DEFAULT '0', 'LAST_UPDATE' timestamp, PRIMARY KEY ('ID') ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
Подскажите в чём может быть проблема?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Sas
Сообщения: 207
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: чтение RSS + другие скрипты

Сообщение Sas » Вт июн 12, 2018 7:57 pm

Gelezako писал(а):
Вт июн 12, 2018 11:18 am
1. нет точки с запятой в конце
2. после запуска, ошибка:
Извините, я запускал создание таблицы прям в консоли мускуля а в скрипт уже потом перенес.
сейчас проверил и исправил предыдущее сообщение на рабочий вариант
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: чтение RSS + другие скрипты

Сообщение Gelezako » Чт июн 14, 2018 2:04 pm

Sas писал(а):
Вт июн 12, 2018 7:57 pm
Gelezako писал(а):
Вт июн 12, 2018 11:18 am
1. нет точки с запятой в конце
2. после запуска, ошибка:
Извините, я запускал создание таблицы прям в консоли мускуля а в скрипт уже потом перенес.
сейчас проверил и исправил предыдущее сообщение на рабочий вариант
спасибо, выполнил создание таблицы, проверил в phpmyadmin, таблица появилась и анекдоты тоже. Создал сценарий "anekdot". Потом в консоли МЖД выполняю

Код: Выделить всё

runScript('anekdot',array('UPDATE'=>TRUE));
но тишина :(
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
xor
Сообщения: 2036
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 283 раза
Поблагодарили: 628 раз

Re: чтение RSS + другие скрипты

Сообщение xor » Пт июн 15, 2018 1:19 am

При запуске
runScript('anekdot',array('UPDATE'=>TRUE));

Код: Выделить всё

$r=read_a();
if ( empty($r)){
sayReply("Новых анекдотов нет, обновляю список",10);
 update_a();
 read_a();
}elseif($params['UPDATE']){
 update_a(); // сюда попадаем при 'UPDATE'=>TRUE
}else{
 sayReply("$r",10); // чтобы посмеяться надо сюда
}
ведь только обновление идет.
Попробуйте
runScript('anekdot',array('UPDATE'=>FALSE));
или просто
runScript('anekdot');
Ответить