32

Вывод последних записей из Twitter

"Долина Смерти" by citizen-i

Сегодняшний пост будет о популярном блогхостинге Twitter, а точнее – о выводе последних записей из Twitter на свой сайт.

Да-да, у меня были похожие посты, но там можно было вывести только один последний твит. А сейчас можно вывести любое количество.

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

<?php

$name = 'neoantox'; //Измените это на свой ник в в твиттере

$count = '5'; // Количество записей, которое нужно вывести

//------------------------

$c = $count + 1;

$dom = new DomDocument();

$dom->load('http://twitter.com/statuses/user_timeline/'.$name.'.xml?count='.$c);

$twit = $dom->getElementsByTagName('text');

$date = $dom->getElementsByTagName('created_at');

$id = $dom->getElementsByTagName('id');

for ($i=0;$i<$count;$i++){

list($dweek, $m, $d, $time, $cl, $y)  = explode(' ', $date->item($i*2)->nodeValue);

$month_str = array(

                'Jan','Feb','Mar',

                'Apr','May','Jun',

                'Jul','Aug','Sep',

                'Oct','Nov','Dec');

$month_int = array(

                'января',    'февраля',    'марта',

                'апреля',    'мая',        'июня',

                'июля',        'августа',    'сентября',

                'октября',    'ноября',    'декабря');

$m = str_replace($month_str, $month_int, $m);

$postdate = $d.' '.$m.' '.$y;

$postid = $id->item($i*2)->nodeValue;

$post = $twit->item($i)->nodeValue;

echo '<p><a href="http://twitter.com/'.$name.'/status/'.$postid.'">'.$postdate.'</a> - '.$post.'</p>';

}

?>

Также, вы можете его скачать.

Вывод последних записей из Twitter

А вот мой аккаунт на Twitter.

Понравился пост? Не стесняйся, подпишись на RSS!

