Jump to content
Sign in to follow this  
radrigo

xml погода

Recommended Posts

Всем привет.


Помогите разобраться.

 

Есть xml файл со следующим содержимым. Там показывается погода на данный момент, и вкратце на текущие сутки в 4 периода.

<?xml version="1.0" encoding="utf-8"?>

		<info lang="ru">
			
		<region id="20138" zoom="14" lat="54.591841" lon="22.201117">
			<title>Гусев</title>
		</region>
	
			<traffic/>
			
		<weather climate="1" region="20138">
			<source>mb3d</source>
			
		<day>
			<title>Гусев</title>
			<country>Россия</country>
			<time_zone>Europe/Kaliningrad</time_zone>
			<summer-time>1</summer-time>
			<sun_rise>04:23</sun_rise>
			<sunset>20:32</sunset>
			<daytime>n</daytime>
			<date date="2020-05-16T00:00:00Z">
				<day weekday="сб">16</day>
				<month name="мая">5</month>
				<year>2020</year>
				<daytime>n</daytime>
			</date>
			
		<day_part typeid="4" type="ночь">
			<weather_type>облачно с прояснениями</weather_type>
			<weather_code>cloudy</weather_code>
			<image>https://yastatic.net/weather/i/icons/blueye/24/bkn_n.png</image>
			<image-v2 size="22x22">http://yandex.st/weather/v-1/i/icons/22x22/bkn_n_+6.png</image-v2>
			<image-v3 size="48">https://yastatic.net/weather/i/icons/blueye/48/bkn_n.png</image-v3>
			<image_number></image_number>
			<wind_speed>2.3</wind_speed>
			<wind_direction id="sw">юго-запад</wind_direction>
			<dampness>70</dampness>
			<hectopascal>1007</hectopascal>
			<torr>755</torr>
			<pressure>755</pressure>
			<temperature class_name="t8" color="F3F1E3">+7</temperature>
			<time_zone>Europe/Kaliningrad</time_zone>
			<observation_time>22:00</observation_time>
			<observation>2020-05-15T22:00:00</observation>
		</day_part>
	
			
		<day_part typeid="1" type="утро">
			<image-v2 size="22x22">http://yandex.st/weather/v-1/i/icons/22x22/ovc_-ra_+12.png</image-v2>
			<image-v3 size="30">https://yastatic.net/weather/i/icons/blueye/30/ovc_-ra.png</image-v3>
			
			<temperature_from class_name="t8" color="F3F1E3">+8</temperature_from>
			<temperature_to class_name="t12" color="F5F2DC">+12</temperature_to>
		
		</day_part>
	

		<day_part typeid="2" type="день">
			<image-v2 size="22x22">http://yandex.st/weather/v-1/i/icons/22x22/ovc_-ra_+12.png</image-v2>
			<image-v3 size="30">https://yastatic.net/weather/i/icons/blueye/30/ovc_-ra.png</image-v3>
			
			<temperature_from class_name="t12" color="F5F2DC">+11</temperature_from>
			<temperature_to class_name="t12" color="F5F2DC">+12</temperature_to>
		
		</day_part>
	

		<day_part typeid="3" type="вечер">
			<image-v2 size="22x22">http://yandex.st/weather/v-1/i/icons/22x22/ovc_-ra_+10.png</image-v2>
			<image-v3 size="30">https://yastatic.net/weather/i/icons/blueye/30/ovc_-ra.png</image-v3>
			
			<temperature_from class_name="t10" color="F4F1E0">+9</temperature_from>
			<temperature_to class_name="t12" color="F5F2DC">+11</temperature_to>
		
		</day_part>
	

		<day_part typeid="4" type="ночь">
			<image-v2 size="22x22">http://yandex.st/weather/v-1/i/icons/22x22/bkn_n_+8.png</image-v2>
			<image-v3 size="30">https://yastatic.net/weather/i/icons/blueye/30/bkn_n.png</image-v3>
			
			<temperature_from class_name="t8" color="F3F1E3">+7</temperature_from>
			<temperature_to class_name="t8" color="F3F1E3">+8</temperature_to>
		
		</day_part>
	
			<today><temperature class_name="t12" color="F5F2DC">+12</temperature></today>
		</day>
	
			<url slug="gusev">http://pogoda.yandex.ru/gusev/</url>
		</weather>
	
		</info>
	

 

Пытаюсь вывести таким образом. Выводит почему-то только текущую погоду, а краткую погоду на дальнейшие сутки не выводит. Не получилось вообще никак вывести оттуда данные.

<?php
$city_id = 20138;
$url = 'https://export.yandex.ru/bar/reginfo.xml?region=' . $city_id . '.xml';

$cache_xml = 'engine/cache/yandex_pogoda.xml.cache';
$ageInSeconds = 3600;
if (!file_exists($cache_xml) || filemtime($cache_xml) > time() + $ageInSeconds) {
   $contents = file_get_contents($url);
   file_put_contents($cache_xml, $contents);
}
$xml = simplexml_load_file($cache_xml);

