PHP: Integrando o Twitter ao seu Site – Parte 3 (Agora com OAuth)

Yes! I’m alive!

Depois de desaparecer por praticamente 4 meses (se você não me segue no twitter, é claro), cá estou eu novamente, tomando as rédeas para terminar de uma vez esse jornada em 3 partes.

Esta etapa deveria ter como finalidade, conforme o primeiro artigo, o desenvolvimento de uma biblioteca que agregasse as funções que foram desenvolvidas nos primeiros dois artigos, mas as coisas mudaram um pouco de figura. Visto que o Twitter recentemente parou de dar suporte a Basic Auth à sua API, muitas pessoas me pediram para que este terceiro (e último) artigo mudasse para como se autenticar na API usando OAuth. Como sou fácil de se convencer, resolvi mudar o artigo final para atender essa nova demanda.

O que nós vamos ver daqui em diante é o passo a passo de como gerar os tokens necessários para se autenticar no Twitter, usá-los junto com OAuth para se autenticar e enviar/receber os tweets através da API.

Para aqueles que estão praguejando agora e esperavam pela biblioteca que integraria todos os recursos, sugiro dar uma olhada nesses projetos, que, basicamente, fazem o que iríamos fazer aqui (pra que retrabalho, right?):

Parte 3: Usando OAuth para acessar a API do Twitter

Antes de mais nada, vamos explicar o que diabos é OAuth. Mas não vá imaginando grandes coisas. O foco principal não é detalhar e esmiuçar o OAuth, e sim usa-lo para acessar a API do Twitter).

OAuth

Basicamente, OAuth (Open Authorization) é um padrão aberto que permite que os usuários compartilhem seus dados entre sites, sem a necessidade usar seu usuário e senha. Ele se baseia no uso de tokens, que transitam entre os sites, permitindo acesso a recursos especificos por um determinado tempo.

Gerando os tokens (a.k.a. pedindo pro Twitter liberar o acesso)

Primeiramente, vamos gerar os tokens necessários para acessar a API (ou você achou que aquela abominação de colocar o usuário e senha do artigo anterior ia ser definitiva?). Para isso, acesse o Twitter Developers e clique em “Register an app”.

Será solicitado seu usuário e senha e aparecerá a tela para Registrar uma nova aplicação. Neste formulário, para o nosso uso, é importante que seja selecionado em Application Type a opção “Browser” (dãh) e em Default Access Type, a opção “Read & Write” (no nosso exemplo, vamos enviar e receber tweets). Preencha o resto dos campos com os dados da sua aplicação, mas não precisa se preocupar se a Callback URL é valida (lembrando, para o nosso exemplo em especifico).

Feito o cadastro, a página seguinte tem 2 informações necessárias para nosso exemplo: “Consumer key” e “Consumer secret”.

No menu a direita, no link “My Access Token”, tem as duas últimas informações necessárias para continuarmos: “Access Token (oauth_token)” e “Access Token Secret (oauth_token_secret)”.

Aqui cabe uma explicação.

Nossa aplicação é simples e visa o simples acesso aos nossos próprios tweets ou tweets de nossa aplicação. Justamente por essa simplicidade que não vamos ver como obter o Access Token e o Access Token Secret remotamente (não neste artigo, quem sabe mais adiante). Aplicações tipo TwitPic e o TwitCam fazem uso desses tokens e os recuperam remotamente (Lembra? Allow/Deny?) evitando de digitar usuários e senha em aplicações de terceiros.

Bom, depois da explicação, vamos continuar a brincadeira. Já estamos em posse de tudo que precisamos para colocar as mãos em código (estavam ansiosos não?), então pra que ficar esperando, let’s go!

Mãos a obra

A partir de agora é jogo rápido, codificar é sempre mais fácil do que falar (digitar no caso, eu acho).

Eu não vejo porque de reinventar a roda, já existem várias bibliotecas que fazem o trabalho pesado, eu vou usar para o nosso exemplo, uma feita por Abraham Williams, chamada OAuth Twitter PHP, que faz muito bem o que se propõem, é de fácil uso, e foi uma das primeiras que eu achei (just kidding :D).

Faça o download da versão mais recente da biblioteca (na data de criação deste artigo, era a 0.2.0-beta3) e descompacte o diretório “twitteroauth” dentro da sua aplicação.

Feito isso, vamos criar o script que vai fazer a conexão com a API:

require_once('twitteroauth/twitteroauth.php');

$consumer_key = 'sua-consumer-key';
$consumer_secret = 'seu-consumer-secret';
$oauth_token = 'seu-oauth-token';
$oauth_token_secret = 'seu-oauth-token-secret';

$connection = new TwitterOAuth(
    $consumer_key,
    $consumer_secret,
    $oauth_token,
    $oauth_token_secret
);

$result = $connection->get(
    'account/verify_credentials',
    array()
);

if(property_exists($result, 'error')){
    echo 'Ooops. Deu erro';
} else {
    echo 'Tudo tranquilo';
}

Explicando:

  • Linha 1: Require para a biblioteca do Twitter OAuth;
  • Linha 3 a 6: Simples atribuição dos tokens a variáveis (parece ficar mais fácil de visualizar);
  • Linha 8 a 13: Criando a instância da classe TwitterOAuth usando os parâmetros levantados anteriormente;
  • Linha 15 a 18: Uso o método get da classe TwitterOAuth para recuperar os dados da conta do Twitter;
  • Linha 20 a 24: Simples verificação a verificação foi feita com sucesso.

O método get tem como parâmetros o recurso e os parâmetros a ser passados para a API. Para este exemplo, usei o recurso “account/verify_credentials”, que basicamente trás informações sobre o usuário. A lista completa de recursos pode ser vista aqui.

Recuperando os tweets

Partindo do pressuposto que já está tudo certo e você está autorizado na API, vamos brincar mais um pouco.
No primeiro artigo da série, mostrei como recuperar de maneiras mais simples (RSS, basicamente) os tweets do usuário. Agora que já estamos mais profissionais no assunto, vamos usar a API para recuperar esses dados. É bem simples:

require_once('twitteroauth/twitteroauth.php');

$consumer_key = 'sua-consumer-key';
$consumer_secret = 'seu-consumer-secret';
$oauth_token = 'seu-oauth-token';
$oauth_token_secret = 'seu-oauth-token-secret';

$connection = new TwitterOAuth(
    $consumer_key,
    $consumer_secret,
    $oauth_token,
    $oauth_token_secret
);

$result = $connection->get(
    'statuses/user_timeline',
    array()
);

echo '<ol>';
foreach($result as $node){
    printf('<li><a href="%s">%s</a></li>',
        'http://twitter.com/' . $node->user->screen_name. '/status/' . $node->id,
        $node->text
    );
}
echo '</ol>';

A Explicação também é simples: Eu adaptei o exemplo do primeiro post para ao invés de percorrer um XML ele percorrer o resultado da consulta à API. Com isso ele vai montar a mesma lista com os Tweets.

Enviando um tweet

No segundo artigo, utilizamos cURL para acessar a API e enviar tweets, passando o usuário e senha. Isso não é legal, e é evil. Agora podemos usar o método “post” para enviar os tweets, basicamente temos que mudar o recurso e passar a mensagem como parametro:

require_once('twitteroauth/twitteroauth.php');

$consumer_key = 'sua-consumer-key';
$consumer_secret = 'seu-consumer-secret';
$oauth_token = 'seu-oauth-token';
$oauth_token_secret = 'seu-oauth-token-secret';

$connection = new TwitterOAuth(
    $consumer_key,
    $consumer_secret,
    $oauth_token,
    $oauth_token_secret
);

$result = $connection->post(
    'statuses/update',
    array(
        'status' => 'Text of status here',
    )
);

Rápido, fácil e indolor. Assim que as coisas devem ser!

Com isso você já tem uma boa base para criar aplicações no seu site, interagindo com a API do Twitter. Como complemento recomendo fortemente ler a documentação da Twitter Developers, que tem muita coisa boa pra ser aproveitada.

Pessoal, fico por aqui, até a próxima e boa diversão!

Links:

Créditos da imagem do “mano” twitter – Luciano Fontoura



Leia também:

  1. PHP: Integrando o Facebook ao seu site – parte 1 – Acessando o perfil público
  2. PHP: Integrando o Twitter ao seu Site – Autenticação de Usuários
  3. PHP: Integrando o Twitter ao seu Site – Extra (Mais comandos da API)
  4. PHP: Integrando o Twitter ao seu Site – Parte 2
  5. PHP: Integrando o Twitter ao seu site – Parte 1

Categoria: Sem categoria
Tags: , ,

