Создание кеш-файла для твиттера rss - PullRequest
0 голосов
/ 16 июня 2010

Я работаю над сайтом с простым сгенерированным php окном твиттера с твитами на временной шкале пользователя, извлеченными из RSS-канала user_timeline и кэшированными в локальный файл для сокращения нагрузки и в качестве резервной копии на случай, если твиттер выйдет из строя.Я основал кеширование на этом: http://snipplr.com/view/8156/twitter-cache/. Казалось, что вчера все работало хорошо, но сегодня я обнаружил, что файл кэша пуст.После удаления и загрузки снова был создан новый файл.

Код, который я использую, приведен ниже.Я отредактировал его, чтобы попытаться заставить его работать с тем, что я уже использовал для отображения канала, и, возможно, испортил что-то решающее.

Я внес следующие изменения (и я твердо верю, что любое изэто может быть причиной): - Пересмотрен код разницы во времени (в связанном примере использовалась пользовательская функция, которая не была включена в код)

  • Удалена функция «сериализации»от "французов".Это просто потому, что я не мог понять, как десериализовать его после загрузки в код дисплея.По правде говоря, я не понимаю, какую роль играет сериализация или как она работает, поэтому я уверен, что мне следовало бы сохранить ее. Если это так, мне просто нужно понять, где / как десериализовать во второй части кода, такчто он может быть проанализирован.

  • Удалена переменная $ 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 Никто не может помочь ...?

Я думаю, что это как-то связано с записью пустого файла кэша поверх хорошего, когда твиттер выключен, потому что иначе я представляю, что это должно происходить каждые десять минут, когда файл кэша перезаписывается снова,но это случается не так часто.

Я сделал следующее изменение в части, где он проверяет, сколько лет файлу, чтобы перезаписать его:

 $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);  
 }

… так что теперь, это будетЗаписывайте файл только в том случае, если он старше 10 минут и . На странице rss получено реальное содержимое.Как вы думаете, это будет работать?

1 Ответ

0 голосов
/ 18 июня 2010

Да, ваш код проблематичен, потому что, что бы ни отправлял вам Твиттер, вы пишете это. Вы должны проверить файл, который вы получаете из Twitter, как это:

if (($mtime > 600) && ($cache_rss = file_get_contents($feedURL)))
{
  file_put_contents($cache_rss);
}

file_get_contents () возвращает false, если есть ошибка, проверьте ее перед кэшированием нового содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...