@burov0798
Пытаюсь изучать php\js

Обработка xml файла, получение погоды, в чем ошибка?

Раньше успешно получал погоду таким способом:
$data_file = "http://export.yandex.ru/weather-ng/forecasts/72483.xml";
		$xml = simplexml_load_file($data_file);
		$wiz = $xml -> fact-> temperature;
		if ($wiz > 0) {
			$wiz = "+".$wiz;
		}
		$text = "Погода: ".$wiz."°C";

echo $text;

Получал в ответ, например: Погода: 14°C
Но вдруг скрипт просто перестал работать 0_о Выполняю этот же скрипт - в ответ не получаю градусы.
Пробовал var_dump($xml); в ответ --> bool(false)
В чем может быть проблема?
  • Вопрос задан
  • 772 просмотра
Решения вопроса 2
Для начала проверь, действительно ли доступен документ по этому адресу
Ответ написан
nikivan
@nikivan
Создатель сайтов
Я думаю, причина заключается в особенностях работы сервера Яндекса. Вероятно, он «сбрасывает» некоторые запросы. Попробуйте «биться» так, у меня получилось:

<?php

// Заголовок с кодировкой
header('Content-Type: text/html; charset=UTF-8');

// Интересующий нас XML-файл
$xml_file = 'http://export.yandex.ru/weather-ng/forecasts/72483.xml';

// Количество попыток получить и обработать этот файл
$number_of_attempts = 0;

do
{
    // Выводим номер попытки
    echo 'Attempt = ', $number_of_attempts, '<br>';
    
    // Осуществляем попытку получить и обработать XML-файл
    $xml = simplexml_load_file($xml_file);
    
    usleep(100);
}
while (!$xml && ++$number_of_attempts <= 50); // Делаем пока не загрузили или пока количество попыток не будет превышать 50

// Итак, если XML-файл не обработан - пишем об этом
if (!$xml)
{
    exit('Could not load XML<br>');
}

// Иначе: Получаем температуру
$temp = $xml->fact->temperature;

// Форматируем её как нам нужно
if ($temp > 0) {
    $temp = '+' . $temp;
}

// И выводим
echo '<strong>Погода: ', $temp, ' °C</strong>';


Можно сделать это же через cURL (изначально я так и делал, но потом решил, что вам он может не понадобиться).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы