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),那么其余脚本将执行。否则,它会回显您选择的信息。
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/)。