簡體   English   中英

為Twitter RSS提要生成緩存文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM