PHP: Integrando o Twitter ao seu Site – Autenticação de Usuários

Quem está vivo sempre aparece (clichê cretino, e um tanto enganoso se por acaso você acreditar em fantasmas, zumbis, etc…). Com essa

afirmação, estamos aqui novamente para falar de… Twitter!

Já falei que ia ser um artigo de somente 3 partes, extendi para uma 4ª parte extra. Mas ainda não deixei todos contentes, e mais uma vez vou espichar o artigo para uma 5ª parte e quem sabe dessa vez final (eu tenho vários outros assuntos legais para escrever também).

Dessa vez vamos aprender como usar a biblioteca do sr. Abraham Williams autenticar qualquer usuário que queira permitir o acesso a nossa aplicação.

Daqui em diante, vou considerar que você já viu os dois artigos anteriores que abordaram autenticação na API do Twitter. Caso não tenha lido eles ainda, faça-o agora!

Agora que você já sabe de cor e salteado os outros artigos, vamos ver como autenticar um usuário para nossa aplicação poder acessar os dados
dele.

Ingredientes da receita

Para o usuário permitir o acesso a nossa aplicação, primeiramente, precisamos de alguns dados do app criada na nossa conta do Twitter:

  • Consumer Key;
  • Consumer Secret;
  • URL de retorno da autenticação (você já vai entender o porque).

Também para você já preparar seu ambiente, vamos criar 3 arquivos:

  • index.html (somente uma página simples com um link para autenticar o usuário);
  • config.php (define 3 constantes para evitar ficar digitando o tempo todo);
  • redirect.php (script que vai solicitar a autenticação e liberação);
  • callback.php (script que será chamada se o usuário se autenticar).

Com esses dados em mãos, podemos continuar e fazer nossa aplicação, requisitar a permissão do usuário, lembrando que nenhum desses nomes é obrigatório, eu defini eles da maneira que eu achei mais apropriado e compreensivel (ou não!)

Configurando a aplicação

Bom, o arquivo index.html não é nada mais nada menos que um link para o arquivo redirect.php, portanto, nem vou me dar ao trabalho de explicá-lo.

Vamos começar então pelo config.php. Ele vai ser responsável por guardar as informações estáticas da nossa aplicação:

Há! antes que eu me esqueça, eu utilizei $_SESSION e constantes para guardar as informações de tokens que irão ser retornadas da requisição ao Twitter. Na sua aplicação, você muito provavelmente vai guardar isso em um banco de dados, assim espero!

define('CONSUMER_KEY',    'ELi0Wc1kMAuJyHJQ68AEg');
define('CONSUMER_SECRET', 'Vkf6oqNnckF3Tlf00BVzQkMYmcx8mkkI7MzpXixsjY');
define('OAUTH_CALLBACK',  'http://localhost/twitter/callback.php');

Lembrando que a consumer_key e o consumer_secret vem da sua aplicação cadastrada no Twitter. A URL de callback pode ser qualquer URL, até mesmo uma URL local, pois ela vai ser o retorno da autenticação do Twitter. Com isso, só precisamos usar o require no inicio dos arquivos redirect.php e callback.php para usar as constantes.

Requisitando autorização

Dando continuidade a brincadeira, vamos para o redirect.php. Ele vai ser o responsável por montar uma URL com o token da aplicação, que irá para a página do Twitter. Ele fica da seguinte maneira:

session_start();
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

$request_token = $connection->getRequestToken(OAUTH_CALLBACK);

$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

$url = $connection->getAuthorizeURL($token);
header('Location: ' . $url);

Explicando:

  • Linha 1 – Inicio a sessão, só tem utilidade caso você não utilizar banco de dados;
  • Linhas 2 a 3 – Require da biblioteca e do arquivo de configuração;
  • Linhas 5 e 7 – Cria uma conexão e requisita um token temporário para a URL de callback;
  • Linhas 9 e 10 – Guarda os tokens na sessão;
  • Linha 12 – Gera a URL com o token para ser redirecionado para a autenticação do Twitter;
  • Linha 13 – O redirecionamento!

Neste momento, se você acessar o redirect.php, você já vai ser redirecionado para o Twitter, pedindo sua senha, e depois, perguntando se você permite que a aplicação X se conecte a sua conta. Agora, vamos fazer o callback.php, que vai pegar o token do usuário e liberar o acesso.

Callback

O callback.php, vai pegar o token verificador e recuperar o token de acesso na API do Twitter. Sei que essa história de token pra cá, token pra lá, pode até ficar chata e complicada, mas c’est la vie.

session_start();
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);

$_SESSION['access_token'] = $access_token;

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

$content = $connection->get('account/verify_credentials');

Desmistificando:

  • Linha 1 – Inicio a sessão, só tem utilidade caso você não utilizar banco de dados;
  • Linhas 2 a 3 – Require da biblioteca e do arquivo de configuração;
  • Linhas 5 e 7 – Cria uma conexão com os tokens temporários recuperados no redirect.php e requisita o token de acesso do usuário;
  • Linha 9 – Guarda o token na sessão;
  • Linha 11 – Cria uma nova conexão, agora com o token de acesso, liberando o acesso da aplicação a conta do usuário;
  • Linha 12 – Teste para verificar se a permissão foi liberada com sucesso.

Com isso, você já pode fazer qualquer coisa na conta do usuário, lógico, se ele tiver liberado o acesso da sua aplicação (dãh).

Finalizando

Esse é um exemplo bem simples, e muito diferente do que você virá a usar dentro da sua aplicação, mas conta como um aprendizado. Como disse anteriormente, em um ambiente de produção, o ideal é gravar os tokens todos em banco de dados, podendo assim usar o acesso liberado pelo usuário continuamente, não exigindo sempre a validação no Twitter.

Caso você queira fazer o download dos arquivos para testar, clique aqui.

Alterem, criem e comentem. That’s all folks!



Leia também:

  1. PHP: Integrando o Facebook ao seu site – parte 2 – Atualizando o status do usuário
  2. PHP: Integrando o Twitter ao seu Site – Extra (Mais comandos da API)
  3. PHP: Integrando o Twitter ao seu Site – Parte 3 (Agora com OAuth)
  4. PHP: Integrando o Twitter ao seu Site – Parte 2
  5. PHP: Integrando o Twitter ao seu site – Parte 1

Categoria: Sem categoria
Tags: , , ,

31 respostas a PHP: Integrando o Twitter ao seu Site – Autenticação de Usuários

  1. Muito bom o blog. Estou querendo fazer umas coisas básicas com a API do twitter e está sendo de grande ajuda.
    Apenas uma dúvida, nessa última parte. Eu tento rodar seu código mas ele não consegue fazer a conexão com " $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);" de forma que o código não funciona aqui.
    Tem algum bug ou estou fazendo algo errado?

  2. Caio, para poder ajudar, só com um debug do retorno da tua conexão, mas algumas coisas básicas a serem analisadas seriam: Está incluindo o arquivo config.php? Os tokens estão corretos? Tua configuração de ambiente permite conexão externa?
    Isso é só pra começar. Sugiro um var_dump na variável $connection para avaliar o retorno.

  3. Eu tenho que registrar a url de callback no twitter? Eu registrei só o domínio…
    Pelo var_dump vi que o http_code que está retornando é 401.

  4. Descobri o que era. Por algum motivo o twitter tinha restaurado o setup da minha app para client e não browser.
    Depois que consertei funcionou. Obrigado pela ajuda e mais uma vez parabéns pelo blog.

  5. parabéns, mas não seise vc notou mas não esta enviando o token de acesso da aplicação a url fica assim twitter.com/oauth/authenticate?oauth_token=
    e o resto nada o que será que ta errado ?

  6. descobri o problema era na configuração do meu app que tava modo client e não browser, unica coisa que ta parecendo errado e o callbak.php
    o app retorna na minha pagina com duas variaveis na url o oauth_token e oauth_verefier só que a pagina fica toda em branco

  7. oi cara parabéns mesmo consegui aprender direitinho como é que faz isso
    eu gostaria de saber como faço pra interagir isto com banco de dados
    -
    por exemplo não sei onde é que eu li que é melhor armazenar os tokens no banco de dados para criar app mais avançadas você pode dar um exemplo
    bom é isso valew mesmo em

  8. Imaginando que tu tens um site e tu queres integrar a conta do twitter do teu usuário com o perfil dele. Nesse caso, é útil gravar o token em banco de dados, pois dai tu sempre vai ter acesso a conta dele to twitter, não precisando sempre que ele quiser postar alguma coisa, logar e autorizar novamente a aplicação.

  9. tudo funcionou perfeitamente..
    agoria eu tenho o oauth_token e oauth_verifier q o callback me mandou.
    como eu faco para acessar a conta do usuario com isso??
    consigo ter acesso aos timeline com isso? isso q nao ficou claro pra mim..

  10. No script de callback, onde tem o $content = $connection->get(‘account/verify_credentials’), tu substituirá pelo recurso que tu queres (home_timeline, public_timeline, etc. Com isso, usando o $content, tu terá acesso aos dados que solicitaste.

  11. Oi Henrique.
    Cara, primeiro que seus artigos ajudaram muito mesmo. Eu estava com dificuldade em começar e só sai do zero por causa deles.
    Eu to na mesma situação que o Renato aí, tentei usar o script do outro artigo 
     
    $result = $connection->get (  
    'statuses/user_timeline',  
    array()  
    );  
      
    echo '<ol>';  
    foreach ($result as $node) {  
        printf(
    '<li><a href="%s">%s</a></li>',  
            'http://twitter.com/&#039; . $node->user->screen_name. '/status/' . $node->id,  
            $node->text  
        );  
    }  
    echo '</ol>';
     
    depois da conexão final e não retorna. Essa lógica está certa, né?

  12. Cara, me ignora. Seu código tá perfeito, eu que tava comendo bola.
    Primeiro porque tava dando refresh nocallback, e isso não funciona, tem que pedir de novo o token, e outra que eu tava tentando postar ";D" e o ponto e vírgula tava travando algum coisa acho.
     
    Obrigado pelos artigos, são muito bons mesmo! ;D

  13. Cara, muito bom, estou a dias lendo diversos artigos e neste seu blog foi onde encontrei conteú apresentado de forma clara e didática, além da linguagem divertida que ajuda na absorsão do conteúdo. Muito obrigado pela disposição. Teu blog me tem sido muito útil!

  14. Amigo esta dondo este erro quando logo no twitter

    (Calma aí!

    Esta página não é mais válida. Parece que alguém já usou o token que você forneceu. Por favor, retorne ao site que lhe enviou a esta página e tente novamente… Isso provavelmente foi um erro.)

  15. Leandro, perdi um dia tentando resolver isso.
    Estava dando o mesmo erro para mim.

    No meu caso foi porque eu deixei o campo callback na página de configuração do app em branco.

    Agora está tudo funcionando.

  16. Olá, Henrique Boaventura
    em 1º Lugar Seus posts são muito bons.

    Como posso pegar os dados do usuário ?
    EX: Nome, Tweets ETC ?

  17. Houve uma mudança na API. Toda a aplicação que tem uma URL de callback é considerada uma aplicação browser agora. Então, se tu tens uma URL de callback na tua aplicação, está sendo considerado browser.

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>