Перейти к публикации

Рекомендованные сообщения

Всем привет.


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

 

Есть 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;
   }
}

 

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

Ссылка на сообщение
Поделиться на других сайтах
44 минуты назад, radrigo сказал:

day_part

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

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

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

 

Ссылка на сообщение
Поделиться на других сайтах
14 минут назад, MSK сказал:

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

 

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

 

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

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

Может так?

	$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;
            }
        }

 

 

Ссылка на сообщение
Поделиться на других сайтах
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;
            }
        }

 

 

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

Изменено пользователем radrigo
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...