Я знаю, что это старое, но я просто искал то же решение для почти идентичного скрипта для захвата временной шкалы в твиттере. Я закончил тем, что делал это, хотя я не был в состоянии полностью проверить это.
Я определил URL-адрес twitter как переменную ($ feedURL), которую я также использовал в $ doc_load. Затем я обернул все, кроме $ feedURL, в этот условный оператор:
$feedURL = "http://twitter.com/statuses/user_timeline/XXXXXXXX.rss"
$headers = @get_headers($feedURL);
if (preg_match("/200/", $headers[0])){
//the rest of you original code in here
}
else echo "Can't connect user-friendly message (or a fake tweet)";
Итак, он просто проверяет заголовки страницы канала, и если его статус равен 200 (ОК), то остальная часть сценария будет выполнена. В противном случае оно будет отображать сообщение по вашему выбору.
(ссылка: http://www.phptalk.com/forum/topic/3940-how-to-check-if-an-external-url-is-valid-andor-get-file-size/)
ETA: или, что еще лучше, сохраните кэшированную версию канала (что также гарантирует, что вы не превысите свой предел загрузки API):
<?php
$cache_file = dirname(__FILE__).'/cache/twitter_cache.rss';
// Start with the cache
if(file_exists($cache_file)){
$mtime = (strtotime("now") - filemtime($cache_file));
if($mtime > 600) {
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/75168146.rss');
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
echo "<!-- twitter cache generated ".date('Y-m-d h:i:s', filemtime($cache_file))." -->";
}
else {
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/75168146.rss');
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
//End of caching
?>
Затем используйте $ cache_file в вашем выражении $doc->load($cache_file)
вместо фактического URL фида.
(Адаптировано отсюда: http://snipplr.com/view/8156/twitter-cache/).