146 respostas a PHP: Integrando o Twitter ao seu Site – Parte 3 (Agora com OAuth)

  1. Desculpe, mas o codigo cortou. Por isso estou postando novamente.

    Integrei meu site para postar no twitter semana passada e 2 dias depois recebi a mensagem do twitter informando a mudança no sistema de autenticação. Encontrei a solução dos meus problemas aqui. Tudo explicadinho.
    Cadastrei a aplicação no twitter.
    Alterei os dados no arquivo… descompactei o twitteroauth no meu site… mas não deu certo.
    Preciso só do Post. então só criei o arquivo:
    enviatwitt.php

    Segue o conteúdo do arquivo:

    post(
    ‘statuses/update’,
    array(
    ‘status’ => ‘Text of status here – Mensagem de teste’,
    )
    );

    ?>

    Se os arquivos requeridos estão na pasta… ao executar esse arquivo ele não teria que postar a mensagem?

    Agradeço se puder me ajudar.

  2. Tudo bem Gustavo?

    Teria como tu mostrar todo o conteúdo do teu arquivo enviatwitt.php? Caso aqui fique ruim de colar, utilize o pastebin e cole o link.

    Outra coisa, está dando algum erro? ou simplesmente não executa nada?

  3. Olá, primeiramente parabens pelo artigo.
    Estou tendo erro ao fazer um simples teste com a biblioteca indicada, dá-se o erro “Fatal error: Class ‘OAuthSignatureMethod_HMAC_SHA1′ not found in /usr/local/www/apache22/data/Includes/twitteroauth/twitteroauth.php”
    sendo que fiz corretamente conforme o artigo.
    agradeço desde já.

  4. Rodrigo,

    Essa classe está dentro do arquivo OAuth.php que deve estar no mesmo diretório que o twitteroauto.php. Dentro desse arquivo (twitteroauth.php) tem um require para o arquivo OAuth.php, confira se eles se encontram no mesmo diretório e se as permissões estão Ok.

  5. onde consigo estes dados

    $oauth_token = ‘seu-oauth-token’;
    $oauth_token_secret = ‘seu-oauth-token-secret’;

    somente pelo retorno do twitter
    esses dados são estáticos?

    pois quando dou var_dump aparece

    stdClass Object
    (
    [request] => /1/statuses/update.json
    [error] => Could not authenticate you.
    )

  6. Opa, ao cadastrar uma app nova no Twitter, no menu da direita tem um link chamado “My Access Token”, é nesse lugar que estão as duas informações necessárias, conforme foi explicado no post.

    Esses dados são sempre os mesmo para o mesmo usuário, ou seja, se você pegar esse dado dinamicamente ou se você pegar ele direto na página de aplicações, os dados serão os mesmos

  7. Oi Bom dia! Eu tenho que fazer o seguinte:

    Meus funcionários cadastram os produtos da loja num sistema administrativo. Preciso que assim que eles clicarem lá no botão “Cadastrar” e que o sistema der o “insert” vá uma mensagem para o twitter informando que um novo produto foi cadastrado.

    Tenho como fazer isso? Se sim, como?

    Tentei utilizar o segundo código desse post e retorna a mensagem de erro.

    Ajuda pelo amor de Deus! Tô realmente necessitando disso.

  8. Sim Diogo, é possível, não tem nenhuma mágica. O que tu precisa é de uma conta no Twitter da tua empresa, e usar o código acima para fazer a inserção de tweets, usando no status o nome do novo produto. Tu fizeste todos os passos ? Que erro acontece ?

  9. Kidho vou te explicar como estou fazendo pq pode ser que eu esteja errando algum passo.

    Criei a conta do twitter, criar uma app, no cadastro em “Application Website:” coloquei o nome do meu site, em “Application Type:” marquei “Browser”, “Callback URL:” coloquei o endereço do meu site “/nome_da_pagina.php” e nessa página só dei um “echo ‘ok’” e em “Default Access type:” marquei: “Read & Write”

    Peguei a consumer_key, consumer_secret, oauth_token e oauth_token_secret

    Você pode baixar os arquivos que estou utilizando aqui:

    http://www.diogobarros.com.br/twitter/twitter.rar

    Pode baixar, tem as páginas que estou utilizando.

    Espero respost, abraço!

  10. A principio não tem nada errado, se tu substitui corretamente os 4 parametros pelos que foram fornecidos pela API do Twitter, está tudo correto. Mande o retorno do teu $result para hboaventura at gmail dot com

  11. Apareceu a mensagem “Tudo Tranquilo” agora! Mas e aii como faço pra mandar uma mensagem pra o Twitter?

    Te mandei o email.

    Abs!

  12. Kidho, parabéns pelo artigo!
    Tenho uma dúvida. É possível fazer uma aplicação em um site em que a pessoa digita seu usuario e senha e envia um tweet pelo site, usando o OAuth?

  13. Rodrigo,
    O uso de OAuth é justamente para evitar que o usuário digite o usuário e senha no teu site, e sim, use a autenticação do Twitter para isso, com muito mais segurança e a prova de falhas.
    Para isso, existe o Twitter @Anywhere, que basicamente faz o meio de campo entre o usuário e o Twitter. Posteriormente, mais breve do que o periodo entre os outros post, vou fazer um artigo de como usar o @Anywhere

  14. Primeiramente, muito legal seu blog, achei-o no Google. Cara, não tem jeito, eu não consigo encontrar meu “oauth token” nem o “oauth token secret”. Ao entrar na tela do meu app onde mostram os “consumer key” e “consumer secret”, não há no menu da direita o link “My Access Token” conforme você disse. Simplesmente não consigo essa informação para voltar a funcionar minha aplicação com essa nova maneira de autenticar. Somente aparece pra mim isso:
    Request token URL
    http://twitter.com/oauth/request_token

    Access token URL
    http://twitter.com/oauth/access_token

    Authorize URL
    http://twitter.com/oauth/authorize

    Mas ao acessar, não me mostra nada.
    Então… por gentileza, onde encontro o “oauth token” e o “oauth token secret”?

  15. Amigo, agora com todos os dados corretos, ao tentar realizar um “update” no meu twitter, meu programa retorna o seguinte erro: Could not authenticate you. Pq?

  16. No servidor da minha máquina está funcionando tranquilamente, porém quando coloco no servidor web da minha aplicação os tweets não são enviados. Seria alguma função do PHP desativada? As disabled functions do servidor web da aplicação são show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen

  17. Cara, muito bem escrito o tutorial, parabens.
    A primeira conexão da “tudo tranquilo”, porém, não consigo fazer listar os tweets!
    no meu codigo fonte aparece só , sem conteudo.
    Não entendi direito se é problema com autenticação…ele vai mostrar os tweets da conta que eu criei a aplicação ou eu posso autenticar outro usuario?!

    obrigado

  18. Rafael (creio ser este o teu nome), no post, explica como listar os tweets para um usuário, no caso, o que tu pegou o access token. Em breve vou publicar um artigo referente a autenticar usuários via API do twitter, sem a necessidade dele prover o token manualmente.

    Tem como tu colocar o teu script via http://pastebin.com/ aqui?

  19. ola,

    parabens. Então, da pra voce me passar um passo-a-passo, tipo crie uma pagina com codigo X e depois cria uma pagina com codigo Y e envia para servidor. Qual pagina acesso pra saber se esta tudo ok?

    Obrigado mesmo

  20. Opa, tudo bem? Não sei se entendi muito bem a tua pergunta, mas creio que está bem descrito no artigo o que deve ser feito, tu só precisa de uma página para fazer os testes. Para saber se está tudo Ok, é só usar o primeiro script

  21. Tudo bem e vc? então, fiz tudo e não aparece nada, nem mensagem de erro e nem de OK. Tenho que mudar as permissões da pasta? eu até mudei 0777 mas deu interno de servidor. Se for possível me de uma luz. valeu mesmo

  22. Do jeito que tu tá falando é praticamente como guiar no escuro. Muito provavelmente, se não está aparecendo nada, está faltando alguma coisa na instalação do teu servidor. Além disso, teus warnings e errors do PHP devem estar desabilitados. Sugiro configurar teu ambiente antes.

  23. Tu poderia estender esse post mostrando mais funções da biblioteca tais como enviar mensagem direta, deletar tweet, recuperar mensagens diretas, recuperar menções, enfim. Fica a dica. Parabéns pelo artigo.

  24. Henrique, fiz alguma alterações aqui no meu projeto e o update do status parou de funfar, aparece o segunte erro: stdClass Object ( [request] => /1/statuses/update.json [error] => Incorrect signature )

    O pior e que antes funfava nornal.

    Se souber o que pode ser ou como resolver agradeço muito.

  25. Italo, sem saber as alterações, não tem como saber. Sugiro fazer um diff entre a versão atual e a versão anterior do teu arquivo (tu usa algum controle de versionamento de arquivos, diz que sim, por favor :D). Caso tu não use (e eu sugiro usar, urgentemente), sugiro revisar os tokens e se a classe necessária para a autenticação na API foi adicionada.

  26. Dúvida: Sempre tenho que dar allow ? Não seria apenas clicar uma vez? Tem como deixar a aplicação para que não seja exibido o allow toda hora?

  27. Leonardo, nos exemplos do post, tu não precisar dar allow para a enviar os tweets, porque tu já está pegando o token e usando ele na aplicação. O que pode estar acontecendo para ficar pedindo allow sempre é que tu não esteja gravando o token fornecido pela API do Twitter

  28. Testei assim:

    $connection->post(‘/direct_messages/new’, array(‘user’ => $usuario, ‘text’ => $texto));

    Mas não deu certo. :/

  29. Galera, estou tentado deletar o tweet através do seguinte código:

    $connection->post(‘/statuses/destroy/’.(int)$id);

    Já vi em vários lugares e todos usam dessa maneira, mas aqui não funfa. Se alguém conseguir deletar explica aí como fez :D Enviar DM tamém, se alguém conseguir, avisa aí!

  30. Pingback: PHP: Integrando o Twitter ao seu Site – Extra (Mais comandos da API) | bittersweet dev

  31. Henrique, to com o mesmo problema do Diogo Says no dia 09/09 aparece ‘Tudo Tranquilo’ porem não envia nenhuma msg para o twitter. Vc pode me ajudar? Abraço.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>