Importe tweets para seu site sem plugins e API

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

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Ó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! ^^

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *