A necessidade de se integrar sites com o Twitter vem crescendo a cada dia devido ao sucesso do microblog. Essa integração pode ser feita através de plugins que se comunicam com a API oficial.
Porém achar um plugin que se adeque ao layout de seu site nem sempre é uma tarefa das mais fáceis e desenvolver seu próprio plugin na “burocrática” API do Twitter requer uma linha de aprendizagem muito alta.
Por isso, pesquisei uma maneira alternativa e mais fácil de se capturar os tweets de um usuário. E encontrei a solução através do acesso à página de feeds.
Isso mesmo. Dentro do microblog todos os usuários têm à disposição uma página que contém os seus tweets no formato rss. Assim, podemos ler os tweets através de XML e utilizá-los como bem entender.
Bom, então vamos ver como fazer para importar os tweets.
Para facilitar, criei 3 funções: get_tweets, relative_time e get_feeds. Essa última eu já publiquei aqui no blog há algum tempo. Clique aqui para conferir.
No nosso exemplo, implementaremos 2 arquivos:
- funcoes.php
- index.php
No primeiro vai as funções e no segundo a exibição dos tweets.
Implementação das funções:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <?php /** * Função para capturar os tweets de um perfil do twitter * @author Rafael Wendel Pinheiro * @param String $username Nome de usuário no twitter * @param int $limit O número de tweets a ser exibido * @return String $s Os tweets importados já em HTML */ function get_tweets($username, $limit = 5){ $tweets = get_feeds('http://twitter.com/statuses/user_timeline/' . $username . '.rss'); if (empty($tweets->item)){ return 'Deu erro'; } $i = 0; foreach ($tweets->item as $tweet){ /* Formata o tweet */ $msg = substr(strstr($tweet->description,': '), 2, strlen($tweet->description))." "; /* Link do status */ $link = $tweet->link; /* Data da publicação do tweet */ $time = $tweet->pubDate; /* Abre a <div> (Associe-a a uma classe se desejar) */ $s .= '<div>'; /* Tweet e Status */ $s .= '<p><a href="http://www.twitter.com/'. $username .'" target="blank" rel="noopener">'. $username .' diz:</a> '. $msg .'<br /><small><a href="' .$link. '" target="_blank" rel="noopener">' . relative_time(strtotime($time)). ' atrás</a></small></p>'; /* Fecha a </div> */ $s .= '</div><br />'; $i++; if ( $i >= $limit ){ break; } } return $s; } function relative_time($original, $do_more = 0 ) { /* Array com os períodos de tempo */ $chunks = array( array(60 * 60 * 24 * 365 , 'ano'), array(60 * 60 * 24 * 30 , 'mes'), array(60 * 60 * 24 * 7, 'semana'), array(60 * 60 * 24 , 'dia'), array(60 * 60 , 'hora'), array(60 , 'minuto'), ); $plural = 's'; $today = time(); $since = $today - $original; for ($i = 0, $j = count($chunks); $i < $j; $i++) { $seconds = $chunks[$i][0]; $name = $chunks[$i][1]; if (($count = floor($since / $seconds)) != 0) break; } if ($name == 'mes') $plural = 'es'; $print = ($count == 1) ? '1 '.$name : "$count {$name}$plural"; if ($i + 1 < $j) { $seconds2 = $chunks[$i + 1][0]; $name2 = $chunks[$i + 1][1]; if ($name2 == 'mes') $plural = 'es'; /* Adicionar segundo item se for maior que 0 */ if ( (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0) && $do_more ){ $print .= ($count2 == 1) ? ', 1 '.$name2 : ", $count2 {$name2}$plural"; } } return $print; } /** * Função para importar os feeds de um site * @author Rafael Wendel Pinheiro * @param String $url A URL completa da página de feeds * @return Array $itens Um array com informações do site onde os feeds foram buscados e de suas notícias/posts */ function get_feeds($url){ $content = simplexml_load_file($url); if(!isset($content->channel)){ die('Conteúdo rss não é válido'); } $itens = $content->channel; return $itens; } ?> |
Apesar de serem 3 funções, sempre que quisermos importar os tweets utilizaremos apenas a função get_tweets. As outras duas funções serão executadas dentro dela. Essa função deve receber um nome de usuário válido do Twitter e o número de tweets que deseja importar (padrão = 5). Ela retornará uma string já formatada em html com os tweets capturados. Se você quiser formatar esse retorno (adicionar estilo, etc) edite o conteúdo das linhas 29 à 35 de acordo com suas necessidades.
A função relative_time é responsável por formatar o tempo de publicação de cada status. E a get_feeds é a que busca o conteúdo rss do perfil no Twitter.
Agora no arquivo index.php basta chamar a função get_tweets.
1 2 3 4 5 6 7 8 9 10 11 | <?php include('funcoes.php') ?> <!DOCTYPE html> <html> <head> <title>Importando Tweets sem plugin e API</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php echo get_tweets('rafaelwendel') ?> </body> </html> |
E pronto! Agora você pode colocar os seus últimos tweets em qualquer parte do seu site sem dores de cabeça e com a formatação do seu layout.
Espero que gostem
Abs!
Siga-me no twitter: @rafaelwendel
Ótimo tutorial! Muito bem explicado!
Eu vou fazer meu pedido novamente. rs
Teria como vc fazer um tutorial sobre o novo doctryne?
http://www.doctrine-project.org/
Sei que é complicado e trabalhoso. Mas fica ae o meu pedido.
Quando possível é claro. Obrigado!
Parabéns pelo site! ^^
Olá Samuel,
Assim que possível publico algo a respeito do Doctrine 2 aqui.
Abs
Parabéns pelo tutorial, muito bom.
O meu deu erro e não sei como resolver ….apareceu a mensagem: Conteúdo rss não é válido
O que faço?