Salve Comitê Revolucionário Ultra-Jovem! Ráááá.. Alguém lembra ? Caju, Chiclé e Macaco ? Pô, nostalgia na alta agora galerê! Mas bons tempos aqueles…

Enfim, esse não é o assunto do nosso post. Voltemos a falar de nosso microblog predileto, sim, o Twitter!  No primeiro post da série, falamos inicialmente sobre a utilização da API do twitter e mostramos como atualizar seu status utilizando-a. Agora daremos continuidade ao nosso estudo e resgataremos nossa timeline, ou seja,  a atualização do status de todos a quem seguimos, inclusive as nossas próprias. Entretanto, aconselho fortemente a leitura do post anterior para entendimento de alguns conceitos e recursos utilizados neste.

Como também mencionado anteriormente, a API do twitter oferece uma limitação de requisições, como os próprios alegam, para colocar ordem. Como o exemplo desta que utilizaremos, a limitação é de 150 requisições por hora, para APIs que necessitam de autenticação (nosso caso), o controle é feito pelo usuário requisitado, para as que não precisam, essa restrição é feita pelo endereço IP.

A API para resgatar nossa timelime pode ser acessada pelo link:

http://api.twitter.com/1/statuses/home_timeline.format

Perceba que ao final da URL temos .format. Isso indica ao twitter em qual formato queremos receber o retorno; os formatos disponíveis são: XML, JSON e ATOM. E adivinha qual utilizaremos? XML?! NOT! Utilizaremos o formato JSON, pelo simples motivo que usaremos a função do php json_decode para converter o retorno em array, facilitando assim imensamente a manipulação. A API que utilizaremos nos retorna os últimos 20 registros de atualização dos nossos amiguinhos do twitter e da nossa própria timeline, mas veja bem, no máximo 20.

Vamos ao código:

<?php

/**
 *
 * - Função para resgatar sua timeline no twitter.
 *   Referente a sua home/time_line.
 *
 * @author Frederico Estrela
 * @since 2010-05-18
 * @version 2010-05-18
 * @access public
 * @param <string> $username
 * @param <string> $password
 *
 */
function getTimeLine( $username, $password )
{
        // Inicializa o recurso curl e retorna o
        // resource que iremos trabalhar
        $ch = curl_init();

        // Remove espaço de usuário e senha para autenticarmos na API
        $username = trim($username);
        $password = trim($password);

        /*
         * URL de API para resgatar a timeline do usuário
         * logado. Nesse caso estamos pedindo o seu retorno
         * em JSON.
         */
        $host = 'http://api.twitter.com/1/statuses/home_timeline.json';

        // Mesma diretivas apresentadas no post anterior

        //utilize as linhas comentadas abaixo caso sua rede
        //esteja passando por um proxy
        //curl_setopt($ch, CURLOPT_PROXY, "http://seuproxy.local");
        //curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
        //curl_setopt ($ch, CURLOPT_PROXYUSERPWD, "USER:PASSWORD");
        curl_setopt($ch, CURLOPT_URL, $host);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POST, 1);

        // Efetua a requisição e pega o retorno em JSON
        $retorno = curl_exec($ch);

        // Informações sobre a requisição
        $resultadoFinal = curl_getinfo($ch);
        curl_close($ch);

        /*
            Aqui retornamos o status da requisição e o retorno
            em JSON convertida para array com a função json_decode
         */
        return array( 'return' => $resultadoFinal['http_code'],
                      'timeline' => json_decode( $retorno, true ) );

}

?>

Podemos notar que o código é praticamente igual ao que utilizamos anteriormente, apenas com algumas modificações. Nesta nova versão não passamos o status para ser atualizado e passamos outra URL para realizar a requisição. Ao final do script retornamos o campo http_code, que nos indica o status final da requisição e a resposta propriamente dita, já convertida para array.

Para melhorar o entendimento criei uma index para apresentar a timeline requisitada. Segue o código:

<?php
    require_once('timeline.php');

    // Chamada de função passando parâmetros
    // necessários retornando timeline
    $timeline = getTimeLine(USR, PWD);

    // Se o retorno for diferente de 200, acusa erro.
    if ( $timeline['return'] != 200 ) {
        // Imprime erro
        echo '<div class="erro">Cod ' . $timeline['return'] .
             ' - Erro ao recuperar timeline.</div>';
    } else {
        // Pega retorno da timeline
        $friends = $timeline['timeline'];

        echo '<ul>';

        // Imprime toda timeline
        foreach ( $friends as $time ) {
            echo '<li>' .
                 '<img src="' . $time['user']['profile_image_url'] .
                 '" />' .
                 '<span>' . $time['user']['screen_name'] . '<br />' .
                 '  Data/Hora: ' .
                 date('d/m/Y H:i:s', strtotime( $time['created_at'] ) ) .
                 '<br /></span>' .
                 '<label>' . utf8_decode( $time['text'] ) . '</label>' .
                 '</li>';
        }

        echo '</ul>';

    }
?>

O código completo pode ser baixado ao final do post. Basta alterar as constantes de usuário e senha no início da index.php e brincar!

Galera é isso ai, estou pensando em futuramente até fazer uma classe de manipulação total do twitter e disponibilizar aqui, o que acham? Manifestem-se nos comentários!

É isso ai… Enjoy it!

Scripts: Clique aqui para Download


Artigos relacionados:

  1. Atualizando o Twitter via PHP
  2. Computador da década de 80 acessará o Twitter