Twitter的RSS源,[domdocument.load]:未能打开流:

Twitter的RSS源,[domdocument.load]:未能打开流:

问题描述:

我使用的是以下几点:Twitter的RSS源,[domdocument.load]:未能打开流:

<?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错误调试 错误:DOM文档::负载(http://twitter.com/statuses/user_timeline/XXXXXX.rss)[domdocument.load]:未能打开流:HTTP请求失败! HTTP/1.1 502错误的网关

我读过上面的代码依赖于Twitter beign可用,我知道它有时相当繁忙。有没有更好的方式接收twits,或者是否有任何形式的错误陷阱我可以做,只是为了显示“推文目前不可用...”信息而不是导致错误。我是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),那么其余脚本将执行。否则,它会回显您选择的信息。

(参考: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 
?> 

然后在您的$doc->load($cache_file)语句中使用$ cache_file而不是实际的提要url。 (改编自:http://snipplr.com/view/8156/twitter-cache/)。