Twitter RSS源[domdocument.load]:无法打开流:

Twitter RSS源[domdocument.load]:无法打开流:,dom,rss,twitter,document,Dom,Rss,Twitter,Document,我正在使用以下命令: <?php $doc = new DOMDocument(); $doc->load('http://twitter.com/statuses/user_timeline/XXXXXX.rss'); $arrFeeds = array(); foreach ($doc->getElementsByTagName('item') as $node) { $itemRSS = array ( 'title' => $node-

我正在使用以下命令:

<?php
$doc = new DOMDocument();
$doc->load('http://twitter.com/statuses/user_timeline/XXXXXX.rss');
$arrFeeds = array();

foreach ($doc->getElementsByTagName('item') as $node) {
    $itemRSS = array ( 
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
    );
    array_push($arrFeeds, $itemRSS);
}

for($i=0;$i<=3;$i++) {
    $tweet=substr($arrFeeds[$i]['title'],17); 
    $tweetDate=strtotime($arrFeeds[$i]['date']);
    $newDate=date('G:ia l F Y ',$tweetDate);
    if($i==0) { $b='style="border:none;"'; }
    $tweetsBox.='<div class="tweetbox" ' . $b . '>
    <div class="tweet"><p>' . $tweet . '</p>
    <div class="tweetdate"><a href="http://twitter.com/XXXXXX">@' . $newDate .'</a></div>
    </div>
    </div>';
} 

return $tweetsBox;
?>

从给定时间线返回4条最新推文(XXXXX是相关提要)

它似乎工作正常,但我最近偶尔会遇到以下错误:

PHP错误调试 错误:DOMDocument::load()[DOMDocument.load]:无法打开流:HTTP请求失败!HTTP/1.1 502坏网关

我读到上面的代码依赖于Twitter beign,我知道它有时会很忙。有没有更好的接收twitter的方法,或者有没有什么错误陷阱,我可以做的只是显示“tweets当前不可用…”而不是导致错误。我是usnig ModX CMS,因此任何解析错误都会杀死站点,而不仅仅是发出警告


谢谢。

我知道这已经很旧了,但我只是在为一个几乎相同的脚本搜索相同的解决方案,用于抓取twitter时间线。最后我做了这个,虽然我还没有能够彻底测试它

我将twitter url定义为一个变量($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(OK),则脚本的其余部分将执行。否则,它将响应您选择的消息

(参考资料:)


ETA:或者更好,保存提要的缓存版本(这也将确保您不会超过API负载限制):


然后在
$doc->load($cache\u file)
语句中使用$cache\u文件,而不是实际的提要url。 (改编自此处:)

<?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 
?>