PHP

Для тех, кто так и не смог подружиться с Twitter API

Нестандартный способ сделать вывод ленты твиттов на сайте.

Совсем недавно, когда еще мой блог располагался на hostinger, я хотел сделать вывод своих постов из твиттера. Это все делается легко через twitter api, как рассказывается на огромном количестве сайтов, где я искал информацию.

Недавно разработчики twitter решили изменить/переписать своё API, именно поэтому в сети сейчас лежит большое количество нерабочего кода, который пытается работать с отключенным старым вариантом API.

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

Используется библиотека Simple Html Dom, которая парсит реальную страницу твиттера и из нее выбирает то, что вам необходимо — ваши твитты. Кстати, библиотеку можно скачать здесь.

Для демонстрации выше описанного приведу пример, где выводится 2 последних твитта из моей ленты @evgwed.

<?php require_once 'simple_html_dom.php'; // библиотека для парсинга $username = 'evgwed'; // Имя в twitter $maxpost = '2'; // к-во постов $html = file_get_html('https://twitter.com/' . $username); $i = '0'; foreach ($html->find('li.expanding-stream-item') as $article) { $item['text'] = $article->find('p.js-tweet-text', 0)->innertext; $item['time'] = $article->find('small.time', 0)->innertext; $articles[] = $item; $i++; if ($i == $maxpost) break; } ?> <div class="last_comment_os transparency_i"> <?php for ($j = 0; $j < $maxpost; $j++) { ?> <div class="lc_message"> <?=$articles[$j]['text'];?> </div> <div class="lc_uzer"> <span class="lc_ugol"></span> <img class="lc_avatar" title="Евгений Эдуардович" alt="Евгений Эдуардович" src="<?php bloginfo('template_url'); ?>/img/tw_avatar.jpeg"/> <span class="lc_name"><a target="_blank" title="Catine в Twitter`е" rel="nofollow" href="https://twitter.com/evgwed">evgwed</a></span> </div> <?php } ?> </div>

У этого способа вывода есть свои достоинства и недостатки.

Достоинства:

  1. нет необходимости работать с API твиттера;
  2. можно изменить дизайн(способ вывода) твиттов как вам захочется, чего не умеет стандартный виджет от твиттера.

Недостатки:

  1. при изменении дизайна страницы твиттера, парсер перестает работать;
  2. нет никакого кэширования, надо писать его самому.

Как и у любого решения есть доводы за и против, и остается лишь вам решать, что вы будете использовать. Я отказался от этого способа вывода ленты из твиттера, так как без кэширования его использовать не стоит. Поэтому я вам настоятельно рекомендую использовать Twitter API, может быть у вас получится с ним подружиться.

{"time":1561657044617,"blocks":[{"type":"paragraph","data":{"text":"Нестандартный способ сделать вывод ленты твиттов на сайте."}},{"type":"paragraph","data":{"text":"Совсем недавно, когда еще мой блог располагался на hostinger, я хотел сделать вывод своих постов из твиттера. Это все делается легко через twitter api, как рассказывается на огромном количестве сайтов, где я искал информацию."}},{"type":"paragraph","data":{"text":"Недавно разработчики twitter решили изменить/переписать своё API, именно поэтому в сети сейчас лежит большое количество нерабочего кода, который пытается работать с отключенным старым вариантом API."}},{"type":"paragraph","data":{"text":"И я пытался, скачивал, копировал, хотел запустить примеры, но случайно наткнулся на решение задачи без твиттер API."}},{"type":"paragraph","data":{"text":"Используется библиотека Simple Html Dom, которая парсит реальную страницу твиттера и из нее выбирает то, что вам необходимо — ваши твитты. Кстати, библиотеку можно скачать здесь."}},{"type":"paragraph","data":{"text":"Для демонстрации выше описанного приведу пример, где выводится 2 последних твитта из моей ленты @evgwed."}},{"type":"code","data":{"code":"<?php\n\t\t\trequire_once 'simple_html_dom.php'; // библиотека для парсинга\n\t\t\t$username = 'evgwed'; // Имя в twitter\n\t\t\t$maxpost = '2'; // к-во постов\n\t\t\t$html = file_get_html('https://twitter.com/' . $username);\n\t\t\t$i = '0';\n\t\t\tforeach ($html->find('li.expanding-stream-item') as $article) {\n\t\t\t$item['text'] = $article->find('p.js-tweet-text', 0)->innertext;\n\t\t\t$item['time'] = $article->find('small.time', 0)->innertext;\n\t\t\t$articles[] = $item;\n\t\t\t$i++;\n\t\t\tif ($i == $maxpost)\n\t\t\tbreak;\n\t\t\t}\n\t\t?>\n\t\t<div class=\"last_comment_os transparency_i\"> \n\t\t\t<?php for ($j = 0; $j < $maxpost; $j++) { ?>\n\t\t\t<div class=\"lc_message\"> \n\t\t\t<?=$articles[$j]['text'];?> \n\t\t\t</div> \n\t\t\t<div class=\"lc_uzer\"> \n\t\t\t<span class=\"lc_ugol\"></span> \n\t\t\t<img class=\"lc_avatar\" title=\"Евгений Эдуардович\" alt=\"Евгений Эдуардович\" src=\"<?php bloginfo('template_url'); ?>/img/tw_avatar.jpeg\"/> \n\t\t\t<span class=\"lc_name\"><a target=\"_blank\" title=\"Catine в Twitter`е\" rel=\"nofollow\" href=\"https://twitter.com/evgwed\">evgwed</a></span> \n\t\t\t</div> \n\t\t\t<?php } ?>\n\t\t</div>"}},{"type":"paragraph","data":{"text":"У этого способа вывода есть свои достоинства и недостатки."}},{"type":"header","data":{"text":"Достоинства:","level":3}},{"type":"list","data":{"style":"ordered","items":["нет необходимости работать с API твиттера;","можно изменить дизайн(способ вывода) твиттов как вам захочется, чего не умеет стандартный виджет от твиттера."]}},{"type":"header","data":{"text":"Недостатки:","level":3}},{"type":"list","data":{"style":"ordered","items":["при изменении дизайна страницы твиттера, парсер перестает работать;","нет никакого кэширования, надо писать его самому."]}},{"type":"paragraph","data":{"text":"Как и у любого решения есть доводы за и против, и остается лишь вам решать, что вы будете использовать. Я отказался от этого способа вывода ленты из твиттера, так как без кэширования его использовать не стоит. Поэтому я вам настоятельно рекомендую использовать Twitter API, может быть у вас получится с ним подружиться."}}],"version":"2.13.0"}
image

Евгений

Специалист по разработке систем на современных PHP фреймворках.