Как погоду настроить

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

andgeorg
Сообщения: 1
Зарегистрирован: Пн апр 25, 2016 12:58 pm
Откуда: Саратов
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Как погоду настроить

Сообщение andgeorg » Чт июн 02, 2016 2:23 pm

Зарегистрировался на weather. API бесплатный для Developer на 500 запросов в день и 10 в минуту. В отличии от Яндекса разбирать надо несколько xml(json). Я взял astronomy для восходов и заходов, conditions - для текущей погоды, forecast10day - для прогноза на 10 дней и hourly 36-часовой прогноз использую для ближайшего прогноза на сутки.
Для "особых" любителей погоды есть почасовой прогноз на 10 дней.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Как погоду настроить

Сообщение skysilver » Чт июн 02, 2016 4:04 pm

andgeorg писал(а):В отличии от Яндекса разбирать надо несколько xml(json)
Необязательно. Можно параметры astronomy, conditions, forecast10day и др. указать в одном запросе, и тогда в ответ прилетит одна большая портянка json или xml.
За это сообщение автора skysilver поблагодарил:
andgeorg (Пт июн 03, 2016 8:58 am)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Как погоду настроить

Сообщение nick7zmail » Чт июл 14, 2016 2:02 pm

Amarok писал(а):В общем у меня такой сценарий:
СпойлерПоказать

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

$url = "";
$xml = simplexml_load_file($url);
$city = "NTuraGismeteo";

$name = $xml->location['name']; if(gg($city.".name")!=$name){sg($city.".name",$name);}
$name_r = $xml->location['name_r']; if(gg($city.".name_r")!=$name_r){sg($city.".name_r",$name_r);}
$durm = $xml->location->day[0]['durm']; if(gg($city.".durm")!=$durm){sg($city.".durm",$durm);}
$tmin = $xml->location->day[0]['tmin']; if(gg($city.".tmin")!=$tmin){sg($city.".tmin",$tmin);}
$tmax = $xml->location->day[0]['tmax']; if(gg($city.".tmax")!=$tmax){sg($city.".tmax",$tmax);}
if($tmin>0){$tmin="+".$tmin;} if($tmax>0){$tmax="+".$tmax;}
$pmin = $xml->location->day[0]['pmin']; if(gg($city.".pmin")!=$pmin){sg($city.".pmin",$pmin);}
$pmax = $xml->location->day[0]['pmax']; if(gg($city.".pmax")!=$pmax){sg($city.".pmax",$pmax);}
$wsmin = $xml->location->day[0]['wsmin']; if(gg($city.".wsmin")!=$wsmin){sg($city.".wsmin",$wsmin);}
$wsmax = $xml->location->day[0]['wsmax']; if(gg($city.".wsmax")!=$wsmax){sg($city.".wsmax",$wsmax);}
$hummin = $xml->location->day[0]['hummin']; if(gg($city.".hummin")!=$hummin){sg($city.".hummin",$hummin);}
$hummax = $xml->location->day[0]['hummax']; if(gg($city.".hummax")!=$hummax){sg($city.".hummax",$hummax);}
$cl = $xml->location->day[0]['cl']; if(gg($city.".cl")!=$cl){sg($city.".cl",$cl);}
$pt = $xml->location->day[0]['pt']; if(gg($city.".pt")!=$pt){sg($city.".pt",$pt);}
$pr = $xml->location->day[0]['pr']; if(gg($city.".pr")!=$pr){sg($city.".pr",$pr);}
$ts = $xml->location->day[0]['ts']; if(gg($city.".ts")!=$ts){sg($city.".ts",$ts);}
$descr = $xml->location->day[0]['descr']; if(gg($city.".descr")!=$descr){sg($city.".descr",$descr);}
$grademax = $xml->location->day[0]['grademax']; if(gg($city.".grademax")!=$grademax){sg($city.".grademax",$grademax);}

$today = "Сегодня ".$name_r." ".$tmin."° — ".$tmax."°. ".$descr.". ";
//Сегодня утром
if ($xml->location->day[0]->forecast['tod'] == 1){
 $t = $xml->location->day[0]->forecast->values['t'];
 if($t>0){$t="+".$t;}
 $descr = $xml->location->day[0]->forecast->values['descr'];
 $today_morning = "Утром до ".$t."°. ".$descr.". ";
}

//Сегодня днем
if ($xml->location->day[0]->forecast['tod'] == 2){
 $t = $xml->location->day[0]->forecast->values['t'];
 if($t>0){$t="+".$t;}
 $descr = $xml->location->day[0]->forecast->values['descr'];
 $today_day = "Днём до ".$t."°. ".$descr.". ";
}

