Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Construindo Com a API do Twitter: OAuth, Leitura e Publicação

by
Difficulty:AdvancedLength:MediumLanguages:
This post is part of a series called Building With the Twitter API.
Building With the Twitter API: Getting Started
Building With the Twitter API: Using Real-Time Streams

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Final product image
What You'll Be Creating

Esse artigo é a segunda de três partes da série sobre como usar a API do Twitter. Se você não leu a parte um, você pode lê-la aqui.

Autenticação com Twitter via OAuth

O Birdcage usa uma extensão do Yii, chamada Yii Twitter, criada por Will Wharton, que faz uso da biblioteca de código aberto PHP OAuth Twitter, criada por Abraham Williams.

Coloco a extensão na árvore de diretório do Yii dentro de /app/protected/extensions/yiitwitteroauth. No Yii, você pode configurar as propriedades da extensão no arquivo de configuração main.php, dessa forma:

Normalmente, carregaria essas configurações através de arquivo .ini no Yii, mas para simplificar a preparação e configuração do Birdcage setup, colocarei as chaves de configuração da aplicação no modelo UserSettings. Estendi o YiiTwitter.php para carregar as chaves padrão de aplicação do usuário durante a inicialização:

Uma vez instalado e configurado as opções da aplicação, você precisará visitar o menu Accounts e clicar em Add Your Twitter Account

Mange Accounts in the Birdcage application

Ao clicar no ícone do Twitter, ele executará o método Connect do controlador do Birdcage:

Isso levará você até o Twitter, através do OAuth, para autenticar sua conta:

Twitter OAuth Challenge Screen

Uma vez conectado, o Twitter pedirá para você autorizar a aplicação Birdcage:

Authorize app for Twitter API

O Twitter redirecionará o navegador para sua URL callback, que é o método Callback do controlador do Twitter. Isso guardará seu token OAuth de usuário do Twitter e uma chave secreta, dentro da tabela account:

Agora, o Birdcage está pronto para começar a realizar requisições em busca de dados do Twitter através da API, no lugar do usuário.

Como verá mais à frente, uma simples chamada com os tokens dão acesso à API:

Processando Tweets em Plano de Fundo

Para essa parte dois do nosso tutorial, usaremos a API REST do Twitter. Na parte três, aprofundaremo-nos na API de Fluxo de tempo real e intermitente:

Using the Twitter REST API

Buscando Linhas do Tempo do Twitter

Linhas do Tempo do Twitter são uma fila crescente de tweets, logo, monitoramento de atividade é um pouco mais complicado que na maioria das APIs REST. Você pode aprender mais sobre o único problema que as linhas do tempo apresentam. Essencialmente, de acordo com que você tenta ler o histórico da linha do tempo, mais e mais tweets são adicionados à ele o tempo todo:

The Ever Expanding Twitter Timeline

O Twitter provê uma forma relativamente simples de administrar isso. Você pode seguir o código que realiza esse procedimento no modelo de Tweet do Birdcage, getRecentTweets().

Primeiro, veremos o maior (mais recente) tweet_id em nossa base de dados e retornaremos um valor incrementado:

Então, requisitamos uma quantidade (por exemplo, 100) de tweets desde o último que foi processado. A API do Twitter reconhece o since_id como o ponto na linha do tempo que você deseja começar a buscar os dados. Ela retornará todos os tweets mais recentes que o since_id. No exemplo abaixo, consultamos o método statuses/home_timeline da API REST. A linha do tempo inicial é onde o usuário vê sua tela principal do Twitter.

Também é importante verificar se tivemos o uso limitado pelo Twitter. Cada requisição usuário-aplicação é permitido realizar 180 requisições a linha do tempo inicial do usuário em um período de 15 minutos—mas as limitações de uso variam por atividade, logo, pode variar bastante para você.

Para cada tweet recebido, invocaremos o método Parse() para processar os dados e guardá-los em várias tabelas da base de dados. Durante o processo, rastrearemos o tweet_id mais velho/menor que recebemos do Twitter:

O método parse adiciona informação do usuário de Twitter referenciado e, então, o tweet em si. Há mais detalhes no modelo Parse.php.

Assim, continuamos a requisitar os blocos de tweets usando o menor ID da requisição anterior como o parâmetro max_id que enviamos para o Twitter. Realizamos as requisições subsequentes usando o since_id do tweet que começamos e o max_id do último tweet mais antigo retornado.

Assim, por exemplo, quando novos tweets chegarem, não os veremos—já que o Twitter só nos envia os tweets desde o maior tweet_id inicial (since_id) da nossa base de dados. Teremos de voltar para buscar novos tweets depois, que sejam maiores que nosso since_id inicial.

É importante perceber que não recebemos um número infinito de tweets antigos. O Twitter nos retorna somente o número de tweets que requisitamos que sejam mais velhos que o ID anterior menor (max_id em nossa próxima chamada).

Uma vez que você se acostuma com o modelo e a nomenclatura, é bem simples.

Embora tenha o comando Fetch que executará essa operação, também configuraremos uma tarefa cron para executar nosso DaemonController a cada cinco minutos:

Por sua vez, isso invocará nosso método getStreams que executará as operações descritas acima (nota, a funcionalidade de fluxo será descrita na parte três desta série):

O resultado final é mais ou menos assim:

Birdcage statuses home_timeline via Twitter API

Uma vez, deparei-me com problemas na API do Twitter. Você pode verificar o estado dos serviços da API do Twitter, aqui.

Publicando um Tweet

Publicar tweets em sua conta do Twitter é bem simples e direto. Só precisar usar o método REST statuses/update. Porém, dá um pouco mais de trabalho realizar uma contagem precisa de caracteres. 

O Twitter transforma todas as URLs em http://t.co, assim, para todas as URLs, considere que elas tenham 20 caracteres. Precisei de um código JavaScript que contasse os caracteres e levasse em consideração esse ponto do tamanho das URL. Acabei usando uma combinação de jQuery e JavaScript, que detalharei mais abaixo.

Preferi criar um modelo específico para a composição de tweets, chamado Status.php. Isso facilitou o trabalho com o Yii para gerar formulários que permitissem publicar os tweets através da API. 

Quando você clica no menu Compose do Birdcage, ele levará você ao método Compose do controlador StatusController:

Isso carregará o formulário para a criação de um item Status. Verifique o arquivo _form.php dentro de /app/protected/views/status/.

Primeiro, carreguei várias bibliotecas jQuery e JavaScript para a contagem de caracteres:

Combinei o plugin simplyCountable do jQuery, com o twitter-text.js (um script de processamento de texto de Twitter em JavaScript) e com um script encarregado de ajustar o tamanho das URL: twitter_count.js.

O código abaixo criar o restante do formulário de criação de status e ativa os scripts de contagem de caracteres:

O resultado deve parecer com isso:

The Birdcage Compose a Tweet PHP Twitter API Example

Quando o tweet for salvo, ele executa esse código no StatusController—que publica o tweet_text final, no Twitter, através do OAuth:

Próximos Passos

Nessa parte desta série, revisamos como autenticar com a API do Twitter usando OAuth; como consultar por períodos de tweets da linha do tempo do usuário; e como realizar contagem de caracteres de tweets e publicá-los através da API. Espero que tenha achado esse artigo útil.

Na parte três, trataremos sobre o uso da API de Fluxos do Twitter e sobre a implementação de código aberto, Phirehose, desse fluxo.

Por favor, deixe quais comentários, correções ou ideais extras abaixo. Você pode navegar pelos meus outros tutoriais aqui no Tuts+ através da minha página aqui, ou me segundo através do Twitter.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.