[Сценарий] Парсер церковные православные события сегодня

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

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

Ответить
Аватара пользователя
S_Nick
Сообщения: 67
Зарегистрирован: Сб сен 30, 2017 7:44 pm
Откуда: Минск
Благодарил (а): 9 раз
Поблагодарили: 54 раза
Контактная информация:

[Сценарий] Парсер церковные православные события сегодня

Сообщение S_Nick » Пт окт 25, 2019 8:59 pm

Актуально для верующих православных людей. Может кому-то будет полезно.
Умный дом говорит какой сегодня церковный православный праздник или день памяти.
А также, если выполнять в Cron, к примеру, каждые 2-3 часа (чаще не рекомендую, может заколебать ;) ), с параметром "change=1", будет сообщать только "Великие православные праздники", типа "Покров Пресвятой Богородицы" и подобные.
Данные получает с сайта kalendar-365.ru
Версия сырая, могут быть ошибки.
Если есть мысли как оптимизировать улучшить код, пишите в теме.

Код сценария religiousToday:

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

if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];

$page_url = "http://kalendar-365.ru/orthodox/today";

//делаем до 10 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 10; $i++) {
	if (!$page_cont) $page_cont = file_get_contents($page_url);
}

if ($page_cont) {
	$page_cont = str_replace("\r", "", $page_cont);
	$page_cont = str_replace("\n", "", $page_cont);
	
	//<div class="holyday"></div>
	preg_match_all("/<div class=\"holyday\">(.*?)<\/div>/ui", $page_cont, $match0);
	
	//<span class="cl"></span>
	preg_match_all("/<span class=\"cl\">(.*?)<\/span>/ui", $page_cont, $match);
	
	if ($match0[1][0] && $match[1][0]) {
 		$ret = "Церковные православные события сегодня: ";
 		for ($i = 0; $i < count($match0[1]); $i++) {
			$ret .= trim($match0[1][$i]) . ", " . trim($match[1][$i]) . ".; ";
    		if (stristr(trim($match0[1][$i]), "Великий праздник")) {
         		$ret_warning = "Сегодня Великий праздник, " . trim($match[1][$i]) . ".";
        	}
		}
	}
}
if ($ret && !$change) {
 	sg("ThisComputer.religiousToday", $ret);
 	say($ret, $level);
 	echo "<br>" . $ret;
}
if ($ret_warning && $change) {
	say($ret_warning, 1);
	echo "<br>" . $ret_warning;
}
Код для Cron (Рекомендую выполнять не чаще 2 часов):
Crontab: 24 */2 * * *

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

runScript("religiousToday", array("change"=>"1"));
Пример выполнения:
Церковные православные события сегодня: День памяти, Священноисповедника Николая (Могилевского), митрополита Алма-Атинского.; День памяти, Перенесение из Мальты в Гатчину части Древа Животворящего Креста Господня, Филермской иконы Божией Матери и десной руки Иоанна Крестителя.; День памяти, Мучеников Прова, Тараха и Андроника.; День памяти, Преподобного Амфилохия Глушицкого, игумена.; День памяти, Преподобного Космы, епископа Маиумского, творца канонов.;
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.
За это сообщение автора S_Nick поблагодарил:
Amarok (Чт июн 18, 2020 7:30 am)
Рейтинг: 1.16%
Ответить