PHP: Получение последнего сообщения из Twitter-блога

VitaliyRodnenko, 16.02.2009

Написал небольшой скрипт, который получает последнее сообщение из 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();

Скомпонованный готовый скрипт можно скачать здесь.

Twitter iconУ вас есть Twitter аккаунт?
Если да, можете подписаться на мой микроблог, а я, в свою очередь, подпишусь на ваш.

Подписаться на обновления блога

Вам понравился наш блог, хотите следить за обновлениями? Подпишитесь на RSS рассылку или рассылку по электронной почте. Так же вы можете следить за нами в Twitter.

Категории: PHP, Twitter | Комментировать

Комментарии (21)

  1. Жомарт / 17.02.2009 в 21:20

    Зафолловил тебя, пиши чаще.

  2. kSM / 26.02.2009 в 18:27

    а через simplexml не легче подгружать последнее сообщение:

  3. Skaizer / 26.02.2009 в 18:29

    А какая разница? :)

  4. kSM / 26.02.2009 в 18:34

    Только из эстетических соображений, короче код, все нагляднее :)
    Впрочем на вкус и цвет…. дальше сами знаете что :)

  5. Skaizer / 26.02.2009 в 18:55

    Угу, кому что ближе, я просто с DOMDocument привык работать, поэтому XML через него разбираю всегда.

  6. delaf / 21.03.2009 в 22:35

    код поставил, на экране чистый лист. Пример работающий можно увидеть?

  7. Skaizer / 21.03.2009 в 23:29

    Прикрепленный файл вполне работающий. Единственное, почему может не грузиться сообщение — это включенный режим safe mod для PHP, по умолчанию он не позволяет работать с удаленными документами, как с файлами. В этом случае загружайте RSS с помощью curl.

  8. Суроегин / 08.10.2009 в 13:31

    Интересный скрипт. Только одну запись показывает? А можно ли задать так, чтобы показывались последние 3-5 сообщения?
    Буду очень благодарен за объяснение.)

    С уважением, Суроегин И. А.

  9. Skaizer / 10.10.2009 в 08:00

    Да, можно без проблем, на 32 строчке данного скрипта выбирается последнее сообщение:

    $last_twitt = $rows->item(0)->getElementsByTagName('title')->item(0)->nodeValue;

    $rows->item(1), $rows->item(2), $rows->item(3) будут обращаться к 2,3,4 сообщению соответственно.

  10. Суроегин / 11.10.2009 в 11:04

    Отлично! Благодарю!

    Хороший скрипт ;)

  11. Ksana / 31.12.2009 в 07:57

    А не могли бы вы написать скрипт, который бы отсылал заданный ему текст на tweeter порциями в течение суток. А то заходить туда, чтобы написать пару строк, по 5 раз в день обломно.

  12. Галкин / 06.01.2010 в 04:41

    Вот тут я написал пример, как можно через simplexml без использования CURL сделать тоже самое.

  13. vindozo / 17.02.2010 в 21:14

    у меня проще получилось
    http://vindozo.com/wordpress-twitter/

  14. GoGi / 07.10.2010 в 13:22

    Спасибо, подскажите как сделать к примеру так:
    user: текст
    about 19 hours ago from web

    т.е. нужно дату дописать, и через что писалось, вообщем пример выше.

  15. GoGi / 07.10.2010 в 17:00

    Нужно вообщем как вот тут сделать, не подскажите?
    http://cimi.netsons.org/

  16. German / 09.12.2010 в 16:57

    Как я понял, setEnv() подгружает через HTTP твит и далее парсим контент. Что делать, если у провайдера в настройках PHP запрещено обращение к удаленному серверу?

  17. Skaizer / 16.12.2010 в 23:36

    Не совсем, setEnv() только подгружает ленту сообщений, получение сообщений происходит в getLastFromWeb().
    Если же запрещено обращение к серверу необходимо использовать curl и грузить через него, остальное оставить как есть, все будет работать.

  18. Serg / 14.10.2012 в 09:58

    > $feed_url = ‘http://twitter.com/statuses/user_timeline/’.$this->username.’.rss’;

    Подобные ссылки уже не работают. Сейчас ленту пользователя в Twitter можно получить так: _https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=UserName.

  19. Роман Пятко / 06.11.2012 в 19:55

    Serg, спасибо, вот только копался в коде, необходимо бьло сменить способ парсинга. Благодарю!

  20. example / 17.05.2017 в 19:11

    Hi mates, its impressive paragraph on the topic of teachingand completely explained, keep it up all the time.

  21. example / 26.05.2017 в 20:11

    I am genuinely grateful to the holder of this site
    who has shared this fantastic piece of writing at at this time.

Оставить комментарий

480×60
480×60