PHP: Получение последнего сообщения из 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();
Скомпонованный готовый скрипт можно скачать здесь.
У вас есть Twitter аккаунт?
Если да, можете подписаться на мой микроблог, а я, в свою очередь, подпишусь на ваш.
Похожие темы
RSS-лента комментариев к этой статье | Обратная ссылка (trackback link)



Зафолловил тебя, пиши чаще.
а через simplexml не легче подгружать последнее сообщение:
А какая разница?
Только из эстетических соображений, короче код, все нагляднее
Впрочем на вкус и цвет…. дальше сами знаете что
Угу, кому что ближе, я просто с DOMDocument привык работать, поэтому XML через него разбираю всегда.
код поставил, на экране чистый лист. Пример работающий можно увидеть?
Прикрепленный файл вполне работающий. Единственное, почему может не грузиться сообщение – это включенный режим safe mod для PHP, по умолчанию он не позволяет работать с удаленными документами, как с файлами. В этом случае загружайте RSS с помощью curl.
Интересный скрипт. Только одну запись показывает? А можно ли задать так, чтобы показывались последние 3-5 сообщения?
Буду очень благодарен за объяснение.)
С уважением, Суроегин И. А.
Да, можно без проблем, на 32 строчке данного скрипта выбирается последнее сообщение:
$rows->item(1),$rows->item(2),$rows->item(3)будут обращаться к 2,3,4 сообщению соответственно.Отлично! Благодарю!
Хороший скрипт
А не могли бы вы написать скрипт, который бы отсылал заданный ему текст на tweeter порциями в течение суток. А то заходить туда, чтобы написать пару строк, по 5 раз в день обломно.
Вот тут я написал пример, как можно через simplexml без использования CURL сделать тоже самое.
у меня проще получилось
http://vindozo.com/wordpress-twitter/