Buscando Tweets com a API do Twitter
Tags: python, api, http, twitter
Published: 2021-09-03 15:21:10

## Criando sua Conta de Desenvolvedor

A API do Twitter é uma ferramenta fornecida pelo próprio Twitter e permite o acesso em tempo real ao que está sendo produzido (tuitado) pelos usuários da rede social. Para acessá-la será necessário, primeiro, que você possua uma conta de desenvolvedor, para obtê-la é preciso que você realize uma solicitação [clique aqui](https://developer.twitter.com/en/apply-for-access) para seguir para página de solicitação.

Depois de conseguir seu acesso ao Portal de Desenvolvedor, você será apresentado a um painel como o abaixo.
![*Dashboard* Do Portal de Desenvolvedor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z4t3zm71k6rnp2fixkha.PNG)

Agora para ser capaz de se conectar a um *endpoint* da API, você precisará criar um projeto e um `App`. Para isso, clique em `Create New Project` e depois preencha as informações necessárias para a criação do projeto e de um `App` dentro do projeto. Após preencher todo o formulário você será apresentado a uma tela com as chaves de autenticação da sua aplicação, essas são necessárias durante a conexão com a API.

![Tela de Chaves do App Criado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lsovupi1fpysoc3wdnzr.PNG)

Agora você tem todo o necessário para se conectar à API!

## Conexão com a API

Para realizar a conexão com a API é possível utilizar diversas tecnologias distintas, mas usaremos **Python** juntamente com algumas de suas bibliotecas.

Primeiramente, sobre as bibliotecas que serão utilizadas, serão três: [Python Requests](https://docs.python-requests.org/en/master/), [json](https://docs.python.org/3/library/json.html#module-json) e [Python Decouple](https://github.com/henriquebastos/python-decouple). A *Python Requests* será responsável por realizar as solicitações **HTTP**, a *json* ajudará a manipular as respostas obtidas para o formato .json e a biblioteca *Python Decouple* será usada para separar a autenticação do que está escrito no código.

Então, primeiramente, importaremos as bibliotecas necessárias.

```python
from decouple import config
import requests
import json
```

Depois disso, é necessário que importemos o valor de autenticação para o código, para isso, criaremos, no mesmo diretório do nosso arquivo, um arquivo com o nome `.env` e dentro dele adicionaremos a seguinte informação.

```text
BEARERTOKEN=ValorDoSeuBearerToken
```

Após a criação do arquivo, já é possível utilizar o valor de autenticação do Bearer Token sem precisar colocar uma informação sigilosa junto ao código. Para isso, adicionaremos a seguinte linha de código no nosso arquivo `.py`.

```python
bearer_token = config('BEARERTOKEN')
```

Dentro da variável `bearer_token` agora estará o valor de seu Bearer Token.

Agora, criaremos uma função que adiciona a autenticação no cabeçalho da solicitação **HTTP** que será realizada.

```python
def set_autenticacao(objeto_para_auth):
    """
    Método que acrescenta, no objeto da busca, um cabeçalho correspondente a autenticação do request.
    """

    objeto_para_auth.headers["Authorization"] = f"Bearer {bearer_token}"
    return objeto_para_auth
```

Após isso, já somos capazes de realizar o processo de solicitação para a API. Então, determinaremos os nossos parâmetros de busca e o endpoint da API que será utilizado.

```python
search_url = "https://api.twitter.com/2/tweets/search/recent"
str_busca = f'to:{perfil} {chave_busca} lang:{lingua}'
query_params = {'query': str_aux,'tweet.fields': 'attachments,author_id,created_at,lang,public_metrics,source','max_results':limite_tweets}
```

No código superior, a variável `search_url` recebe o *endpoint* que será usado (você pode ler um pouco mais sobre os *endpoints* disponíveis [clicando aqui](https://developer.twitter.com/en/docs/api-reference-index)). Ademais, a variável str_busca recebe a string de busca que será aplicada, no caso do exemplo a busca será por tweets enviados para um perfil, contendo uma chave de busca e escritos em uma língua específica, outros filtros de busca podem ser vistos [aqui](https://developer.twitter.com/en/docs/twitter-api/v1/rules-and-filtering/search-operators). Já o `query-params`, recebe a string de busca, os campos que estarão presentes nas respostas (veja mais opções [clicando aqui](https://developer.twitter.com/en/docs/twitter-api/fields)) e o número de tweets retornados na busca.

Depois das definições, podemos realizar o request, para isso, usaremos os comandos abaixo.

```python
"""
Abaixo realizamos o request que usa os parâmetros
search url para defnir o endpoint,
auth para determinar o nosso bearer token como autenticação baseado na função anterior
params que usa a string de parâmetros
"""
response = requests.get(search_url, auth=set_autenticacao, params=query_params)

# Testa se a resposta foi bem sucedida
if response.status_code != 200:
	raise Exception(response.status_code, response.text)

# Converte a resposta para json
r = response.json()

# Imprime a resposta
print(json.dumps(r, indent=4, sort_keys=True))
```

Agora você pode ver seu os tweets obtidos baseados na sua busca!

O programa desenvolvido nesse tutorial está disponível no [meu repositório do gitlab](https://gitlab.com/veronicamars73/twitter-api-search-tutorial).