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

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

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

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

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

Сообщение S_Nick »

Может кому-то будет полезно.
Умный дом говорит предсказания погоды, к примеру "В ближайшие два часа осадков не ожидается" или "В течении получаса начнется дождь".
А также, если выполнять в Cron, к примеру, каждые 15 минут (чаще не рекомендую), с параметром "change=1", будет сообщать изменения погоды, если оно произошло.
Данные получает с сайта yandex.by/pogoda/
Параметр $page_url = "https://yandex.by/pogoda/minsk"; задает вашу геолокацию.
Версия сырая, могут быть ошибки.
Если есть мысли как оптимизировать улучшить код, пишите в теме.

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

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

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 = "https://yandex.by/pogoda/minsk"; //ссылка на погоду

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

if ($page_cont) {
	//ищем <p class="maps-widget-fact__title">(.*?)</p>
	preg_match_all("/<p class=\"maps-widget-fact__title\">(.*?)<\/p>/ui", $page_cont, $match);
	$ret = $match[1][0];
	if ($ret) {
 		if ($change) {
     		echo "<br>Запрос: ";
 			if (gg("yw_mycity.osadki") !== $ret) { //если изменилась погода
				say($ret, $level);
     			echo "<br>Погода изменилась!";
				sg("yw_mycity.osadki", $ret);
        	} else {
         		echo "<br>Погода не изменилась!";
        	}
    	} else {
			say($ret, $level);
  			echo "<br>" . $ret;
 			sg("yw_mycity.osadki", $ret);
    	}
	}
} else {
	echo "<br>Погода. Данные не получены.";
}
Код для Cron (Рекомендую выполнять не чаще 15 минут):
Crontab: */15 * * * *

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

runScript("yandexWeatherFact", array("change"=>"1"));
Пример выполнения:
В ближайшие два часа осадков не ожидается
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.
Последний раз редактировалось S_Nick Пн окт 28, 2019 3:07 pm, всего редактировалось 3 раза.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »

Сделал довесок на основе скрипта выше. Вывожу как альтернативу основному прогнозу. Интересно будет оповещение об осадках добавить, если скоро начнется
2019-10-27_12-43-18.png
2019-10-27_12-43-18.png (8.37 КБ) 5677 просмотров
Sergey.Chek
Сообщения: 119
Зарегистрирован: Ср фев 13, 2019 9:50 pm

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

Сообщение Sergey.Chek »

Тут пишет, но Алиса ни чего не говорит.
Вложения
IMG_20191130_222201.jpg
IMG_20191130_222201.jpg (45.17 КБ) 5461 просмотр
Raspberry pi 4
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »

Sergey.Chek писал(а): Сб ноя 30, 2019 10:26 pm Тут пишет, но Алиса ни чего не говорит.
а минмессагелевел какой установлен? по умолчанию скрипт с уровнем 1 говорит, если нужно больше, параметром надо его передавать в скрипт
Sergey.Chek
Сообщения: 119
Зарегистрирован: Ср фев 13, 2019 9:50 pm

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

Сообщение Sergey.Chek »

Тут?
Вложения
IMG_20191201_104244.jpg
IMG_20191201_104244.jpg (25.7 КБ) 5402 просмотра
Raspberry pi 4
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »

Sergey.Chek писал(а):Тут?
Ну да, поставьте либо здесь 1, либо скрипт с параметром левел>1 запускайте

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

Sergey.Chek
Сообщения: 119
Зарегистрирован: Ср фев 13, 2019 9:50 pm

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

Сообщение Sergey.Chek »

Спасибо. Заговорила.
Raspberry pi 4
Ответить