$date_day = $xml->weather->day->date->day;
$date_month = $xml->weather->day->date->month['name'];

$weather_type = $xml->weather->day->day_part->weather_type;
$image_v3 = $xml->weather->day->day_part->{'image-v3'};
$temperature = $xml->weather->day->day_part->temperature;
$wind_speed = $xml->weather->day->day_part->wind_speed;
$wind_direction = $xml->weather->day->day_part->wind_direction;
$dampness = $xml->weather->day->day_part->dampness;
$pressure = $xml->weather->day->day_part->pressure;

$wind_direction_old = array('юг', 'север', 'запад', 'восток', 'южныйо', 'северныйо');
$wind_direction_new = array('южный', 'северный', 'западный', 'восточный', 'юго', 'северо');

echo $date_day . " " . $date_month;

foreach ($xml->weather->day as $day_part) {
   if ($weather_type) {
      $wind_direction = str_replace($wind_direction_old, $wind_direction_new, $wind_direction);
      echo "<br><img data-src=\"" . $image_v3 . "\" alt=\"\" />";
      echo "<br>" . $temperature;
      echo "<br>" . $weather_type;
      echo "<br>Ветер " . $wind_direction . " " . $wind_speed . " м/с";
      echo "<br>Влажность " . $dampness . "%";
      echo "<br>Атмосферное давление " . $pressure . " мм рт. ст.";
   } else {
      echo "<br>" . $image_v3;
   }
}

 

Может кто подскажет?

Share this post


Link to post
Share on other sites
44 минуты назад, radrigo сказал:

day_part

Этих секций несколько, и что вы пытаетесь получить в этой строке, из какой секции?

45 минут назад, radrigo сказал:

$weather_type = $xml->weather->day->day_part->weather_type;

 

Share this post


Link to post
Share on other sites
14 минут назад, MSK сказал:

Этих секций несколько

 

Я понимаю, что секций day_part несколько и у меня получается вывести только из первой. Из последующих четырёх секций не могу ничего вывести. Знаю что делаю что-то не так, но что, не пойму.

 

14 минут назад, MSK сказал:

и что вы пытаетесь получить в этой строке, из какой секции?

 

Из первой секции day_part выводит "облачно с прояснениями". Из первой секции day_part выводит "облачно с прояснениями". В последующих четверых секциях weather_type нет

Share this post


Link to post
Share on other sites

Может так?

	$city_id = 20138;
        $url = 'https://export.yandex.ru/bar/reginfo.xml?region=' . $city_id . '.xml';
        $xml = simplexml_load_file($url);
        $wind_direction_old = array('юг', 'север', 'запад', 'восток', 'южныйо', 'северныйо');
        $wind_direction_new = array('южный', 'северный', 'западный', 'восточный', 'юго', 'северо');
        foreach($xml->weather->day->day_part as $day) {
            echo "<br>" . $day['type'];
            if ($day->weather_type) {
                echo "<br><img data-src=\"" . $day->image_v3 . "\" alt=\"\" />";
                echo "<br>" . $day->temperature;
                echo "<br>" . $day->weather_type;
                echo "<br>Ветер " . str_replace($wind_direction_old, $wind_direction_new, $day->wind_direction) . " " . $day->wind_speed . " м/с";
                echo "<br>Влажность " . $day->dampness . "%";
                echo "<br>Атмосферное давление " . $day->pressure . " мм рт. ст.";
            } else {
                echo "<br><img data-src=\"" . $day->image_v3 . "\" alt=\"\" />";
                echo "<br>" . $day->temperature_from;
                echo "<br>" . $day->temperature_to;
            }
        }

 

 

  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)
18 минут назад, Popstop сказал:

Может так?


	$city_id = 20138;
        $url = 'https://export.yandex.ru/bar/reginfo.xml?region=' . $city_id . '.xml';
        $xml = simplexml_load_file($url);
        $wind_direction_old = array('юг', 'север', 'запад', 'восток', 'южныйо', 'северныйо');
        $wind_direction_new = array('южный', 'северный', 'западный', 'восточный', 'юго', 'северо');
        foreach($xml->weather->day->day_part as $day) {
            echo "<br>" . $day['type'];
            if ($day->weather_type) {
                echo "<br><img data-src=\"" . $day->image_v3 . "\" alt=\"\" />";
                echo "<br>" . $day->temperature;
                echo "<br>" . $day->weather_type;
                echo "<br>Ветер " . str_replace($wind_direction_old, $wind_direction_new, $day->wind_direction) . " " . $day->wind_speed . " м/с";
                echo "<br>Влажность " . $day->dampness . "%";
                echo "<br>Атмосферное давление " . $day->pressure . " мм рт. ст.";
            } else {
                echo "<br><img data-src=\"" . $day->image_v3 . "\" alt=\"\" />";
                echo "<br>" . $day->temperature_from;
                echo "<br>" . $day->temperature_to;
            }
        }

 

 

Спасибо большое, работает)

Edited by radrigo

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...