[英]Generating cache file for Twitter rss feed
我正在一個帶有由php生成的簡單Twitter框的網站上,該框具有從user_timeline rss feed提取的用戶時間軸tweet,並緩存到本地文件以減少負載,並作為twitter下降時的備份。 我基於此進行緩存: http : //snipplr.com/view/8156/twitter-cache/ 。 昨天一切似乎運行良好,但是今天我發現緩存文件為空。 將其刪除然后再次加載會生成一個新文件。
我正在使用的代碼如下。 我已經對其進行了編輯,以使其能夠與已經用於顯示提要的東西一起使用,並且可能弄亂了一些關鍵內容。
我所做的更改如下(並且我堅信,其中任何一個都可能是原因):-修改了時差代碼(鏈接的示例似乎使用了代碼中未包含的自定義函數)
從“ fwrites”中刪除了“ serialize”功能。 這純粹是因為一旦將其加載到顯示代碼中,我就無法弄清楚如何反序列化。 我確實不了解序列化扮演的角色或它如何工作,所以我確定我應該保留它。如果是這種情況,我只需要了解代碼第二部分中在何處/如何反序列化,就可以了。它可以被解析。
刪除了$ rss變量,僅在我的原始tweet顯示代碼中加載了緩存文件。
因此,這是我使用的代碼的相關部分:
<?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頁面檢索到實際內容時,它才會寫入文件。 您認為這行得通嗎?
是的,您的代碼有問題,因為無論Twitter發送給您什么,您都可以編寫。 您應該像這樣測試從Twitter獲得的文件:
if (($mtime > 600) && ($cache_rss = file_get_contents($feedURL)))
{
file_put_contents($cache_rss);
}
如果發生錯誤,file_get_contents()返回false,請在緩存一些新內容之前檢查它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.