//Сегодня вечером
if ($xml->location->day[0]->forecast['tod'] == 3){
 $t = $xml->location->day[0]->forecast->values['t'];
 if($t>0){$t="+".$t;}
 $descr = $xml->location->day[0]->forecast->values['descr'];
 $today_evening = "Вечером до ".$t."°. ".$descr.". ";
}

//Сегодня ночью
if ($xml->location->day[1]->forecast['tod'] == 0){
 $t = $xml->location->day[1]->forecast->values['t'];
 if($t>0){$t="+".$t;}
 $descr = $xml->location->day[1]->forecast->values['descr'];
 $today_night = "Ночью до ".$t."°. ".$descr.".";
}

$forecast = $today.$today_morning.$today_day.$today_evening.$today_night;
if(gg($city.".forecast")!=$forecast){sg($city.".forecast",$forecast);}

//Завтра
$tmin = $xml->location->day[1]['tmin'];
$tmax = $xml->location->day[1]['tmax'];
$descr = $xml->location->day[1]['descr'];
if($tmin>0){$tmin="+".$tmin;}
if($tmax>0){$tmax="+".$tmax;}
$tomorrow = "Завтра "." ".$tmin."° — ".$tmax."°. ".$descr.". ";

//Завтра ночью
if ($xml->location->day[2]->forecast['tod'] == 0){
 $t = $xml->location->day[2]->forecast->values['t'];
 if($t>0){$t="+".$t;}
 $descr = $xml->location->day[2]->forecast->values['descr'];
 $tomorrow_night = "Завтра ночью до ".$t."°. ".$descr.".";
}

$forecastTomorrow = $tomorrow.$tomorrow_night;
if(gg($city.".forecastTomorrow")!=$forecastTomorrow){sg($city.".forecastTomorrow",$forecastTomorrow);}
Значение $url я получил после регистрации на сайте Gismeteo. Для этого надо написать письмо на data@gismeteo.ru и попросить предоставить доступ к прогнозу погоды в xml-формате. Мне ответила любезная девушка, задала пару вопросов, выслала анкету (её надо заполнить) и - через некоторое время - у меня появился свой прогноз.

Приношу благодарности:
[*] сайту Gismeteo за предоставленный доступ к погодным данным на мой город
[*] менеджеру Gismeteo Валерии Сердюк за её терпение
[*] пользователю нашего форума m-malva за его код из которого я надёргал некоторые кусочки/идеи
Как скрипт? Работает? Я так понял - там только 4 раза в сутки погоду цеплять можно?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ученик
Сообщения: 230
Зарегистрирован: Чт фев 12, 2015 2:34 pm
Благодарил (а): 36 раз
Поблагодарили: 6 раз

Re: Как погоду настроить

Сообщение ученик » Пт сен 02, 2016 3:21 am

После непонятного глюка в системе
перестала корректно работать погода
в веб переменных стоит ссылка http://pogoda.tut.by/city/sankt-peterburg?pda=1
заходим туда
Завтра:
днем: +18°, переменная облачность, ночью: +11°, ясно, ветер: З — 3 м/с, давление: 759 мм.рт.ст, влажность: 62%
ставим строку поиска
Завтра.+?днем\:(.+?)<br \/>
в логах видим
2016-09-02 02:54:56 new value: +16&deg;, пасмурно, дождь, ночью: +16&deg;, облачно с прояснениями, дождь, ветер: С-С-В — 3 м/с, давление: 756 мм.рт.ст, влажность: 98%
2016-09-02 02:50:54 new value: +16&deg;, пасмурно, дождь, ночью: +16&deg;, облачно с прояснениями, дождь, ветер: С-С-В — 3 м/с, давление: 756 мм.рт.ст, влажность: 98%
откуда он берет данные?
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
Ko/|xo3HUk
Сообщения: 160
Зарегистрирован: Ср окт 07, 2015 9:36 am
Благодарил (а): 51 раз
Поблагодарили: 27 раз

Re: Как погоду настроить

Сообщение Ko/|xo3HUk » Пт сен 02, 2016 6:36 am

Так вроде всё согласно Вашему запросу "Завтра.+?днем\:(.+?)<br \/>":
На сайте сейчас:
Завтра:
днем: +18°, переменная облачность, ночью: +11°, ясно, ветер: З — 3 м/с, давление: 759 мм.рт.ст, влажность: 62%
В исходном коде страницы:

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

<b>Завтра:</b><br />
днем: +18&deg;, переменная облачность, ночью: +11&deg;, ясно, ветер: З — 3 м/с, давление: 759 мм.рт.ст, влажность: 62%<br />
Вот и выделяются от слова "днём:" до спецсимвола "<br />", т.е.

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

+18&deg;, переменная облачность, ночью: +11&deg;, ясно, ветер: З — 3 м/с, давление: 759 мм.рт.ст, влажность: 62% 
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
ученик
Сообщения: 230
Зарегистрирован: Чт фев 12, 2015 2:34 pm
Благодарил (а): 36 раз
Поблагодарили: 6 раз

