Перестал работать парсер погоды с Яндекса

anadikt

Гуру форума
Регистрация
28 Янв 2010
Сообщения
433
Реакции
86
Подскажите пожалуйста, почему перестал работать парсер погоды с Яндекса? До сегодня работало все на ура, но сейчас нет данных и все, в чем может быть проблема?
Код:
<?php
$xml = 'http://export.yandex.ru/weather-ng/forecasts/29838.xml';  //адрес

$day = simplexml_load_file($xml);

foreach ($day->fact as $fact)
{
      $temp = $fact->temperature; //выводим температуру
      $type = $fact->weather_type; //выводим тип
      $pic = $fact->{'image-v3'}; //выводим пикчакод

      echo '<ins title="';
      echo $type;
      echo '" class="img_weather"><img src="http://yandex.st/weather/1.2.32/i/icons/48x48/';
      echo $pic;
      echo '.png" height="26"/></ins> <span class="color_black"><span style="font-size:16px;">';
      echo $temp;
      echo '</span>°</span>';

}
?>

<?php
$xml = 'http://export.yandex.ru/weather-ng/forecasts/29838.xml';  //адрес

$tomorrow = simplexml_load_file($xml); //пыдыщ


foreach ($tomorrow->informer as $informer)
{
      $temp = $informer->temperature; //выводим температуру

      echo 'ночью: <span class="color_black"><span style="font-size:14px;">';
      echo $temp;
      echo '</span>°</span>';
}
?>
Может Яндекс стал блокировать IP хостера и поэтому данные не парсятся?
 
Последнее редактирование:
У меня работает, вероятно ваша догадка про бан правдива.
Добавьте в парсер кеширование, хотя бы на час.

Вот к примеру на файлах Для просмотра ссылки Войди или Зарегистрируйся
 
Добавьте в парсер кеширование, хотя бы на час.
можно немного подробнее если не трудно? в пхп не силен
заранее благодарен

п.с. может кто знает как сделать чтобы скрипт копировал xml файл с яндекса раз в день на хост уже из него брал данные?
 
Последнее редактирование:
PHP:
<?php

$xml = 'http://export.yandex.ru/weather-ng/forecasts/29838.xml';  //адрес

$cache_file = dirname(__FILE__).'/cache.xml';
$cache_time = 3600; // Время кеширования в секундах


if (!file_exists($cache_file) || filemtime($cache_file) + $cache_time < time()) {
    file_put_contents($cache_file, file_get_contents($xml));
}

$day = simplexml_load_file($cache_file);

foreach ($day->fact as $fact)
{
      $temp = $fact->temperature; //выводим температуру
      $type = $fact->weather_type; //выводим тип
      $pic = $fact->{'image-v3'}; //выводим пикчакод

      echo '<ins title="';
      echo $type;
      echo '" class="img_weather"><img src="http://yandex.st/weather/1.2.32/i/icons/48x48/';
      echo $pic;
      echo '.png" height="26"/></ins> <span class="color_black"><span style="font-size:16px;">';
      echo $temp;
      echo '</span>°</span>';

}
?>

<?php


$tomorrow = simplexml_load_file($cache_file); //пыдыщ


foreach ($tomorrow->informer as $informer)
{
      $temp = $informer->temperature; //выводим температуру

      echo 'ночью: <span class="color_black"><span style="font-size:14px;">';
      echo $temp;
      echo '</span>°</span>';
}
?>
 
PHP:
<?php

$xml = 'http://export.yandex.ru/weather-ng/forecasts/29838.xml';  //адрес

$cache_file = dirname(__FILE__).'/cache.xml';
$cache_time = 3600; // Время кеширования в секундах


if (!file_exists($cache_file) || filemtime($cache_file) + $cache_time < time()) {
    file_put_contents($cache_file, file_get_contents($xml));
}

$day = simplexml_load_file($cache_file);

foreach ($day->fact as $fact)
{
      $temp = $fact->temperature; //выводим температуру
      $type = $fact->weather_type; //выводим тип
      $pic = $fact->{'image-v3'}; //выводим пикчакод

      echo '<ins title="';
      echo $type;
      echo '" class="img_weather"><img src="http://yandex.st/weather/1.2.32/i/icons/48x48/';
      echo $pic;
      echo '.png" height="26"/></ins> <span class="color_black"><span style="font-size:16px;">';
      echo $temp;
      echo '</span>°</span>';

}
?>

<?php


$tomorrow = simplexml_load_file($cache_file); //пыдыщ


foreach ($tomorrow->informer as $informer)
{
      $temp = $informer->temperature; //выводим температуру

      echo 'ночью: <span class="color_black"><span style="font-size:14px;">';
      echo $temp;
      echo '</span>°</span>';
}
?>
спасибо за подсказку, а как сделать так, чтобы файл кэша лежал не в текущей директории, а допустим так: Для просмотра ссылки Войди или Зарегистрируйся ??
заранее благодарен
 
Полный путь к корневой папке сайта должен быть в переменной $_SERVER['DOCUMENT_ROOT']
PHP:
$cache_file = dirname(__FILE__).'/cache.xml';
Заменить на
PHP:
$cache_file = $_SERVER['DOCUMENT_ROOT'].'/cache/weather.xml';
 
Запустил бэкап на локале (дэнвер) - все работает отлично, но на хосте провайдера не работает (даже пробовал делать ссылку на xml через Для просмотра ссылки Войди или Зарегистрируйся) ... подскажите куда копать?

п.с. в кэш файл данные не уходят, а если его наполнить данными яндекса, то скрипт на сайте их не вытягивает оттуда ... почему?
 
может быть отключена библиотека simple_XML ?
чтобы точно диагностировать причину, после каждого вызова функции проверяйте что пришло в переменную функциями print_r() или var_dump()
 
Запустил бэкап на локале (дэнвер) - все работает отлично, но на хосте провайдера не работает (даже пробовал делать ссылку на xml через Для просмотра ссылки Войди или Зарегистрируйся) ... подскажите куда копать?

п.с. в кэш файл данные не уходят, а если его наполнить данными яндекса, то скрипт на сайте их не вытягивает оттуда ... почему?
У меня все работает, кэш файл создается. Включи отображение ошибок и смотри что выдается
 
Все верно советуют. Больше информации даст сообщение об ошибке. Для вывода ошибок в браузер достаточно добавить в начало
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
 
Назад
Сверху