Страница 1 из 1

[Сценарий] Парсер праздников сегодня

Добавлено: Пт окт 25, 2019 9:14 pm
S_Nick
Актуально для жителей СНГ. Может кому-то будет полезно.
Умный дом говорит какой сегодня праздник, российский или международный. В духе таких, как "День гранёного стакана" :D
Рекомендую выполнять один раз в сутки, лучше всего утром, когда вы просыпаетесь, будете знать, может быть сегодня ваш профессиональный праздник ;)
Данные получает с сайта kalendar-365.ru
Версия сырая, могут быть ошибки.
Если есть мысли как оптимизировать улучшить код, пишите в теме.

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

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

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/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);
	
	preg_match_all("/<span class=\"cl\">(.*?)<\/span>/ui", $page_cont, $match);
	
	$ret = "Сегодня: ";
	foreach($match[1] as $key => $value) {
		$ret .= $value . ".; ";
	}
}

$ret = trim($ret);
if ($ret) {
 	sg("ThisComputer.feastToday", $ret);
	say($ret, $level);
 	echo "<br>" . $ret;
}
Пример выполнения:
Сегодня: День работника кабельной промышленности.; День таможенника Российской Федерации.; День маркетолога.; Андрон Звездочет.;

В нагрузку привожу сценарий определения Рабочего/Выходного дня РБ (может быть адаптирован для других стран, параметром ?cc=by), чтобы не создавать отдельный топик.
у меня выполняется ежедневно утром в 7:03, когда все просыпаются.

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

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

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

//определение выходного дня
function isDayOff($str) {
	$url = "https://isdayoff.ru/" . $str . "?cc=by";
	$response = file_get_contents($url);
	if ($response == "1") $result = "Выходной!";
	if ($response == "0") $result = "Рабочий день.";
	return $result;
}

//дата на русском
function dateru($str) {
   $result = "";
   $iter = 0;
   while ($iter < mb_strlen($str)) {
 
     switch (mb_substr($str,$iter,1)) {
       case 'д': {
         $dayN = date("N");
         $day = "";
       switch ($dayN) {
         case 1:$day = "Понедельник";break;
         case 2:$day = "Вторник";break;
         case 3:$day = "Среда";break;
         case 4:$day = "Четверг";break;
         case 5:$day = "Пятница";break;
         case 6:$day = "Суббота";break;
         case 7:$day = "Воскресенье";break;
       }
         $iter++;
         $result .= $day;
         break;
       }
       case 'м': {
         $monthN = date("m");
         $month = "";
         switch($monthN) {
           case '01':$month = "января";break;
           case '02':$month = "февраля";break;
           case '03':$month = "марта";break;
           case '04':$month = "апреля";break;
           case '05':$month = "мая";break;
           case '06':$month = "июня";break;
           case '07':$month = "июля";break;
           case '08':$month = "августа";break;
           case '09':$month = "сентября";break;
           case '10':$month = "октября";break;
           case '11':$month = "ноября";break;
           case '12':$month = "декабря";break;
         }
         $iter++;
         $result .= $month;
         break;
   
       }
 
       default: {
         $result .=    date(mb_substr($str,$iter,1));
         $iter++;
         break;
       }
     }
 
   }
 
   return $result;
}

$ret .= "Сегодня " . date("d") . " " . dateru("м") . ". " . dateru("д") . ". ";
$ret .= isDayOff(date("Ymd")) . " ";
$ret .= "Средняя температура этой ночью на улице была " . round(getHistoryAvg("minsk.temp", strtotime("00:00")), 1) . "°, ";
$ret .= "опускалась до " . round(getHistoryMin("minsk.temp", strtotime("00:00")), 1) . "°. ";
$ret .= "Фаза луны: " . gg("ThisComputer.MoonStage") . ". ";
$ret .= "Солнце зайдет сегодня в " . gg("ThisComputer.SunSetTime") . ". ";

say($ret, $level);
echo "<br>" . $ret;
Пример выполнения:
Доброе утро! Сегодня 26 октября. Суббота. Выходной! Средняя температура этой ночью на улице была 10.6°, опускалась до 10°. Фаза луны: убывающая. Солнце зайдет сегодня в 17:49.
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Чт мар 19, 2020 1:06 pm
vitosmaxim80sad145
[qоткуда берутся данные у вас в ThisComputer.MoonStage фаза лунв , и как сделать историю для днепра или хоть для киева

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Чт мар 19, 2020 1:56 pm
xor
vitosmaxim80sad145 писал(а):[qоткуда берутся данные у вас в ThisComputer.MoonStage фаза лунв , и как сделать историю для днепра или хоть для киева
На форуме поискать фазы Луны не пробовали(

Отправлено с моего Redmi 4X через Tapatalk


Re: [Сценарий] Парсер праздников сегодня

Добавлено: Вс мар 22, 2020 8:54 am
S_Nick
vitosmaxim80sad145 писал(а):
Чт мар 19, 2020 1:06 pm
[qоткуда берутся данные у вас в ThisComputer.MoonStage фаза лунв , и как сделать историю для днепра или хоть для киева
viewtopic.php?f=27&t=2157

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Ср июн 30, 2021 3:45 pm
Максим Николаевич
S_Nick писал(а):
Пт окт 25, 2019 9:14 pm
...
У меня почему-то нет никакого ответа после выполнения скрипта о праздниках. Если есть актуальная версия поделитесь если не жалко.

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Чт июл 29, 2021 11:41 am
S_Nick
Максим Николаевич писал(а):
Ср июн 30, 2021 3:45 pm
S_Nick писал(а):
Пт окт 25, 2019 9:14 pm
...
У меня почему-то нет никакого ответа после выполнения скрипта о праздниках. Если есть актуальная версия поделитесь если не жалко.
Сейчас использую, и у меня работает:

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

<?php
//универсальный

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/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);
	
	preg_match_all("/<span class=\"cl\">(.*?)<\/span>/ui", $page_cont, $match);
	
	$ret = "Сегодня: ";
	foreach($match[1] as $key => $value) {
		$ret .= $value . ".; ";
	}
}

$ret = trim($ret);
if ($ret) {
 	sg("ThisComputer.feastToday", $ret);
	say($ret, $level);
 	echo "<br>" . $ret;
}
?>
Ответ:
Сегодня: Международный день тигра.; Финогеев день.;

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Пт июл 30, 2021 8:53 am
Максим Николаевич
S_Nick писал(а):
Чт июл 29, 2021 11:41 am
Сейчас использую, и у меня работает:
К сожалению выдаёт ошибку:
error.JPG
error.JPG (63.47 КБ) 3935 просмотров
Что я делаю не правильно?

Re: [Сценарий] Парсер праздников сегодня

Добавлено: Пт июл 30, 2021 1:12 pm
xor
Максим Николаевич писал(а):
Пт июл 30, 2021 8:53 am
S_Nick писал(а):
Чт июл 29, 2021 11:41 am
Сейчас использую, и у меня работает:
К сожалению выдаёт ошибку:
error.JPG

Что я делаю не правильно?
удалите первую и последнюю строку - при размещении в окне скрипта это не нужно. но у меня не работает) сыпет ворнингами про неверный сертификат(