Advertisement
  1. Code
  2. PHP

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

by
Read Time:9 minsLanguages:
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 imageFinal product imageFinal 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 applicationMange Accounts in the Birdcage applicationMange 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 ScreenTwitter OAuth Challenge ScreenTwitter OAuth Challenge Screen

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

Authorize app for Twitter APIAuthorize app for Twitter APIAuthorize 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 APIUsing the Twitter REST APIUsing 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 TimelineThe Ever Expanding Twitter TimelineThe 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 APIBirdcage statuses home_timeline via Twitter APIBirdcage 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 ExampleThe Birdcage Compose a Tweet PHP Twitter API ExampleThe 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.