Guest User

Parser Yandex Weather

a guest
May 20th, 2016
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.71 KB | None | 0 0
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4.   <meta charset="utf-8">
  5.   <style type="text/css">
  6.   body {
  7.     font-family: Tahoma, sans-serif;
  8.     font-size: 13px;
  9.   }
  10.  
  11.   .pogoda_table {
  12.     border: 1px solid #ccc;
  13.     table-layout: fixed;
  14.   }
  15.  
  16.   td {
  17.     height: 28px;
  18.     vertical-align: middle;
  19.   }
  20.  
  21.   tr:nth-child(even) {
  22.     background-color: #f2f2f2;
  23.   }
  24.  
  25.   .td1 {
  26.     padding-left: 5px;
  27.     width: 40%;
  28.     white-space: nowrap;
  29.     overflow: hidden;
  30.     text-overflow: ellipsis;
  31.   }
  32.  
  33.   .td2 {
  34.     white-space: nowrap;
  35.     overflow: hidden;
  36.     text-overflow: ellipsis;
  37.   }
  38.  
  39.   .td3 {
  40.     white-space: nowrap;
  41.     overflow: hidden;
  42.     text-overflow: ellipsis;
  43.     text-align: center;
  44.     text-decoration: underline;
  45.     font-weight: bold;
  46.   }
  47.   </style>
  48. </head>
  49. <body>
  50. <?php
  51. $city = "11310";                                                       //  GeoId города (11310 - Минусинск)
  52. $img_folder = "https://yastatic.net/weather/i/icons/islands/32/";      //  Папка с файлами изображений (https://yastatic.net/weather/i/icons/islands/32/)
  53. $img_ext = "png";                                                      //  Расширение файлов картинок (svg / png)
  54.  
  55. //  Формируем запрос
  56. $timestamp = time();
  57. $token = md5('eternalsun'.$timestamp);
  58. $uuid = "8211637137c4408898aceb1097921872";
  59. $deviceid = "315f0e802b0b49eb8404ea8056abeaaf";
  60. $opts = array(
  61.   'http'=>array(
  62.     'method'=>"GET",
  63.     'header'=>"User-Agent: yandex-weather-android/4.2.1 \n" .
  64.                "X-Yandex-Weather-Client: YandexWeatherAndroid/4.2.1 \n" .
  65.                "X-Yandex-Weather-Device: os=null;os_version=21;manufacturer=chromium;model=App Runtime for Chrome Dev;device_id=$deviceid;uuid=$uuid; \n" .
  66.                "X-Yandex-Weather-Token: $token \n" .
  67.                "X-Yandex-Weather-Timestamp: $timestamp \n" .
  68.                "X-Yandex-Weather-UUID: $uuid \n" .
  69.                "X-Yandex-Weather-Device-ID: $deviceid \n" .
  70.                "Accept-Encoding: gzip, deflate \n" .
  71.                "Host: api.weather.yandex.ru \n" .
  72.                "Connection: Keep-Alive \n"
  73.   )
  74. );
  75.  
  76. $context = stream_context_create($opts);
  77.  
  78. //  Отправляем запрос
  79. $file = @file_get_contents('https://api.weather.yandex.ru/v1/forecast?geoid='. $city. '&lang=ru', false, $context);
  80.  
  81. if ($file){
  82. //  Разархивируем ответ
  83. $yandex = gzdecode($file);
  84.  
  85. $data_fact = (array) json_decode($yandex)->fact;    
  86. $temp_current = $data_fact['temp'];                     //  Текущая температура
  87. $icon_fact = $data_fact['icon'];                        //  Иконка текущей температуры
  88. $icon_fact = preg_replace('/_/i','-',$icon_fact);       //  Заменяем символ "_" на символ "-"
  89. $icon_fact = preg_replace('/--/i','-',$icon_fact);      //  Заменяем символы "--" на символ "-"
  90. $wind_speed = $data_fact['wind_speed'];                 //  Скорость ветра
  91. $humidity = $data_fact['humidity'];                     //  Влажность (%)
  92. $pressure_mm = $data_fact['pressure_mm'];               //  Атмосферное давление (мм рт. ст.)
  93.  
  94. $data_forecasts0 = (array) json_decode($yandex)->forecasts[0];
  95. $sunrise = $data_forecasts0['sunrise'];                 //  Рассвет
  96. $sunset = $data_forecasts0['sunset'];                   //  Закат
  97.  
  98. //  Находим температуру на каждый час за сутки
  99. for ($h = 0; $h<24; $h++) {
  100.         $hour_array1[$h] = (int) json_decode($yandex)->forecasts[0]->hours[$h]->temp;
  101.     }
  102. $min_hour = min($hour_array1);                          //  Находим из них минимальную
  103. $max_hour = max($hour_array1);                          //  И максимальную температуру
  104.  
  105. //  Находим температуру на каждый час за следующие сутки
  106. for ($h = 0; $h<24; $h++) {
  107.         $hour_array2[$h] = (int) json_decode($yandex)->forecasts[1]->hours[$h]->temp;
  108.     }
  109. $min_hour_t = min($hour_array2);                        //  Находим из них минимальную
  110. $max_hour_t = max($hour_array2);                        //  И максимальную температуру
  111.  
  112. $data_forecasts2 = (array) json_decode($yandex)->forecasts[0]->parts->day;
  113. $avg_day = $data_forecasts2['temp_avg'];                //  Находим среднюю температуру днем
  114. $icon_day = $data_forecasts2['icon'];                   //  Иконка средней температуры днем
  115. $icon_day = preg_replace('/_/i','-',$icon_day);         //  Заменяем символ "_" на символ "-"
  116. $icon_day = preg_replace('/--/i','-',$icon_day);        //  Заменяем символы "--" на символ "-"
  117.  
  118. $data_forecasts3 = (array) json_decode($yandex)->forecasts[0]->parts->night;
  119. $avg_night = $data_forecasts3['temp_avg'];              //  Находим среднюю температуру ночью
  120. $icon_night = $data_forecasts3['icon'];                 //  Иконка средней температуры ночью
  121. $icon_night = preg_replace('/_/i','-',$icon_night);     //  Заменяем символ "_" на символ "-"
  122. $icon_night = preg_replace('/--/i','-',$icon_night);    //  Заменяем символы "--" на символ "-"
  123.  
  124. $data_forecasts4 = (array) json_decode($yandex)->forecasts[1]->parts->day;
  125. $avg_day_t = $data_forecasts4['temp_avg'];              //  Находим среднюю температуру завтра днем
  126. $icon_day_t = $data_forecasts4['icon'];                 //  Иконка средней температуры завтра днем
  127. $icon_day_t = preg_replace('/_/i','-',$icon_day_t);     //  Заменяем символ "_" на символ "-"
  128. $icon_day_t = preg_replace('/--/i','-',$icon_day_t);    //  Заменяем символы "--" на символ "-"
  129.  
  130.  
  131. $data_forecasts5 = (array) json_decode($yandex)->forecasts[1]->parts->night;
  132. $avg_night_t = $data_forecasts5['temp_avg'];            //  Находим среднюю температуру завтра ночью
  133. $icon_night_t = $data_forecasts5['icon'];               //  Иконка средней температуры завтра ночью
  134. $icon_night_t = preg_replace('/_/i','-',$icon_night_t); //  Заменяем символ "_" на символ "-"
  135. $icon_night_t = preg_replace('/--/i','-',$icon_night_t);//  Заменяем символы "--" на символ "-"
  136.  
  137. //  Если значение температуры положительно, для наглядности добавляем "+"
  138. if ($temp_current>0) {$temp_current='+'.$temp_current;}
  139. if ($min_hour>0) {$min_hour='+'.$min_hour;}
  140. if ($max_hour>0) {$max_hour='+'.$max_hour;}
  141. if ($min_hour_t>0) {$min_hour_t='+'.$min_hour_t;}
  142. if ($max_hour_t>0) {$max_hour_t='+'.$max_hour_t;}
  143. if ($avg_day>0) {$avg_day='+'.$avg_day;}
  144. if ($avg_night>0) {$avg_night='+'.$avg_night;}
  145. if ($avg_day_t>0) {$avg_day_t='+'.$avg_day_t;}
  146. if ($avg_night_t>0) {$avg_night_t='+'.$avg_night_t;}
  147. }
  148. ?>
  149.   <table class="pogoda_table" width="100%" cellpadding="0" cellspacing="0" style="background-color: #f8f8f8">
  150.     <tr>
  151.       <td class="td1" title="« Текущая температура »"><b>Сейчас:</b></td>
  152.       <td class="td2" title="« Текущая температура »">
  153.         <?php echo $temp_current; ?> <sup>o</sup>C
  154.         <?php echo ("<img src=\"".$img_folder.$icon_fact ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
  155.       </td>
  156.     </tr>
  157.     <tr>
  158.       <td class="td1" title="« Скорость ветра »">Ветер:
  159.         <?php echo $wind_speed; ?> м/с</td>
  160.       <td class="td2" title="« Влажность воздуха »">Влажность:
  161.         <?php echo $humidity; ?>%</td>
  162.     </tr>
  163.     <tr>
  164.       <td class="td1" title="« Атмосферное давление »">Давление:</td>
  165.       <td class="td2" title="« Атмосферное давление »">
  166.         <?php echo $pressure_mm; ?> мм рт. ст.</td>
  167.     </tr>
  168.     <tr>
  169.       <td class="td1" title="« Время восхода солнца »">Восход:
  170.         <?php echo $sunrise; ?>
  171.       </td>
  172.       <td class="td2" title="« Время заката солнца »">Закат:
  173.         <?php echo $sunset; ?>
  174.       </td>
  175.     </tr>
  176.     <tr>
  177.       <td class="td1" title="« Минимальная и максимальная температура сегодня »"><b>Сегодня:</b></td>
  178.       <td class="td2" title="« Минимальная и максимальная температура сегодня »">от
  179.         <?php echo $min_hour; ?> до
  180.         <?php echo $max_hour; ?> <sup>o</sup>C</td>
  181.     </tr>
  182.     <tr>
  183.       <td class="td1" title="« Средняя температура сегодня днем »">Днём:
  184.         <?php echo $avg_day; ?>
  185.         <?php echo ("<img src=\"".$img_folder. $icon_day ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
  186.       </td>
  187.       <td class="td2" title="« Средняя температура сегодня ночью »">Ночью:
  188.         <?php echo $avg_night; ?>
  189.         <?php echo ("<img src=\"".$img_folder.$icon_night ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
  190.       </td>
  191.     </tr>
  192.     <tr>
  193.       <td class="td1" title="« Минимальная и максимальная температура завтра »"><b>Завтра:</b></td>
  194.       <td class="td2" title="« Минимальная и максимальная температура завтра »">от
  195.         <?php echo $min_hour_t; ?> до
  196.         <?php echo $max_hour_t; ?> <sup>o</sup>C</td>
  197.     </tr>
  198.     <tr>
  199.       <td class="td1" title="« Средняя температура завтра днем »">Днём:
  200.         <?php echo $avg_day_t; ?>
  201.         <?php echo ("<img src=\"".$img_folder.$icon_day_t ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
  202.       </td>
  203.       <td class="td2" title="« Средняя температура завтра ночью »">Ночью:
  204.         <?php echo $avg_night_t; ?>
  205.         <?php echo ("<img src=\"".$img_folder.$icon_night_t ."." . $img_ext . "\" style=\"vertical-align: -7px;\" width=\"24px\" height=\"24px\"/>"); ?>
  206.       </td>
  207.     </tr>
  208.     <tr>
  209.       <td class="td3" title="« Перейти на сайт яндекса »" colspan="2">
  210.         <a href="https://pogoda.yandex.ru/<?php echo $city ?>" target="_blank">Прогноз на неделю</a>
  211.       </td>
  212.     </tr>
  213.   </table>
  214. </body>
  215. </html>
Add Comment
Please, Sign In to add comment