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

Тема в разделе "Как сделать...", создана пользователем anadikt, 11 июн 2015.

  1. anadikt

    anadikt

    Регистр.:
    29 янв 2010
    Сообщения:
    391
    Симпатии:
    58
    Подскажите пожалуйста, почему перестал работать парсер погоды с Яндекса? До сегодня работало все на ура, но сейчас нет данных и все, в чем может быть проблема?
    Код:
    <?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 хостера и поэтому данные не парсятся?
     
    Последнее редактирование: 11 июн 2015
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
  3. anadikt

    anadikt

    Регистр.:
    29 янв 2010
    Сообщения:
    391
    Симпатии:
    58
    можно немного подробнее если не трудно? в пхп не силен
    заранее благодарен

    п.с. может кто знает как сделать чтобы скрипт копировал xml файл с яндекса раз в день на хост уже из него брал данные?
     
    Последнее редактирование: 11 июн 2015
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    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_filefile_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>';
    }
    ?>
     
    Shnapik, anadikt, Vishez2 и ещё 1-му нравится это.
  5. anadikt

    anadikt

    Регистр.:
    29 янв 2010
    Сообщения:
    391
    Симпатии:
    58
    спасибо за подсказку, а как сделать так, чтобы файл кэша лежал не в текущей директории, а допустим так: http://site.ru/cache/weather.xml ??
    заранее благодарен
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Полный путь к корневой папке сайта должен быть в переменной $_SERVER['DOCUMENT_ROOT']
    PHP:
    $cache_file dirname(__FILE__).'/cache.xml';
    Заменить на
    PHP:
    $cache_file $_SERVER['DOCUMENT_ROOT'].'/cache/weather.xml';
     
    anadikt нравится это.
  7. anadikt

    anadikt

    Регистр.:
    29 янв 2010
    Сообщения:
    391
    Симпатии:
    58
    Запустил бэкап на локале (дэнвер) - все работает отлично, но на хосте провайдера не работает (даже пробовал делать ссылку на xml через http://5.hidemyass.com/ip-1/) ... подскажите куда копать?

    п.с. в кэш файл данные не уходят, а если его наполнить данными яндекса, то скрипт на сайте их не вытягивает оттуда ... почему?
     
  8. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    610
    Симпатии:
    348
    может быть отключена библиотека simple_XML ?
    чтобы точно диагностировать причину, после каждого вызова функции проверяйте что пришло в переменную функциями print_r() или var_dump()
     
  9. Vishez2

    Vishez2 Писатель

    Регистр.:
    2 окт 2014
    Сообщения:
    8
    Симпатии:
    3
    У меня все работает, кэш файл создается. Включи отображение ошибок и смотри что выдается
     
  10. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Все верно советуют. Больше информации даст сообщение об ошибке. Для вывода ошибок в браузер достаточно добавить в начало
    PHP:
    error_reporting(E_ALL);
    ini_set('display_errors'1);