我正在使用一个简单的php生成的Twitter框进行工作,其中包含从user_timeline rss feed中提取的用户时间线推文,并缓存到本地文件以减少负载,并作为twitter关闭时的备份。我基于此缓存:http://snipplr.com/view/8156/twitter-cache/。这一切似乎昨天都运行良好,但今天我发现缓存文件是空白的。删除然后重新加载会生成一个新文件。
我正在使用的代码如下。我已经对它进行了编辑,试图让它与我用来显示Feed的内容一起工作,并且可能搞砸了一些重要的东西。
我所做的更改如下(我坚信其中任何一个都可能是原因): - 修改了时差代码(链接的示例似乎使用了未包含在代码中的自定义函数)
从“fwrites”中删除了“serialize”函数。这纯粹是因为我在显示代码中加载后无法弄清楚如何反序列化。我实际上不理解序列化所扮演的角色或它是如何工作的,所以我确定我应该保留它。如果是这种情况,我只需要了解代码的第二部分在何处/如何反序列化所以它可以被解析。
删除了$ rss变量,转而使用原始推文显示代码加载缓存文件。
所以,这是我使用的代码的相关部分:
<?php
$feedURL = "http://twitter.com/statuses/user_timeline/#######.rss";
// START CACHING
$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/#######.rss');
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
//END CACHING
//START DISPLAY
$doc = new DOMDocument();
$doc->load($cache_file);
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
);
array_push($arrFeeds, $itemRSS);
}
// the rest of the formatting and display code....
}
?>
ETA 6/17没人能帮忙......?
我认为这与在twitter关闭时在空白缓存文件上编写空白缓存文件有关,因为否则我认为这应该在缓存文件再次被覆盖时每十分钟发生一次,但它不会经常发生这种情况。
我对检查文件覆盖年限的部分进行了以下更改:
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/75168146.rss');
if($mtime > 600 && $cache_rss != ''){
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
...现在,它只会写文件,如果它超过十分钟和,那么从rss页面检索到的实际内容。你觉得这会起作用吗?
答案 0 :(得分:0)
是的,您的代码存在问题,因为无论Twitter发送给您什么,您都可以编写代码。 您应该测试从Twitter获得的文件,如下所示:
if (($mtime > 600) && ($cache_rss = file_get_contents($feedURL)))
{
file_put_contents($cache_rss);
}
file_get_contents()如果有错误则返回false,在缓存一些新内容之前检查它。