@rusgayfer

Как заменить иконки погоды на свою?

Есть код:

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <style type="text/css">
  body {
    font-family: Tahoma, sans-serif;
    font-size: 13px;
  }
  
  .pogoda_table {
    border: 1px solid #ccc;
    table-layout: fixed;
  }
  
  td {
    height: 28px;
    vertical-align: middle;
  }
  
  tr:nth-child(even) {
    background-color: #f2f2f2;
  }
  
  .td1 {
    padding-left: 5px;
    width: 40%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  
  .td2 {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  
  .td3 {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
    text-decoration: underline;
    font-weight: bold;
  }
  </style>
</head>
<body>
<?php
$city = "11114";                                                       //  GeoId города (11310 - Минусинск)
$img_folder = "https://yastatic.net/weather/i/icons/islands/32/";      //  Папка с файлами изображений (https://yastatic.net/weather/i/icons/islands/32/)
$img_ext = "png";                                                      //  Расширение файлов картинок (svg / png)
  
//  Формируем запрос
$timestamp = time();
$token = md5('eternalsun'.$timestamp);
$uuid = "8211637137c4408898aceb1097921872";
$deviceid = "315f0e802b0b49eb8404ea8056abeaaf";
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"User-Agent: yandex-weather-android/4.2.1 \n" .
               "X-Yandex-Weather-Client: YandexWeatherAndroid/4.2.1 \n" .
               "X-Yandex-Weather-Device: os=null;os_version=21;manufacturer=chromium;model=App Runtime for Chrome Dev;device_id=$deviceid;uuid=$uuid; \n" .
               "X-Yandex-Weather-Token: $token \n" .
               "X-Yandex-Weather-Timestamp: $timestamp \n" .
               "X-Yandex-Weather-UUID: $uuid \n" .
               "X-Yandex-Weather-Device-ID: $deviceid \n" .
               "Accept-Encoding: gzip, deflate \n" .
               "Host: api.weather.yandex.ru \n" .
               "Connection: Keep-Alive \n"
  )
);
  
$context = stream_context_create($opts);
  
//  Отправляем запрос
$file = @file_get_contents('https://api.weather.yandex.ru/v1/forecast?geoid='. $city. '&lang=ru', false, $context);
  
