Загрузка последнего сообщения из Twitter-блога определенного пользователя

    Написал небольшой скрипт, который получает последнее сообщение из Twitter-блога указанного пользователя. Имеет функцию кеширования — сохраняет сообщение в текстовом файле, что позволяет избежать необходимости каждый раз загружать и обрабатывать RSS-ленту микроблога. Через определенный промежуток времени кеш обновляется из web.

    Как работает


    Писал данный скрипт для одного из разрабатываемых проектов. Принцип прост: грузится RSS-лента нужного вам пользователя, выбирается последняя запись и, при необходимости, кешируется в текстовом файле. XML обрабатывается через DOMDocument.

    Атрибут public $cache_file определяет расположение файла кеша.

    Атрибут public $cache_period отвечает за частоту обновления кеша. Указывается в секундах (3600 соответствует 1 часу). Если значение равно 0, кеш игнорируется.

    Все остальное, думаю, понятно. Если есть вопросы, задавайте.

    Скомпонованный код



    class GetLastTwitt{

    public $cache_file = './last_twitt.txt';
    public $cache_period = 3600;

    private $username;
    private $dom;

    function __construct($username){
    $this->username = $username;
    }

    private function setEnv(){
    $feed_url = 'http://twitter.com/statuses/user_timeline/'.$this->username.'.rss';

    $this->dom = new DOMDocument();
    $this->dom->load($feed_url);
    }

    private function returnLastTwitt (){
    if ($this->cache_period != 0)
    if (file_exists($this->cache_file))
    if ($this->cache_period > $this->getCacheDateDiff())
    return $this->getLastFromCache();

    return $this->getLastFromWeb($this->username);
    }

    private function getLastFromWeb($username){
    $this->setEnv();
    $rows = $this->dom->getElementsByTagName('item');
    $last_twitt = $rows->item(0)->getElementsByTagName('title')->item(0)->nodeValue;
    $this->cache_twitt($last_twitt);
    return $last_twitt;
    }

    private function cache_twitt($msg){
    $handle = fopen($this->cache_file,'w');
    fwrite($handle, $msg);
    fclose($handle);
    }

    private function getCacheDateDiff(){
    return date('U') — filemtime($this->cache_file);
    }

    private function getLastFromCache(){
    $handle = fopen($this->cache_file,'r');
    $cached_twitt = fread($handle, filesize($this->cache_file));
    fclose($handle);
    return $cached_twitt;
    }

    final function getLast(){
    return $this->returnLastTwitt();
    }

    }

    $a = new GetLastTwitt('skaizer');
    echo $a->getLast();


    Скачать

    Вопрос



    Кстати возник вопрос, если интегрировать этот скрипт в какой-либо сайт, допустим в блог, увеличит ли это частоту посещения сайта роботом поисковиков? Ведь с каждым новым обновлением в твиттере будет изменяться частичка контент почти на всех страницах сайта, поидее поисковик должен фиксировать частое обновление контента.

    Зеркало этого топика в моем блоге.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 9

    • UFO just landed and posted this here
        0
        Нет, не нужно.
        • UFO just landed and posted this here
      • UFO just landed and posted this here
          0
          В принципе, ничего не мешает грузить несколько сообщений. Я гружу именно последний пост для следующих целей: в разрабатываемом проекте предполагается некая анкета пользователя, в этой анкете будет отображаться последнее сообщение, которое юзер оставил в своем микроблоге. Подобное реализовано на хабре, если зайти в анкету хабраюзера у которого в профиле указан твиттер-аккаунт, то отображается последнее сообщение из микроблога. Так сказать, повышает интерактивность проекта :)

          >почему не грабить все обычным хмл парсером?

          Всмысле обычным? А чем DOMDocument не обычный? :) Кстати, не обязательно грузить инфу в XML формате, можно, если удобно, и в JSON:

          twitter.com/statuses/user_timeline/skaizer.json

          Держатся и ATOM и чистый XML (не RSS):

          twitter.com/statuses/user_timeline/skaizer.json
            0
            Порезался коммент… Окончание:

            Можно грузить в любом из 4х форматов на выбор:

            twitter.com/statuses/user_timeline/skaizer.json
            twitter.com/statuses/user_timeline/skaizer.json
              0
              Я дико извиняюсь, но порезался снова. Все таки окончание:

              Можно грузить в любом из 4х форматов на выбор:

              twitter.com/statuses/user_timeline/skaizer.json
              twitter.com/statuses/user_timeline/skaizer.xml
              twitter.com/statuses/user_timeline/skaizer.rss
              twitter.com/statuses/user_timeline/skaizer.atom
          +1
          В оригинальном исходнике баг
          24 строка
          $this->dom->load($xml);
          меняем на
          $this->dom->load($feed_url);
            0
            Спасибо, исправил, экспериментировал просто, не усмотрел…

          Only users with full accounts can post comments. Log in, please.