Logo Twitter

PHP: Obtendo informações do Twitter utilizando a API 1.1

O Twitter oferece a capacidade de realizar solicitações autenticadas através do próprio aplicativo, ao contrário de solicitar permissão de um usuário específico, como podemos ver em sites realizam cadastro com seu usuário do Twitter.

Isso é possível utilizando o módulo Application-only authentication, disponível na API 1.1, e como não existe um contexto de usuário (ou seja, não é necessário permissão de qualquer perfil), só estará disponível ações como obter timeline de usuários, seguidores, listas, buscas e etc. Ações como enviar tweets, acessar mensagens diretas ou credenciais não são possíveis com este módulo.

O fluxo completo é feito de acordo com o seguinte diagrama:

Fluxo App-only

Primeiramente é preciso criar um aplicativo na Gestão de Aplicações do Twitter, assim iremos obter uma API key e API secret, necessárias para gerarmos o token, que é uma espécie de senha pois ele garante acesso às requisições que iremos realizar.

Com a API key e API secret em mãos, utilizamos o código abaixo para obter nosso bearer token:

$encoded_consumer_key = urlencode(CONSUMER_KEY); // API key
$encoded_consumer_secret = urlencode(CONSUMER_SECRET); // API secret
$bearer_token = $encoded_consumer_key . ':' . $encoded_consumer_secret;
$base64_consumer_key = base64_encode($bearer_token);
$url = "https://api.twitter.com/oauth2/token";
$headers = array(
        "POST /oauth2/token HTTP/1.1",
        "Host: api.twitter.com",
        "User-Agent: Twitter Application-only OAuth App",
        "Authorization: Basic " . $base64_consumer_key,
        "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
        "Content-Length: 29"
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
$header = curl_setopt($ch, CURLOPT_HEADER, 1);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$response = curl_exec ($ch);
curl_close($ch);
$output = explode("\n", $response);
$bearer_token = '';
foreach($output as $line) {
    if ($line !== false) {
        $bearer_token = $line;
    }
}
$bearer_token = json_decode($bearer_token);
$bearer_token = $bearer_token->{'access_token'};

Uma vez que temos nosso token na variável $bearer_token, podemos realizar qualquer solicitação que esteja disponível, como por exemplo um lookup em algum usuário a partir do nome de exibição (screen_name):

$url = "https://api.twitter.com/1.1/users/lookup.json";
$formed_url = '?screen_name=pauloandreget';
$headers = array(
        "GET /1.1/users/lookup.json" . $formed_url . " HTTP/1.1",
        "Host: api.twitter.com",
        "User-Agent: Twitter Application-only OAuth App",
        "Authorization: Bearer " . $bearer_token,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . $formed_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

No exemplo acima fiz a requisição para o meu nome de exibição @pauloandreget, estando disponível na variável $response um JSON com tudo que preciso, restando agora utilizar estas informações da forma que desejarmos.

Para realizar outras solicitações basta consultar a documentação e substituir a URL e seus parâmetros de acordo com a requisição. É importante observar o limite de requisições da API, que pode existir por usuário ou aplicação.

1 Comentário

  1. teteusin18 Responder

    Muito bom, obrigado por ensinar, sou novato kk

Deixe uma resposta