if ($file){
//  Разархивируем ответ
$yandex = gzdecode($file);
  
$data_fact = (array) json_decode($yandex)->fact;    
$temp_current = $data_fact['temp'];                     //  Текущая температура
$icon_fact = $data_fact['icon'];                        //  Иконка текущей температуры
$condition = $data_fact['condition'];                   //  Текущее описание (пасмурно, ясно)
$icon_fact = preg_replace('/_/i','-',$icon_fact);       //  Заменяем символ "_" на символ "-"
$icon_fact = preg_replace('/--/i','-',$icon_fact);      //  Заменяем символы "--" на символ "-"
$wind_speed = $data_fact['wind_speed'];                 //  Скорость ветра
$humidity = $data_fact['humidity'];                     //  Влажность (%)
$pressure_mm = $data_fact['pressure_mm'];               //  Атмосферное давление (мм рт. ст.)
  
$data_forecasts0 = (array) json_decode($yandex)->forecasts[0];
$sunrise = $data_forecasts0['sunrise'];                 //  Рассвет
$sunset = $data_forecasts0['sunset'];                   //  Закат
  
//  Находим температуру на каждый час за сутки
for ($h = 0; $h<24; $h++) {
        $hour_array1[$h] = (int) json_decode($yandex)->forecasts[0]->hours[$h]->temp;
    }
$min_hour = min($hour_array1);                          //  Находим из них минимальную
$max_hour = max($hour_array1);                          //  И максимальную температуру
  
//  Находим температуру на каждый час за следующие сутки
for ($h = 0; $h<24; $h++) {
        $hour_array2[$h] = (int) json_decode($yandex)->forecasts[1]->hours[$h]->temp;
    }
$min_hour_t = min($hour_array2);                        //  Находим из них минимальную
$max_hour_t = max($hour_array2);                        //  И максимальную температуру
  
$data_forecasts2 = (array) json_decode($yandex)->forecasts[0]->parts->day;
$avg_day = $data_forecasts2['temp_avg'];                //  Находим среднюю температуру днем
$icon_day = $data_forecasts2['icon'];                   //  Иконка средней температуры днем
$icon_day = preg_replace('/_/i','-',$icon_day);         //  Заменяем символ "_" на символ "-"
$icon_day = preg_replace('/--/i','-',$icon_day);        //  Заменяем символы "--" на символ "-"
  
$data_forecasts3 = (array) json_decode($yandex)->forecasts[0]->parts->night;
$avg_night = $data_forecasts3['temp_avg'];              //  Находим среднюю температуру ночью
$icon_night = $data_forecasts3['icon'];                 //  Иконка средней температуры ночью
$icon_night = preg_replace('/_/i','-',$icon_night);     //  Заменяем символ "_" на символ "-"
$icon_night = preg_replace('/--/i','-',$icon_night);    //  Заменяем символы "--" на символ "-"
  
$data_forecasts4 = (array) json_decode($yandex)->forecasts[1]->parts->day;
$avg_day_t = $data_forecasts4['temp_avg'];              //  Находим среднюю температуру завтра днем
$icon_day_t = $data_forecasts4['icon'];                 //  Иконка средней температуры завтра днем
$icon_day_t = preg_replace('/_/i','-',$icon_day_t);     //  Заменяем символ "_" на символ "-"
$icon_day_t = preg_replace('/--/i','-',$icon_day_t);    //  Заменяем символы "--" на символ "-"
  
  
$data_forecasts5 = (array) json_decode($yandex)->forecasts[1]->parts->night;
$avg_night_t = $data_forecasts5['temp_avg'];            //  Находим среднюю температуру завтра ночью
$icon_night_t = $data_forecasts5['icon'];               //  Иконка средней температуры завтра ночью
$icon_night_t = preg_replace('/_/i','-',$icon_night_t); //  Заменяем символ "_" на символ "-"
$icon_night_t = preg_replace('/--/i','-',$icon_night_t);//  Заменяем символы "--" на символ "-"
  
//  Если значение температуры положительно, для наглядности добавляем "+"
if ($temp_current>0) {$temp_current='+'.$temp_current;}
if ($min_hour>0) {$min_hour='+'.$min_hour;}
if ($max_hour>0) {$max_hour='+'.$max_hour;}
if ($min_hour_t>0) {$min_hour_t='+'.$min_hour_t;}
if ($max_hour_t>0) {$max_hour_t='+'.$max_hour_t;}
if ($avg_day>0) {$avg_day='+'.$avg_day;}
if ($avg_night>0) {$avg_night='+'.$avg_night;}
if ($avg_day_t>0) {$avg_day_t='+'.$avg_day_t;}
if ($avg_night_t>0) {$avg_night_t='+'.$avg_night_t;}
}
?>
  <table class="pogoda_table" width="100%" cellpadding="0" cellspacing="0" style="background-color: #f8f8f8">
    <tr>
      <td class="td1" title="« Текущая температура »"><b>Сейчас:</b></td>
      <td class="td2" title="« Текущая температура »">
        <?php echo $temp_current; ?> <sup>o</sup>C
        <?php echo ("<img src=\"".$img_folder.$icon_fact ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
        <?php echo $condition; ?>
	  </td>
    </tr>
    <tr>
      <td class="td1" title="« Скорость ветра »">Ветер:
        <?php echo $wind_speed; ?> м/с</td>
      <td class="td2" title="« Влажность воздуха »">Влажность:
        <?php echo $humidity; ?>%</td>
    </tr>
    <tr>
      <td class="td1" title="« Атмосферное давление »">Давление:</td>
      <td class="td2" title="« Атмосферное давление »">
        <?php echo $pressure_mm; ?> мм рт. ст.</td>
    </tr>
    <tr>
      <td class="td1" title="« Время восхода солнца »">Восход:
        <?php echo $sunrise; ?>
      </td>
      <td class="td2" title="« Время заката солнца »">Закат:
        <?php echo $sunset; ?>
      </td>
    </tr>
    <tr>
      <td class="td1" title="« Минимальная и максимальная температура сегодня »"><b>Сегодня:</b></td>
      <td class="td2" title="« Минимальная и максимальная температура сегодня »">от
        <?php echo $min_hour; ?> до
        <?php echo $max_hour; ?> <sup>o</sup>C</td>
    </tr>
    <tr>
      <td class="td1" title="« Средняя температура сегодня днем »">Днём:
        <?php echo $avg_day; ?>
        <?php echo ("<img src=\"".$img_folder. $icon_day ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
      </td>
      <td class="td2" title="« Средняя температура сегодня ночью »">Ночью:
        <?php echo $avg_night; ?>
        <?php echo ("<img src=\"".$img_folder.$icon_night ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
      </td>
    </tr>
    <tr>
      <td class="td1" title="« Минимальная и максимальная температура завтра »"><b>Завтра:</b></td>
      <td class="td2" title="« Минимальная и максимальная температура завтра »">от
        <?php echo $min_hour_t; ?> до
        <?php echo $max_hour_t; ?> <sup>o</sup>C</td>
    </tr>
    <tr>
      <td class="td1" title="« Средняя температура завтра днем »">Днём:
        <?php echo $avg_day_t; ?>
        <?php echo ("<img src=\"".$img_folder.$icon_day_t ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
      </td>
      <td class="td2" title="« Средняя температура завтра ночью »">Ночью:
        <?php echo $avg_night_t; ?>
        <?php echo ("<img src=\"".$img_folder.$icon_night_t ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
      </td>
    </tr>
    <tr>
      <td class="td3" title="« Перейти на сайт яндекса »" colspan="2">
        <a href="https://pogoda.yandex.ru/<?php echo $city ?>" target="_blank">Прогноз на неделю</a>
      </td>
    </tr>
  </table>
</body>
</html>


Нужно заменить стандартные иконки погоды на свои, как это реализовать? Вот например, загрузил нужные картинки в папку на сайте и теперь нужно к каждой иконки яндекса заменить на свою подходящую
Выводит иконку текущей погоды вот так:
<?php echo ("<img src=\"".$img_folder.$icon_fact ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>


Документация API Яндекс Погоды
  • Вопрос задан
  • 808 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Доброе утро.
Замените путь к изображениям на свой
$img_folder = "https://yastatic.net/weather/i/icons/islands/32/";  // тут путь к Вашим изображениям
$img_ext = "png";  // укажите своё расширение файлов изобажений
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
04 мая 2024, в 05:49
10000 руб./за проект
04 мая 2024, в 03:57
10000 руб./за проект
04 мая 2024, в 01:47
2000 руб./за проект