Страница 93 из 93
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Чт ноя 18, 2021 7:50 pm
ZyaK
Подскажите пожалуйста, как быть? с наступлением холодов столкнулся с проблемой передачи символов от яндекса
в общем котел по MQTT у меня ждет знак "-" , а с яндекса прилетает не минус, а длинная черта похожая на минус, но нифига она не минус
как определить символ который необходимо ждать котлу? или как поменять символ на минус?
первая картинка знак минус, вторая хрен пойми что - получаемое с яндекса
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Чт ноя 18, 2021 10:42 pm
xor
ZyaK писал(а): Чт ноя 18, 2021 7:50 pm
Подскажите пожалуйста, как быть? с наступлением холодов столкнулся с проблемой передачи символов от яндекса
в общем котел по MQTT у меня ждет знак "-" , а с яндекса прилетает не минус, а длинная черта похожая на минус, но нифига она не минус
как определить символ который необходимо ждать котлу? или как поменять символ на минус?
первая картинка знак минус, вторая хрен пойми что - получаемое с яндекса
1. в модуле москито последний пункт Replace List - можно попробовать замену ваша_длинная_черта=-
не знаю, прокатит ли с частичной заменой?
2. привязать в моските не свойство, а метод. и в методе менять ваша_длинная_черта на минус
3. в свойстве класса можно определить правило обработки приходящего значения и там делать замену. пункт Проверка значений
пс. это в модуле яндексвезер такие данные? как он графики, интересно, отрицательных температур рисует?
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Пт ноя 19, 2021 2:03 pm
ZyaK
xor писал(а): Чт ноя 18, 2021 10:42 pm
это в модуле яндексвезер такие данные? как он графики, интересно, отрицательных температур рисует?
это уже не в модуле, а в скрипте, тут выше где то выкладывали скрипт.
Код: Выделить всё
$city = 142737; // поменять на свой
$url= 'https://yandex.ru/pogoda/' . $city;
$str = file_get_contents($url);
$dom = phpQuery::newDocument($str);
// считываем данные на несколько дней вперед
foreach($dom->find(".forecast-briefly__day-link") as $key => $value){
// Преобразуем dom объект в объект phpQuery.
//Делаем сие действие с помощью метода pq(); который является аналогом ($) в jQuery.
$pq = pq($value);
// Находим в этом элементе элементы
$day[$key]["day"] = $pq->find(".forecast-briefly__name")->text();
$day[$key]["time"] = $pq->find(".forecast-briefly__date")->text();
$day[$key]["icon"] = $pq->find(".forecast-briefly__icon")->attr('src');
$day[$key]["temp_day"] = $pq->find(".forecast-briefly__temp_day .temp__value")->text();
$day[$key]["temp_night"] = $pq->find(".forecast-briefly__temp_night .temp__value")->text();
$day[$key]["condition"] = $pq->find(".forecast-briefly__condition")->text();
}
// заменить 10 на количество дней, за которые хотите иметь погоду
for ($i = 1; $i <= 10; $i++) {
// все глобальные свойства ниже создадутся автоматически, необходимо создать только weather
sg("weather.day".$i,$day[$i]["day"] );
sg("weather.time".$i,$day[$i]["time"] );
$day[$i]["icon"] = str_replace("//yastatic.net/weather/i/icons/funky/dark/", '/cms/scenes/new/icons/', $day[$i]["icon"]);
$day[$i]["icon"] = str_replace("png", "svg", $day[$i]["icon"]);
sg("weather.icon".$i,$day[$i]["icon"] );
sg("weather.temp_day".$i,$day[$i]["temp_day"] );
sg("weather.temp_night".$i,$day[$i]["temp_night"] );
sg("weather.condition".$i,$day[$i]["condition"] );
}
//считываем данные за текущий день
$pq=pq($dom->find(".fact") );
$fact["temp"] = $pq->find(".fact__temp-wrap .link .fact__temp .temp__value")->text();
$fact["icon"] = $pq->find(".fact__temp-wrap .link .icon")->attr('src');
$fact["feel"] = $pq->find(".fact__temp-wrap .link .link__feelings .term .term__value")->text();
$fact["wind"] = $pq->find(".fact__props .fact__wind-speed .term__value .wind-speed")->text();
$fact["wind_word"] = $pq->find(".fact__props .fact__wind-speed .term__value")->attr('aria-label');
$fact["wind_dir"] = $pq->find(".fact__props .fact__wind-speed .term__value .fact__unit .icon-abbr")->text();
$fact["hum"] = $pq->find(".fact__props .fact__humidity .term__value ")->text();
$fact["hum_word"] = $pq->find(".fact__props .fact__humidity .term__value ")->attr('aria-label');
$fact["press"] = $pq->find(".fact__props .fact__pressure .term__value")->text();
$fact["press_word"] = $pq->find(".fact__props .fact__pressure .term__value")->attr('aria-label');
$fact["icon"] = str_replace("//yastatic.net/weather/i/icons/funky/light/", '/cms/scenes/new/icons/', $fact["icon"]);
$fact["icon"] = str_replace("png", "svg", $fact["icon"]);
//соберем погоду по часам
$i=0; //счетчик
foreach($dom->find(".fact__hour") as $key => $value){
$pq = pq($value);
if (substr($pq->find(".fact__hour-elem .fact__hour-label")->text(),-3)==":00" ) { //если время заканчивается на целый час
// то сохраним в массив, иначе это было время восхода/заката и это включать в массив не будем
$hours[$i]["time"] = $pq->find(".fact__hour-elem .fact__hour-label")->text();
$hours[$i]["icon"]= $pq->find(".fact__hour-elem .icon")->attr('src');
$hours[$i]["temp"]= $pq->find(".fact__hour-elem .fact__hour-temp")->text();
$i=$i+1;//увеличим счетчик
}
}
$j=0;//счетчик
for ($i = 0; $i <= count($hours); $i+=6) { //выведем только кажый 6-ой час
$hours[$i]["icon"]= str_replace("//yastatic.net/weather/i/icons/funky/flat/", '/cms/scenes/new/icons/', $hours[$i]["icon"]);
$hours[$i]["icon"] = str_replace("png", "svg", $hours[$i]["icon"]);
sg("weather.hour_time".$j,$hours[$i]["time"] );
sg("weather.hour_icon".$j,$hours[$i]["icon"] );
sg("weather.hour_temp".$j,$hours[$i]["temp"] );
$j+=1;
}
sg("weather.fact_temp",$fact["temp"] );
sg("weather.fact_icon",$fact["icon"] );
sg("weather.fact_feel",$fact["feel"] );
sg("weather.fact_wind",$fact["wind"] );
sg("weather.fact_wind_word",$fact["wind_word"] );
sg("weather.fact_wind_dir",$fact["wind_dir"] );
sg("weather.fact_hum",$fact["hum"] );
sg("weather.fact_hum_word",$fact["hum_word"] );
sg("weather.fact_press",$fact["press"] );
sg("weather.fact_press_word",$fact["press_word"] );
// заменить 10 на количество необходимых прогнозируемых дней
for ($i = 1; $i <= 10; $i++) {
// все глобальные свойства ниже создадутся автоматически, необходимо создать только weather
sg("weather.day".$i,$day[$i]["day"] );
sg("weather.time".$i,$day[$i]["time"] );
$day[$i]["icon"] = str_replace("//yastatic.net/weather/i/icons/funky/dark/", '/cms/scenes/new/icons/', $day[$i]["icon"]);
$day[$i]["icon"] = str_replace("png", "svg", $day[$i]["icon"]);
sg("weather.icon".$i,$day[$i]["icon"] );
sg("weather.temp_day".$i,$day[$i]["temp_day"] );
sg("weather.temp_night".$i,$day[$i]["temp_night"] );
sg("weather.condition".$i,$day[$i]["condition"] );
}
//восход, закат
$sunrise=pq($dom->find(".sun-card__sunrise-sunset-info_value_rise-time") );
$sunrise=substr($sunrise->text() , -5); //нужны только последние 5 символов
$sunset =pq($dom->find(".sun-card__sunrise-sunset-info_value_set-time") );
$sunset=substr($sunset->text(), -5); //нужны только последние 5 символов
sg("weather.sunrise",$sunrise);
sg("weather.sunset",$sunset);
sg("weather.updated", date('l jS \of F Y h:i:s A'));
графики вообще никак не рисует и картинки тоже почему то прикрутить не получается. в общем костыль на костыле
завтра попробую поковырять, о результате отпишусь.
upd попробовал замену в MQTT не прокатывает
вот что прилетает от яндекса
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Пт ноя 19, 2021 6:04 pm
xor
ZyaK писал(а): Пт ноя 19, 2021 2:03 pm
...
ну тут в скрипте и править перед sg этот минус для температур везде.
поискать аналог str_replace для юникода, если штатной функции нет, своё что-нибудь написать(
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Ср ноя 24, 2021 11:44 pm
Михря
dimaxus писал(а): Чт мар 11, 2021 6:37 pm
Михря писал(а): Пт янв 08, 2021 2:48 pm
чет мне надоела двух месячная борьба с модулем.
сделал парсесер export.yandex.ru/bar/reginfo.xml
Код: Выделить всё
function getinfoDataXml($city = 213) {
$info = array();
$cache_file = $_SERVER['DOCUMENT_ROOT']."/cached/weather.txt";
$url='http://export.yandex.ru/bar/reginfo.xml?region='.$city.'.xml';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($cache_file, $data);
$buf = file_get_contents($url);
if ($buf) file_put_contents($cache_file, $buf);
$xml = simplexml_load_file($cache_file);
$info['temp'] = $xml->weather->day->day_part[0]->temperature;
$info['image'] = $xml->weather->day->day_part[0]->image;
$info['image'] = str_replace("https://yastatic.net/weather/i/icons/blueye/24/", '/cms/scenes/new/icons/', $info['image']);
$info['image'] = str_replace("png", "svg", $info['image']);
$info['weather_type'] = $xml->weather->day->day_part[0]->weather_type;
$info['level']= $xml->traffic->region->level;
$info['icon']= $xml->traffic->region->icon;
$info['hint lang']= $xml->traffic->region->hint[0];
return $info;
}
$info = getinfoDataXml();
sg("weather.temp",$info['temp']);
sg("weather.image",$info['image']);
sg("weather.weather_type",$info['weather_type']);
sg("probki.level",$info['level']);
sg("probki.icon",$info['icon']);
sg("probki.hintlang",$info['hint lang']);
сносим к хренам яндекс.пробки и яндекс.погоду, функцию запихиваем в cron на каждые 15 мин. в переменной $city = 213, указываем код своего региона, создаем два объект probki и weather со свойствами из функции. архив с иконками распаковываем и закидываем /cms/scenes/new/icons/, ну или меняем на свой путь.
Добрый вечер всем. Уважаемый Михря вчера перестал работать ваш парсер , хотя последние 3 месяца прекрасно работал. Может что в Яндексе изменили, как проверить, подправить? Или проблема только у меня?
У меня все норм, что в логах?
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Пт янв 14, 2022 4:56 pm
harrysmith
Уважаемый создатель сейчас на вашем модуле висит "Получение прогноза погоды Яндекс (модуль временно не работает)."
Не смогли бы вы подсказать он еще будет работать и если будет, то когда можно на это надеяться. Если он вообще не будет работать так может стоит убрать его из модулей.
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Ср июн 28, 2023 11:09 am
PAV
В общем пока модуль не работает, переработал свой скрипт получения погоды.
Нужно получить ключ Yandex API
Пользуйтесь...
UPD добавил расшифровку погодных условий
Код: Выделить всё
header("Access-Control-Allow-Origin: *");
$opts = array(
'http' => array(
'method' => "GET",
'header' => "X-Yandex-API-Key:ВАШ КЛЮЧ API"
)
);
$url = "https://api.weather.yandex.ru/v2/informers?lat=55.755863&lon=37.6177&extra=true";
$context = stream_context_create($opts);
$contents = file_get_contents($url, false, $context);
$data = json_decode($contents);
$weather=$data->fact;
sg("Moscow.Temp",$weather->temp);
sg("Moscow.Pressure",$weather->pressure_mm);
sg("Moscow.Humidity",$weather->humidity);
sg("Moscow.WindSpeed",$weather->wind_speed);
sg("Moscow.Image","https://yastatic.net/weather/i/icons/funky/dark/".$weather->icon.".svg");
sg("Moscow.UpTime",$weather->obs_time);
$dir = $weather->wind_dir;
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);
$cond = $weather->condition;
switch ($cond){
case 'clear':
$cond="ясно";
break;
case 'partly-cloudy':
$cond="малооблачно";
break;
case 'cloudy':
$cond="облачно";
break;
case 'overcast':
$cond="пасмурно";
break;
case 'light-rain':
$cond="небольшой дождь";
break;
case 'rain':
$cond="дождь";
break;
case 'heavy-rain':
$cond="сильный дождь";
break;
case 'showers':
$cond="ливень";
break;
case 'wet-snow':
$cond="дождь со снегом";
break;
case 'light-snow':
$cond="небольшой снег";
break;
case 'snow':
$cond="снег";
break;
case 'snow-showers':
$cond="снегопад";
break;
case 'hail':
$cond="град";
break;
case 'thunderstorm':
$cond="гроза";
break;
case 'thunderstorm-with-rain':
$cond="дождь с грозой";
break;
case 'thunderstorm-with-hail':
$cond="гроза с градом";
break;
}
sg("Moscow.Type",$cond);
//Прогноз дождя
sg('Moscow.Rain',0);
$rra = $weather->condition;
$rain = (string) $rra;
if (strpos($rain, "rain") !== false) $rain = 30;
if (strpos($rain, "shower") !== false) $rain = 30;
if (strpos($rain, "hail") !== false) $rain = 30;
if (strpos($rain, "thunder") !== false) $rain = 30;
$rainp = $rain + $data->forecast->parts[0]->prec_prob + $data->forecast->parts[1]->prec_prob;
if ($rainp > 0) sg('Moscow.Rain',1);
Re: [Модуль] Погода Яндекс (yandexweather)
Добавлено: Вс июл 23, 2023 6:47 am
ZyaK
PAV писал(а): Ср июн 28, 2023 11:09 am
В общем пока модуль не работает, переработал свой скрипт получения погоды.
Нужно получить ключ Yandex API
Пользуйтесь...
у меня не заработал. ключ ввел, координаты тоже и ничего
Код: Выделить всё
Warning: A non-numeric value encountered in /var/www/html/modules/scripts/scripts.class.php(167) : eval()'d code on line 55