【发布时间】:2010-06-18 07:07:45
【问题描述】:
我正在使用一个简单的 php 生成 twitter 框的网站工作,其中包含从 user_timeline rss 提要中提取的用户时间线推文,并缓存到本地文件以减少负载,并在 twitter 出现故障时作为备份。我基于此缓存:http://snipplr.com/view/8156/twitter-cache/。昨天似乎一切正常,但今天我发现缓存文件是空白的。删除它然后再次加载会生成一个新文件。
我正在使用的代码如下。我已经对其进行了编辑,试图让它与我已经用来显示提要的内容一起使用,并且可能弄乱了一些关键的东西。
我所做的更改如下(我坚信其中任何一个都可能是原因): - 修改了时差代码(链接示例似乎使用了代码中未包含的自定义函数)
从“fwrites”中删除了“序列化”功能。这纯粹是因为一旦我将它加载到显示代码中,我就无法弄清楚如何反序列化。我真的不了解序列化所扮演的角色或它是如何工作的,所以我确定我应该保留它。如果是这种情况,我只需要了解在代码的第二部分中在哪里/如何反序列化所以它可以被解析。
删除了 $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 页面检索到实际内容。你认为这会奏效吗?
【问题讨论】: