TwittReader – твитты на вашем сайте


    Выкладываю свой велосипед с:
    • возможностью вывода одного или нескольких последних статусов
    • подсветкой ссылок, e-mail, юзеров, хэш-тегов
    • кэшированием, которое работает в т.ч. когда Твиттер упал (а такое бывает)
    • перекодировкой (если на сайте используется не UTF-8)
    • гибкими настройками, собственными шаблонами


    Требования: PHP5, cURL, DOMDocument.

    По сути, это класс-обертка для RSS отдельного пользователя твиттера.

    Свойства класса



    Свойство Значение по умолчанию Описание
    cacheFile twitter.txt файл, где класс будет хранить кэш
    cachePeriod 1800 время, через которое кэш устареет и твитты будут обновлены (в секундах)
    timeout 5 время в секундах, через которое будет считаться, что сервер недоступен
    twittsMaxCount 9 количество твиттов, которое отображать
    twittWrapper <li><p>[status]</p><p><a href=\"[link]\">[date]</a></p></li>\n
    шаблон для твитта с переменными [status], [link] и [date]
    dateFormat d.m.Y H:i:s формат даты
    errorNotAvailable Service not available. сообщение, которое выводится при недоступности сервера и отсутствии кэша
    errorNoStatuses No statuses found for this user. сообщение, которое выводится, когда у пользователя не обнаружено твиттов
    curlOptions array(), то есть пустой массив если вы хотите задать дополнительные свойства для CURL, например работа через прокси
    charset FALSE, то есть остается кодировка UTF-8 если задано, то твитт будет перекодироваться в соответствующую кодировку
    highlightUrls FALSE подсвечивать ссылки
    highlightEmails FALSE подсвечивать e-mail (не рекомендую, конечно, из-за спамеров, но может кому-нибудь пригодится :)
    highlightUsers FALSE подсвечивать пользователей твиттера вида user
    highlightHashtags FALSE подсвечивать т.н. хэштеги вида #tag


    Примеры использования



    Выводим 9 последних статусов пользователя:

    $tr = new TwittReader('user');
    echo '<ul>' . $tr->getTwitts() . '</ul>';


    Теперь настроим немножко под себя:

    $tr = new TwittReader('user');
     
    $tr->dateFormat = 'H:i'; // показывать только время твитта
    $tr->twittWrapper = "<li><strong>[date]</strong> [status]</li>"; // изменим шаблон твитта
    $tr->twittsMaxCount = 3; // выводить три последних твитта
    $tr->cachePeriod = 60; // кэш устаревает через одну минуту
    $tr->highlightUsers = TRUE; // подсвечивать пользователей
    $tr->highlightUrls = TRUE; // подсвечивать ссылки
    $tr->highlightHashtags = TRUE;  // подсвечивать хэштеги
     
    $tr->charset = 'windows-1251'; // кодировка
     
    // возможные ошибки
    $tr->errorNotAvailable = '<span class="error">Сервер не доступен.</span>';
    $tr->errorNoStatuses = '<span class="error">Нет твиттов.</span>';
     
    // использовать прокси
    $tr->curlOptions = array(
        CURLOPT_PROXY => "127.0.0.1:3128"
    );
     
    echo '<ul>' . $tr->getTwitts() . '</ul>';


    Скачать (2.8 KB)
    Проект на Google Code
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 17
    • 0
      А никто не подскажет, нет ли сервиса, который собирал бы твиты, допустим, за день, и публиковал их по рсс? типа твиттерфида, только наоборот. Знаю, что для вордпресса есть такой плагин, но мне нужно для другой блогоплатформы
      • +3
        Хм, спарсить твитты, емнип, около 20 строк кода на PHP, и столько же послать все это по RSS. Вот откопал у себя парсинг XML о статусами юзера.

        function getTwitterStatus($twitterUser, $howMany = 1)
        {
        $url = sprintf("http://twitter.com/statuses/user_timeline/%s.xml?count=%d",
        $twitterUser, $howMany);
        $parsed = new SimpleXMLElement(file_get_contents($url));

        $tweets = array();

        foreach($parsed->status as $status)
        {
        $message = preg_replace("/http:\/\/(.*?)\/[^ ]*/", '\\0', $status->text);
        $time = $this->niceTime(strtotime(str_replace("+0000", "", $status->created_at)));
        $tweets[] = array('message' => $message, 'time' => $time);
        }

        return $tweets;
        }
        • 0
          Эммм. А если учесть, что я не программист и необходимыми навыками не обладаю?
          • +1
            хороший повод потренироваться. простая задача и полеза от решения будет.
            • 0
              Вместо «потренироваться» будет более подходящим слово «научиться». Поймите, не все на Хабре являются профессионалами в ИТ, есть и любители типа меня. Хотя таких, конечно, мало.
              • +2
                да, я это и имел ввиду. самое приятное обучение — когда сам заинтересован в получении хорошего/рабочего результата.
      • +3
        А чашка относительно блюдца не в перспективе =(
        • +1
          :) Мне проще написать что-нибудь на ассемблере, чем нарисовать иконку, поэтому картинка не моя и ответить вам ничего не могу.
        • +1
          Не хочу никого обидеть, но для чего это на хабре? Я пока не забыл, как работать с xml и с curl.
          • 0
            Готовое решение. Возможно сэкономит вам некоторое время :)
          • 0
            Я просто парсю RSS, в программировании не претендую на хоть какое-то умение, использую стандартную функцию разбора XML не сочите за рекламу способ описан тут webdev.vdzr.ru/articles/modxtwitter

            С кэшированием тоже ничего невозможного — на хостинге есть cron и лента раз в час дергается целиком и разбирается, возможно, кому-то пригодится.
            • 0
              ваш вариант мне понравился больше )
              забыли только подсветку поиска #
              • 0
                чем больше понравился? если не секрет :)
                • 0
                  наверно не корректно выразился
                  он просто короче.
                  буквально вчера подумал, что хочу прикрутить к своему блогу и увидел ваш пост.

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

                  у вас завершённое творение, оно замечательно. мне просто не нужен был готовый вариант. не могу + топик, поднял карму ) спасибо за тему и за готовую реализацию. уверен, что ей не раз воспользуются. :)
                  • 0
                    Просто интересовался возможными путями улучшения скрипта :) Спасибо! :)
            • 0
              А пример посмотреть?

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.