Там действительно нет прогноза. Только на завтра (tomorrow)nick7zmail писал(а): Был вроде...недавно смотрел
Отправлено с моего Xperia Z через Tapatalk
А прогноз можно попробовать парсить с официального сайта погоды Яндекс.
Правда пока не делал
Модератор: immortal
Там действительно нет прогноза. Только на завтра (tomorrow)nick7zmail писал(а): Был вроде...недавно смотрел
Отправлено с моего Xperia Z через Tapatalk
Код: Выделить всё
https://weather.com/
Я себе заглушку нарисовал как только начала глючить погода и теперь не буду привязываться к сервисуnick7zmail писал(а): UPD действителтно уже нету...мда...над чёт думать...на ow переходить...или другие сервисы искать...
Код: Выделить всё
//Запускаем проверку каждые 10 минут
setTimeOut('SetGlobalWeather','runScript("SetGlobalWeather");',10*60);
// Кол-во часов - актуален прогноз
$hour=2;
//Проверяем как давно обновилась погода с яндекеса
$ywtimestamp=strtotime(getGlobal("yw_setting.data_update"));
if ( $ywtimestamp === FALSE){
say("Отсутствует информация об обновлении погоды с яндекса",1);
}else{
if ($ywtimestamp<time()){
$ywupdate=time()-$ywtimestamp;
$ywupdate=($ywupdate/60/60);
$ywupdate=round($ywupdate);
// say("Прогноз с яндекса обновлялся ".$ywupdate." ".pluralForm($ywupdate, 'час', 'часа', 'часов')." назад",0);
echo "Прогноз с яндекса обновлялся ".$ywupdate." ч<br>";
}else{
say("Данные об обновлении погоды с яндекса не корректны",1);
echo "Данные об обновлении погоды с яндекса не корректны<br>";
}
}
//Проверяем как давно обновилась погода с Open Weather Map
$owdate=strtotime(getGlobal("ow_city.data_update"));
if ( $owdate === FALSE){
say("Отсутствует информация об обновлении погоды c Open Weather Map",1);
}else{
if ($owdate<time()){
$owdate=time()-$owdate;
$owdate=($owdate/60/60);
$owdate=round($owdate);
// say("Последний раз прогноз c Open Weather Map обновился ".$owdate." ".pluralForm($owdate, 'день', 'дня', 'дней')." назад",1);
echo "Прогноз c Open Weather Map обновился ".$owdate."ч <br>";
}else{
say("Данные об обновлении прогноза погоды c Open Weather Map не корректны",1);
}
if ($ywupdate <= $hour){
if(gg("gw_fact.weather")!="Погода Yandex"){
say("Меняю поставщика «погодного» контента",1);
say("Теперь погода с Яндекса.",5);
echo "Погода с Яндекса.<br>";
}
sg("gw_fact.weather", "Погода Yandex");
sg("gw_fact.temperature", gg("yw_fact.temperature"));
sg("gw_fact.weather_type", gg("yw_fact.weather_type "));
sg("gw_fact.wind_speed", gg("yw_fact.wind_speed"));
sg("gw_fact.humidity", gg("yw_fact.humidity"));
sg("gw_fact.pressure", gg("yw_fact.pressure"));
sg("gw_fact.update", strtotime(getGlobal("yw_setting.data_update")));
sg("gw_fact.image", gg("yw_fact.image"));
$img="/cached/yaweather/48x48/".gg("yw_fact.image").".png";
sg("gw_fact.image_p",$img);
sg("gw_day0.day_weather_type", gg("yw_day0.day_weather_type"));
sg("gw_day0.temp_day", gg("yw_day0.day_temperatureData_to"));
sg("gw_day0.day_wind_speed", gg("yw_day0.day_wind_speed"));
sg("gw_day0.day_humidity", gg("yw_day0.day_humidity"));
sg("gw_day1.day_weather_type", gg("yw_day1.day_weather_type"));
sg("gw_day1.temp_day", gg("yw_day1.day_temperatureData_to"));
sg("gw_day1.day_wind_speed", gg("yw_day1.day_wind_speed"));
sg("gw_day1.day_humidity", gg("yw_day1.day_humidity"));
}else if($owdate <= $hour){
if(gg("gw_fact.weather")!="Погода Open Weather Map"){
say("Меняю поставщика «погодного» контента",1);
say("Теперь погода с Open Weather Map.",5);
echo "Погода с Open Weather Map.<br>";
}
sg("gw_fact.weather", "Погода Open Weather Map");
sg("gw_fact.weather_type", gg("ow_fact.weather_type "));
sg("gw_fact.temperature", round(gg("ow_fact.temperature")));
sg("gw_fact.wind_speed", round(gg("ow_fact.wind_speed")));
sg("gw_fact.humidity", round(gg("ow_fact.humidity")));
sg("gw_fact.pressure", gg("ow_fact.pressure_mmhg"));
sg("gw_fact.update", strtotime(gg("ow_day0.date")));
sg("gw_fact.image", gg("ow_fact.image"));
$img="/cached/openweather/image/".gg("ow_fact.image").".png";
sg("gw_fact.image_p",$img);
sg("gw_day0.day_weather_type", gg("ow_day0.weather_type"));
sg("gw_day0.temp_day", round(gg("ow_day0.temp_day")));
sg("gw_day0.day_wind_speed", round(gg("ow_day0.wind_speed")));
sg("gw_day0.day_humidity", round(gg("ow_day0.humidity")));
sg("gw_day1.day_weather_type", gg("ow_day1.weather_type"));
sg("gw_day1.temp_day", round(gg("ow_day1.temp_day")));
sg("gw_day1.day_wind_speed", round(gg("ow_day1.wind_speed")));
sg("gw_day1.day_humidity", round(gg("ow_day1.humidity")));
}else{
rs ('CheckGismeteo');
if(gg("gw_fact.weather")!="Погода c Gismeteo!!!"){
say("Данные об обновлении прогноза погоды устарели",5);
echo "Данные об обновлении прогноза погоды устарели<br>";
sg("gw_fact.weather", "Погода c Gismeteo");
sg("gw_fact.temperature", gg("gisw_fact.temperature"));
sg("gw_fact.weather_type", gg("gisw_fact.weather_type"));
sg("gw_fact.wind_speed", gg("gisw_fact.wind_speed"));
sg("gw_fact.humidity", gg("gisw_fact.humidity"));
sg("gw_fact.pressure", gg("gisw_fact.pressure"));
sg("gw_fact.image", gg("gisw_fact.image"));
$img="/cached/yaweather/48x48/".gg("gisw_fact.image").".png";
sg("gw_fact.image_p",$img);
sg("gw_day1.day_weather_type", "NA");
sg("gw_day1.temp_day", "NA");
sg("gw_day1.day_wind_speed", "NA");
sg("gw_day1.day_humidity", "NA");
}
}
}
Код: Выделить всё
if (getGlobal('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
say("При выполнении запроса 'Гисметео' требуется подключение к сети интернет.", 1);
clearTimeout('CheckGismeteoExport');
}else{
setTimeOut('CheckGismeteoExport','runScript("CheckGismeteoExport");',10*60);
//определим текущей день
$cur_time=date('G');
$cur_date=date('d.m.Y');
//определяем время суток
switch($cur_time){
case ($cur_time>=3 && $cur_time<9):
$tod=1;
break;
case ($cur_time>=9 && $cur_time<15):
$tod=2;
break;
case ($cur_time>=15 && $cur_time<21):
$tod=3;
break;
case (($cur_time>=21 && $cur_time<23) ||
($cur_time>=0 && $cur_time<3)):
$tod=0;
break;
default: $tod=0;
}
$data_file="http://informer.gismeteo.ru/xml/".gg("gisw_setting.city_id")."_1.xml";
$xml = simplexml_load_file($data_file);
foreach ($xml->REPORT->TOWN->FORECAST as $forecast ){
$xml_date=$forecast["day"].'.'.$forecast["month"].'.'.$forecast["year"];
if ($forecast["tod"] == $tod && $cur_date == $xml_date){
$TEMPmin0=$forecast->TEMPERATURE['max'];
$TEMPmax0=$forecast->TEMPERATURE['min'];
$temp0=($TEMPmin0+$TEMPmax0)/2;
sg("gisw_fact.temperature",$temp0);
sg("gisw_fact_min.temperature",$TEMPmin0);
sg("gisw_fact_max.temperature",$TEMPmax0);
$WINDmin0=$forecast->WIND ['max'];
$WINDmax0=$forecast->WIND ['min'];
$wind0=($WINDmin0+$WINDmax0)/2;
sg("gisw_fact.wind_speed",$wind0);
sg("gisw_fact.wind_speed_min",$WINDmin0);
sg("gisw_fact.wind_speed_max",$WINDmax0);
$PRESSUREmin0=$forecast->PRESSURE ['max'];
$PRESSUREmax0=$forecast->PRESSURE ['min'];
$pressure0=($PRESSUREmin0+$PRESSUREmax0)/2;
sg("gisw_fact.pressure",$pressure0);
sg("gisw_fact.pressure_min",$PRESSUREmin0);
sg("gisw_fact.pressure_max",$PRESSUREmax0);
$RELWETmin0=$forecast->RELWET ['max'];
$RELWETmax0=$forecast->RELWET ['min'];
$humidity0=($RELWETmin0+$RELWETmax0)/2;
sg("gisw_fact.humidity",$humidity0);
sg("gisw_fact.humidity_max",$RELWETmax0);
sg("gisw_fact.humidity_min",$RELWETmin0);
$cloudiness=$forecast->PHENOMENA ['cloudiness'];
if ($cloudiness==0){
$cloudiness="ясно";
$img="skc";
}
if ($cloudiness==1){
$cloudiness="малооблачно";
$img="bkn";
}
if ($cloudiness==2){
$cloudiness="облачно";
$img="ovc";
}
if ($cloudiness==3){
$cloudiness="пасмурно";
$img="ovc";
}
sg("gisw_fact.cloudiness",$cloudiness);
$rpower=$forecast->PHENOMENA ['rpower'];
sg("gisw_fact.rpower",$rpower);
$spower=$forecast->PHENOMENA ['spower'];
sg("gisw_fact.spower",$spower);
$precipitation=$forecast->PHENOMENA ['precipitation'];
if($precipitation==4 && $rpower==0) $precipitation="возможен дождь";
if($precipitation==4 && $rpower==1){
$precipitation="дождь";
$img=$img."_-ra";
}
if($precipitation==5 && $rpower==0) $precipitation="возможен ливень";
if($precipitation==5 && $rpower==1){
$precipitation="ливень";
$img=$img."_+ra";
}
if($precipitation==6 && $rpower==0) $precipitation="возможен снег";
if($precipitation==6 && $rpower==1){
$precipitation="снег";
$img=$img."_-sn";
}
if($precipitation==7 && $rpower==0) $precipitation="возможен снегопад";
if($precipitation==7 && $rpower==1){
$precipitation="снегопад";
$img=$img."_+sn";
}
if($precipitation==8){
$precipitation="гроза";
$img=$img."ovs_ts_ra";
}
if($precipitation==9){
$precipitation="нет данных";
$img="na";
}
if($precipitation==10) $precipitation="без осадков";
sg("gisw_fact.precipitation",$precipitation);
$weather_type =$cloudiness." ".$precipitation;
sg("gisw_fact.weather_type",$weather_type);
if (gg('DarknessMode.active')==1){
$img=$img."_n";
sg('gisw_fact.img',$img);
}else{
$img=$img."_d";
sg('gisw_fact.img',$img);
}
$hour=$xml->REPORT->TOWN->FORECAST['hour'];
sg('gisw_fact.update',"$hour:00:00 $xml_date");
}
}
}
Получается с гисметео он видит только сегодня и завтра?m-malva писал(а):это с гисметео
Код: Выделить всё
$city_id=172; //Уфа
//$city_id=getGlobal('YandexUfa.Id'); //ID города узнаем тут: https://export.yandex.ru/bar/reginfo.xml
$data_file="https://export.yandex.ru/bar/reginfo.xml?region=$city_id.xml?".rand(); // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
if($xml === false ) { // Проверить можно также !is_object( $xml ) или !$xml
setTimeOut("timer_Pogoda_timeout", "runScript('Pogoda_Ufa');", 2);
return;
}
// температура сейчас
$temp=$xml->weather->day->day_part->temperature;
if (date('G')==13) {sg("YandexUfa.Temp13h",$temp);}
if (date('G')==21) {sg("YandexUfa.Temp21h",$temp);}
$temp = getTempSign($temp); // Если значение температуры положительно, для наглядности добавляем "+"
// сохраняем основные параметры текущей погоды
sg("YandexUfa.City",$xml->weather->day->title);
sg("YandexUfa.Temp",$temp);
sg("YandexUfa.Type",$xml->weather->day->day_part->weather_type);
sg("YandexUfa.Pressure",$xml->weather->day->day_part->pressure);
// Влажность
sg("YandexUfa.Humidity",$xml->weather->day->day_part->dampness);
sg("YandexUfa.WindSpeed",$xml->weather->day->day_part->wind_speed);
sg("YandexUfa.Image",$xml->weather->day->day_part->image);
sg("YandexUfa.Image2",$xml->weather->day->day_part->{'image-v3'});
// Направление ветра
sg("YandexUfa.WindDir",$xml->weather->day->day_part->wind_direction);
// Солнце: восход/закат
sg("YandexUfa.SunRise",$xml->weather->day->sun_rise);
sg("YandexUfa.SunSet",$xml->weather->day->sunset);
$DayStart = explode(":",gg("YandexUfa.SunRise"));
$DayEnd = explode(":",gg("YandexUfa.SunSet"));
$h_start = (int)$DayStart[0];
$m_start = (int)$DayStart[1];
$h_end = (int)$DayEnd[0];
$m_end = (int)$DayEnd[1];
$dh = $h_end - $h_start;
$dm = $m_end - $m_start;
if ($dm<0){
$dh=$dh-1;
$dm=$dm+60;
}
sg("YandexUfa.LongTag","$dh:$dm");
// длинный текстовый прогноз погоды
// $metcast="";
$metcast="На улице ".gg("YandexUfa.Type").".";
// ветер
$WindSpeed=(float)gg("YandexUfa.WindSpeed");
if ($WindSpeed<1) { $metcast.=' Ветра, скорее всего, нет.';
} elseif ($WindSpeed<3) { $metcast.=' Возможен слабый ветер.';
} elseif ($WindSpeed<8) { $metcast.=' Возможен умеренный ветер.';
} elseif ($WindSpeed<13) { $metcast.=' Возможен сильный ветер.';
} elseif ($WindSpeed<20) { $metcast.=' Возможен довольно сильный ветер.';
} elseif ($WindSpeed<28) { $metcast.=' Возможен штормовой ветер.';
} else { $metcast.=' Ветер очень очень сильный, УРАГАН, ';
}
//$metcast.= gg("YandexUfa.WindDirText");
$w=round(strip_tags(gg("YandexUfa.Temp")));
$tempw=$w;
if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" плюс "; }
if($tempw >= 11 and $tempw <= 14){ $tempcels=" градусов";}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}
if($tempw == 0 or $tempw >= 5 and $tempw <= 9){ $tempcels=" градусов"; }
if($tempw == 1){ $tempcels=" градус"; }
if($tempw >= 2 and $tempw <= 4){ $tempcels=" градуса"; }
}
$metcast2.=$metcast;
$metcast.=' Температура '.gg("YandexUfa.Temp").' '.$tempcels.'.';
$tm=(float)gg("YandexUfa.Temp");
if ($tm<-40) { $metcast.=' Мы морозов не боимся!';
} elseif ($tm<-30) { $metcast.=' Очень холодно, оденьтесь теплее.';
} elseif ($tm<-20) { $metcast.=' Самое время есть мороженое.';
} elseif ($tm<-10) { $metcast.=' Холодновато.';
} elseif ($tm<-3) { $metcast.=' Не особо холодно.';
} elseif ($tm<3) { $metcast.=' Значит, возможно, гололёд.';
} elseif ($tm<10) { $metcast.=' Тепловато.';
} elseif ($tm<25) { $metcast.=' Тепло.';
} elseif ($tm<30) { $metcast.=' Жарко.';
} elseif ($tm>30) { $metcast.=' Ташкент.';
}
$metcast2.=' Давление '.gg("YandexUfa.Pressure").' мм рт.ст.';
$metcast2.=' Влажность '.gg("YandexUfa.Humidity").' %';
sg('YandexUfa.metcast',$metcast2);
$metcast.=' Восход солнца сегодня в '.gg("YandexUfa.SunRise").',';
$metcast.=' закат в '.gg("YandexUfa.SunSet").'.';
$metcast.=' долгота дня '.getGlobal('YandexUfa.LongTag').'.';
sg('YandexUfa.WeatherDnes',$metcast);
/////-------------------///
//Дата и время последнего обновления
sg("YandexUfa.UpdatedTime", date( "H:i", time()));
sg("YandexUfa.updatedDateTime", date( "H:i - d.m.Y", time()));
say('Погода обновлена',0);
// КОНЕЦ ОСНОВНОГО БЛОКА
// Функция - добавления "+" к положительной температуре
function getTempSign($temp)
{
$temp = (int)$temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// Функция - получить направления ветра в МАССИВ
function getWindDirection($wind)
{
$wind = (string)$wind;
$wind_direction = array('s'=>'↑ ю',
'n'=>'↓ с',
'w'=>'→ з',
'e'=>'← в',
'sw'=>'↗ юз',
'se'=>'↖ юв',
'nw'=>'↘ сз',
'ne'=>'↙ св');
$wind_dirtxt = array('s'=>'южный',
'n'=>'северный',
'w'=>'западный',
'e'=>'восточный',
'sw'=>'юго-западный',
'se'=>'юго-восточный',
'nw'=>'северо-западный',
'ne'=>'северо-восточный');
return array ($wind_direction[$wind], $wind_dirtxt[$wind]);
}
// Функция - получить локализованный день недели
function getDayDate($date)
{
$date = strtotime($date);
// $months = array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$days = array('ВС','ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ');
// return $days[date('w', $date)].', '.(int)date('d',$date).' '.$months[date('n', $date)].' '.date('y',$date).' г.';
return $days[date('w', $date)];
}
В вытягивании текущей погоды не особо смысл есть...иногда достаточно взглянуть в окно, даже без датчиков, учитывая что временами когда яндекс говорит - ясно, за окном уже гроза =D...DiArt писал(а):Как и обещал мой скрипт который вытягивает ТЕКУЩУЮ погоду с яндекса. Может кому и пригодится:
Меняем YandexUfa на свой город, и меняем runScript('Pogoda_Ufa'); на название своего скрипта
Можно попробовать вытаскивать при помощи регулярок напрямую с сайта погоды яндекса https://pogoda.yandex.ru/ufa/ или гисметео https://www.gismeteo.ru/city/weekly/4588/. не xml, а именно разбор сайта через веб-переменные, но лучше через средства php чтобы не дергать один и тот же сайт по нескольку раз вытаскивая разные значения (1 раз температуру, 1 раз влажность и т.д.)nick7zmail писал(а): В вытягивании текущей погоды не особо смысл есть...иногда достаточно взглянуть в окно, даже без датчиков, учитывая что временами когда яндекс говорит - ясно, за окном уже гроза =D...
Тут вся фишка в прогнозе была))) Прогноз яндекс больше отдавать не хочет. На гисметео - только 3 дня (и то не 3 дня, а текущая погода/ночь первого дня и день/ночь второго дня).