Задать вопрос
JustinBieber
@JustinBieber
Звизда

Почему может барахлить парсер?

Собрал простенький парсер погоды с Яндекс, но возникла такая проблема:

d6ovj6it.jpgd6ovj6pu.jpg

Как видно то показывает, то нет. Вопрос из-за чего может быть такой трабл? ;(

<?php 
$city_id = 35229; 
$data_file = "http://export.yandex.ru/weather-ng/forecasts/$city_id.xml"; 

$xml = simplexml_load_file($data_file); 

$city = $xml->fact->station; 
$temp = $xml->fact->temperature; 
$pic = $xml->fact->{'image-v3'}; 
$type = $xml->fact->weather_type; 

if ($temp > 0) { 
$temp = '+' . $temp; 
} 

echo ("Актобе"); 
echo (" $temp °C <img src=\"https://yandex.st/weather/v-1/i/icons/30x30/$pic.png\" alt=\"$type\" title=\"$type\">"); 

?>
  • Вопрос задан
  • 309 просмотров
Подписаться 1 Оценить 4 комментария
Пригласить эксперта
Ответы на вопрос 2
@theg4sh
Ilya дело говорит, обновляй xml раз в минуту и парси файл, а не url, иначе так и будешь стрелять по воробьям из пушки в надежде понять причину:
Представь, что к твоему хосту обращается 1000 человек, и эти 1000 человек помимо того, что загружают твой сайт, еще и в фоне делают запрос до погоды яндекса, ясен-хрясен тебя яндекс будет блокировать с таким количеством запросов в минуту/секунду/др.ед.измерения :)
Вообще тянуть какие-либо данные с внешних сайтов без кеширования и предварительной обработки - зло.
Ты только прикинь как долго будет твоя страница грузиться, если внешний сайт внезапно станет недоступен.
Ответ написан
Комментировать
glebovgin
@glebovgin
Full Stack Web Developer
Предлагаю $data_file забирать через curl() или хотя бы file_get_contents(), кешировать на какое-то время, а его разбор делать уже из локальной копии.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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