Страница 14 из 15

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

Добавлено: Чт июн 02, 2016 2:23 pm
andgeorg
Зарегистрировался на weather. API бесплатный для Developer на 500 запросов в день и 10 в минуту. В отличии от Яндекса разбирать надо несколько xml(json). Я взял astronomy для восходов и заходов, conditions - для текущей погоды, forecast10day - для прогноза на 10 дней и hourly 36-часовой прогноз использую для ближайшего прогноза на сутки.
Для "особых" любителей погоды есть почасовой прогноз на 10 дней.

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

Добавлено: Чт июн 02, 2016 4:04 pm
skysilver
andgeorg писал(а):В отличии от Яндекса разбирать надо несколько xml(json)
Необязательно. Можно параметры astronomy, conditions, forecast10day и др. указать в одном запросе, и тогда в ответ прилетит одна большая портянка json или xml.

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

Добавлено: Чт июл 14, 2016 2:02 pm
nick7zmail
Amarok писал(а):В общем у меня такой сценарий:
SPOILERSPOILER_SHOW

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

$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. Для этого надо написать письмо на [email protected] и попросить предоставить доступ к прогнозу погоды в xml-формате. Мне ответила любезная девушка, задала пару вопросов, выслала анкету (её надо заполнить) и - через некоторое время - у меня появился свой прогноз.

Приношу благодарности:
[*] сайту Gismeteo за предоставленный доступ к погодным данным на мой город
[*] менеджеру Gismeteo Валерии Сердюк за её терпение
[*] пользователю нашего форума m-malva за его код из которого я надёргал некоторые кусочки/идеи
Как скрипт? Работает? Я так понял - там только 4 раза в сутки погоду цеплять можно?

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%
откуда он берет данные?

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

Добавлено: Пт сен 02, 2016 6:36 am
Ko/|xo3HUk
Так вроде всё согласно Вашему запросу "Завтра.+?днем\:(.+?)<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% 

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

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

видимо чего то с системой, придется переустанавливать.

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

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

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

Добавлено: Пн мар 06, 2017 3:45 am
wukd
Добрый день ! Подскажите , что поправить перестал работать сценарий

$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);

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

Добавлено: Пн мар 06, 2017 6:54 pm
Vovix
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

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

Добавлено: Вс мар 24, 2019 3:01 pm
Keen Lizard
День добрый!
Пытаюсь вытащить с помощью регулярных выражений данные температуры с яндекс погоды. 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/ регулярка работает.

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