32 комментариев

  • 29 Апрель 2010 в 22:46

    спасибо!! только скажите – а как выводить не дату публикации , а скажем «1 минуту назад», или «час назад»??

    Ответить
    • 5 Май 2010 в 14:40

      Вот, написал на скорую руку. Скрипт не идеален, но работает.
      Скачать

      Ответить
      • 14 Март 2011 в 19:15

        У меня вот эта строка не работает, просто пустота выводится:

        if (date(«H») == $hour) {
        if (date(«i»)==$min)
        return «Несколько секунд назад»;
        if (date(«i»)>$min) {
        $omg = date(«i»)-$min.’ ‘.number_ending(date(«i»)-$min, ‘минут’, ‘минуту’, ‘минуты’);
        return $omg.» назад»;
        }
        }

        т.е. не выводятся твиты только что созданные или которым не больше часа..

        Ответить
  • 7 Май 2010 в 21:43

    спасибо!

    Ответить
  • 8 Май 2010 в 14:34

    Стал разбираться в вашем коде.. вот непонимаю кое каих строк…
    Поможете?
    $omg = date(«i»)-$min.’ ‘.number_ending(date(«i»)-$min, ‘минут’, ‘минуту’, ‘минуты’);

    в частности вот что такое number_ending(date(«i»)-$min
    number_ending этот искал в инете , чтото не нашлось.

    и ещё

    list($hour,$min,$sec) = explode(‘:’,$time); – ненашёл где берёться переменная time

    $postid = $id->item($i*2)->nodeValue; – что значит это и все похожие выражения?

    Если можно, поподробнее, а то мне важно разобраться..

    Ответить
    • 8 Май 2010 в 15:15

      number_ending – это функция, которая склоняет окончания. Например, 5 минут, 1 минута или 3 минуты

      date(“i”)-$min – узнает сколько сейчас минут и вычитает из него время, когда был опубликован твит. Таким образом, определятся сколько минут прошло

      переменая $time – это время, когда опубликован твит, оно передается функции TwitterTime и уже потом идет её обработка. Время в формате 15:32:16 делится на отдельные части, т.е. $hour = 15; $min = 32; $sec = 16

      $postid = $id->item($i*2)->nodeValue; – эта строка парсит xml код, расположенный в http://twitter.com/statuses/user_timeline/neoantox.xml.

      Кстати, если нужно, могу выложить версию с кэшированием.

      Ответить
  • 10 Май 2010 в 0:14

    Я так чисто пантуюсь, что у мя аватар есть, а у naikom нету!!! =)

    Ответить
  • 15 Май 2010 в 19:15

    iMax очень смешно))))

    NeoAntoX слушайте , спасибо, разобрался во всем кроме одного – может разьясните более детально логику функции
    number_ending . а то чтото как в потёмках она для меня)

    Ответить
    • 15 Май 2010 в 20:18

      Функцию я взял из интернета, но все равно объясню, как она работает.

      $num100 = $number % 100; – Берет две последние цифры от числа
      $num10 = $number % 10; – Берет последнюю цифру от числа.

      Как работает функция:

      • Если две последних цифры входят в интервал между 5 и 20 включительно, то окончание будет $ending0. Например, 5 минут или 18 минут.
      • Если последняя цифра равна 0, то окончание будет $ending0. Например, 10 минут.
      • Если последняя цифра равна 1, то окончание будет $ending1. Например, 1 минута или 21 минута.
      • Если последняя цифра будет в интервале от 2 до 4 включительно, то окончание будет $ending2.
        Например, 2 минуты или 4 минуты.
      • Если последняя цифра будет в интервале от 5 до 9 включительно, то окончание будет $ending0. Например, 5 минут или 9 минут.
      • Если ничего из этого не подошло, то окончание будет $ending2.
      Ответить
  • 15 Май 2010 в 21:05

    да и кстати – вставляю ваш код в мой сайт..
    вот что вижу-
    http://s59.radikal.ru/i165/1005/cd/20dc8b7c70be.jpg

    и не могу избавиться от этих 19 20 – это видимо час, когда был написан твит.

    пробовал убрать, неполучается..

    скажите, что и в какой строке там удалить надо?

    Ответить
    • 15 Май 2010 в 21:14

      удалите эту строку:
      echo $hour;

      Кстати, у вас окончания не правильно ставятся. Должно быть 1 час назад, а у вас – 1 часов назад.

      Ответить
  • 15 Май 2010 в 21:49

    спасибо! попробую сам поменять!

    Ответить
  • 18 Май 2010 в 23:37

    кстати молодец наиком. ты в отличии от некоторых посты каждый день пишеш

    Ответить
  • 19 Май 2010 в 23:30

    С кодом вроде разобрался. Спасибо. Кстати, планирую пост про этот скрипт с ссылкой на этот блог разумеется.

    Ответить
  • Сергей
    20 Август 2010 в 17:57

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

    И еще вопрос. Сильно ли нагружает страницу этот код? ну т.е. будет ли она дольше грузиться?

    Ответить
    • 20 Август 2010 в 18:56

      Чтобы не показывало дату:
      Замените эту строку
      echo '<p><a href="http://twitter.com/'.$name.'/status/'.$postid.'" rel="nofollow">'.$postdate.'</a> - '.$post.'</p>';
      на
      echo '<p>'.$post.'</p>';

      Насчет второго:
      Страница, конечно же, будет дольше грузиться. Всё зависит от степени нагрузки самого твиттера. Но у меня есть версия с кэшированием, она будет загружать твиты только один раз, а потом брать их из файла. Могу выложить, если надо

      Ответить
      • Сергей
        20 Август 2010 в 19:28

        Да, было бы здорово. Спасибо огромное. Сделал ретвит вашей странички

        Ответить
        • 20 Август 2010 в 19:37

          http://neoantox.ru/?file_id=6 – Вот
          Начало файла отредактируете как вам нужно, комментарии есть.

          Ответить
        • 20 Август 2010 в 19:39

          Ах да, спасибо за ретвит!

          Ответить
          • Сергей
            20 Август 2010 в 20:21

            А как лучше втыкать? код вставлять или вставлять файл с кодом(инклюдить)?

            Ответить
            • 20 Август 2010 в 20:43

              смысла нет код вставлять, проще с inculde

              Ответить
          • Сергей
            20 Август 2010 в 20:53

            блин вставил сначал просто код(до вашего сообщения) и запорол все. сайт не грузит и пишет
            Parse error: syntax error, unexpected ‘}’ in /мойпуть/lib/kernel.php(885) : eval()’d code on line 333

            Ответить
            • 20 Август 2010 в 20:58

              возможно, когда вы удаляли код, не удалили его полностью или наоборот что-то лишнее стерли.
              Попробуйте удалить } с 333 строки файла lib/kernel.php

              Ответить
              • Сергей
                20 Август 2010 в 21:03

                да в kernel.php то ничего не писал. из кэша сайта удалил виджет с кодом твитов, но ничего не дало. теперь бы найти, где виджеты хранит мой движок(Блоголет)

                Ответить
                • 20 Август 2010 в 21:10

                  Хм, не знаком с этим движком. И даже не знаю, как бороться с данной проблемой. Попробуйте обратиться к автору движка.

                  Ответить
                  • Сергей
                    20 Август 2010 в 21:22

                    да не знаю, как описать им проблему эту. там я вроде удалил код из виджета, но теперь 158 строку требует

                    Ответить
                  • Сергей
                    20 Август 2010 в 21:43

                    Все ок. исправил. Я вашу другую версию кода втыкал и все ок было. Ту, которая без кэша. Может это из-за кэша так?
                    Или мне просто попробовать инклюдом?

                    Ответить
                    • 20 Август 2010 в 21:52

                      Прошу прощения, моя вина. Удалите символ } с предпоследней строки. Либо скачайте файл заново.

  • 20 Август 2010 в 19:45

    Ещё один способ тут:
    http://ainursafin.com/node/267

    Ответить
  • Oleg
    15 Октябрь 2010 в 5:39

    будет не лишним для тех у кого движок не на utf-8 )
    $post = iconv(‘UTF-8′,’WINDOWS-1251′,$post);

    Ответить
    • 7 Апрель 2011 в 23:24

      Это то? что мне нужно, но куда это вставить? Я только начинаю осваивать php ^)

      Ответить

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

Copyright © 2009-2012 | Дизайн: Trevor Fitzgerald | Перевод: Антон Рудников