Re: Как погоду настроить

Сообщение ученик » Сб сен 03, 2016 1:51 am

Это-то все верно, но только результат выделения строки по шаблону отличается у МД
сегодня тоже проверил результат один и тот же
прогноз совпадает со вчерашним
почистил таблицу в базе данных
и ничего не изменилось
+16&deg;, пасмурно, дождь, ночью: +16&deg;, облачно с прояснениями, дождь, ветер: С-С-В — 3 м/с, давление: 756 мм.рт.ст, влажность: 98%

видимо чего то с системой, придется переустанавливать.
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
ilya62
Сообщения: 1
Зарегистрирован: Ср дек 07, 2016 2:20 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Как погоду настроить

Сообщение ilya62 » Ср дек 07, 2016 2:27 pm

Всем привет! Нужна помощь новичку в настройка погоды с http://rp5.ru/Погода_в_Рязани,_Рязанская_область. Искал на форуме нашел тут как делали другие, но у меня не получается вытащить данные. Шаблон для поиска делал вот такой \<div id="ArchTemp"\>\<span class="t_0" style="display: none;"\>(.+?)\<\/span\> но данных нету (incorrect value). Заранее спасибо!
wukd
Сообщения: 23
Зарегистрирован: Чт дек 29, 2016 11:32 pm
Благодарил (а): 15 раз
Поблагодарили: 0

Re: Как погоду настроить

Сообщение wukd » Пн мар 06, 2017 3:45 am

Добрый день ! Подскажите , что поправить перестал работать сценарий

$city_id=27612;
$data_file="http://export.yandex.ru/weather-ng/fore ... xml?".rand(); // адрес xml файла

$xml = simplexml_load_file($data_file); // раскладываем xml на массив

$temp=$xml->fact->temperature;
// Если значение температуры положительно, для наглядности добавляем "+"
if ($temp>0) {$temp='+'.$temp;}
sg("Moscow.Temp",$temp);
sg("Moscow.City",Москва);
sg("Moscow.Type",$xml->fact->weather_type);
sg("Moscow.Pressure",$xml->fact->pressure);
sg("Moscow.Humidity",$xml->fact->humidity);
sg("Moscow.WindSpeed",$xml->fact->wind_speed);
sg("Moscow.Image",$xml->fact->image);
sg("Moscow.UpTime",$xml->fact->uptime);


$dir = $xml->fact->wind_direction;
switch ($dir){
case 's':
$dir="южное";
break;
case 'n':
$dir="северное";
break;
case 'w':
$dir="западное";
break;
case 'e':
$dir="восточное";
break;
case 'sw':
$dir="юго-западное";
break;
case 'nw':
$dir="северо-западное";
break;
case 'calm':
$dir="штиль";
break;
}
sg("Moscow.WindDir",$dir);
sg("Moscow.SunRise",$xml->day[0]->sunrise);
sg("Moscow.SunSet",$xml->day[0]->sunset);
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Как погоду настроить

Сообщение Vovix » Пн мар 06, 2017 6:54 pm

wukd писал(а):Добрый день ! Подскажите , что поправить перестал работать сценарий

$city_id=27612;
$data_file="http://export.yandex.ru/weather-ng/fore ... xml?".rand(); // адрес xml файла

...................
гляньте вот сюда: viewtopic.php?f=5&t=1914&start=160#p45597
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Keen Lizard
Сообщения: 7
Зарегистрирован: Пн окт 01, 2018 2:25 pm
Благодарил (а): 20 раз
Поблагодарили: 0

Re: Как погоду настроить

Сообщение Keen Lizard » Вс мар 24, 2019 3:01 pm

День добрый!
Пытаюсь вытащить с помощью регулярных выражений данные температуры с яндекс погоды. https://yandex.ru/pogoda/surgut
Хочу получить температуру минимума/максимума на 7 дней.

"dayIndex":3.+day"><span class="temp__value">(.?\d+).+i-font_face_yandex-sans-text-medium">(°)<.+<div class="temp forecast-briefly__temp(\s).+night"><span class="temp__value">(.?\d+).+"dayIndex":4}}'> - данным выражением получаю данные типа: +4° 0

Но со следующим днем такое уже не прокатывает:
"dayIndex":4.+day"><span class="temp__value">(.?\d+).+i-font_face_yandex-sans-text-medium">(°)<.+<div class="temp forecast-briefly__temp(\s).+night"><span class="temp__value">(.?\d+).+"dayIndex":5}}'> - incorrect value:
Хотя при проверке на сайте https://regex101.com/ регулярка работает.

Гуру регулярок, помогите разобраться :)
Ответить