Alura > Cursos de Data Science > Cursos de Engenharia de Dados > Conteúdos de Engenharia de Dados > Primeiras aulas do curso Python e APIs: conhecendo a biblioteca Requests

Python e APIs: conhecendo a biblioteca Requests

Conhecendo a Requests - Apresentação

Olá! Me chamo Millena Gená e serei a sua instrutora ao longo deste curso.

Millena Genar é uma mulher de pele clara, cabelos longos, escuros e cacheados. Atualmente, seu cabelo está preso em uma trança lateral. Ela possui olhos castanhos e está usando batom vermelho. Sua blusa é preta e exibe o símbolo verde da Escola de Dados no centro. Ao fundo, há um guarda-roupa na cor preta, iluminado por LEDs nas cores verde e azul. À sua esquerda, há alguns livros da saga Harry Potter, uma pelúcia de um polvo roxo e três figuras Funko de diferentes personagens. Também é possível ver o símbolo da Escola de Dados novamente ao fundo.

Acompanharei você nessa trajetória de aprendizado, onde exploraremos o uso da biblioteca Requests do Python para consumir dados de APIs.

O que vamos aprender?

Neste curso, iremos desempenhar o papel de pessoas engenheiras de dados em uma startup. Nosso objetivo é desenvolver um pipeline ETL utilizando a biblioteca Requests do Python e a API do GitHub.

Durante o desenvolvimento deste projeto, vamos adquirir conhecimentos em várias áreas. Aprenderemos a fazer requisições GET, POST, PUT e DELETE utilizando a biblioteca Request do Python.

Também aprenderemos a extrair e transformar dados no formato JSON, explorar diferentes endpoints da API do GitHub e compreender os diferentes status codes. Além disso, vamos abordar a autenticação e paginação utilizando a API do GitHub, estruturar um pipeline utilizando orientação a objetos, e muito mais.

Ao final do curso, você será capaz…

Ao concluir este curso, você estará apto a utilizar a biblioteca Request para extrair dados de diversas APIs e construir seu próprio pipeline ETL. Terá conhecimentos sólidos sobre o uso da biblioteca Request, habilidades para lidar com diferentes APIs e a capacidade de criar pipelines eficientes para processar e transformar dados.

Pré-requisitos

Para aproveitar ao máximo este conteúdo, é importante ter conhecimentos prévios, como familiaridade com a linguagem Python e suas principais estruturas de dados, como listas e dicionários. Além disso, é útil ter uma compreensão básica de conceitos de orientação a objetos, como classes, métodos e atributos.

Esses conhecimentos serão fundamentais para acompanhar e aplicar os conceitos abordados no curso de forma eficiente.

Se você se interessou pelo tema, estou pronta para te ajudar a aprender a trabalhar com APIs utilizando a biblioteca Request do Python. Juntos, vamos explorar os fundamentos e práticas necessárias para realizar requisições, extrair dados e utilizar as funcionalidades oferecidas pelas APIs.

Vamos lá!

Conhecendo a Requests - Primeira requisição

Para iniciar, vamos compreender o projeto em que iremos atuar.

Somos contratados como pessoas engenheiras de dados em uma startup. Como nosso primeiro trabalho, nós precisamos desenvolver um projeto onde obtemos dados das linguagens de programação utilizadas por algumas grandes empresas, como Amazon, Spotify, Netflix e Apple.

Entendendo o projeto

Fomos contratados como engenheiros de dados por uma startup. Nosso primeiro trabalho consiste em desenvolver um projeto que envolve a obtenção de dados sobre as linguagens de programação utilizadas por grandes empresas, como Amazon, Spotify, Netflix e Apple.

Para realizar esse projeto, é necessário criarmos um pipeline ETL, que consiste nas etapas de extração, transformação e carga (em inglês, Extract, Transform e Load). Em outras palavras, iremos desenvolver um projeto no qual vamos extrair, transformar e armazenar dados específicos relacionados ao nosso objetivo.

Para implementar esse ETL, faremos uso da biblioteca Requests do Python e também da API do GitHub. Através da API, teremos acesso aos dados sobre as linguagens de programação utilizadas pelas empresas mencionadas em seus projetos.

Vamos iniciar o desenvolvimento do nosso projeto explorando a biblioteca Requests e familiarizando-nos com a API do GitHub. Meu ambiente já está configurado e utilizaremos o WSL2, que é um sistema Linux no Windows, neste curso.

O VSCode será nossa ferramenta principal para escrever o código do projeto. Além disso, vamos criar um ambiente virtual onde instalaremos todos os pacotes Python necessários ao longo do projeto.

Já configurei todo o meu ambiente de acordo com a atividade de preparação de ambiente descrita anteriormente, garantindo que tudo esteja funcionando corretamente. Recomendo que você também siga essas etapas antes de prosseguir com o vídeo, para evitar possíveis erros e garantir um ambiente adequado para o desenvolvimento.

Agora, vamos começar a explorar a biblioteca Requests.

Explorando a biblioteca Requests

A biblioteca Requests do Python oferece uma ampla gama de recursos que simplificam a comunicação com a internet. Com o uso dessa biblioteca, é possível enviar informações para a web e receber informações de forma mais prática. Isso nos permite interagir com APIs, sites e bancos de dados sem a necessidade de um profundo conhecimento sobre o funcionamento da rede subjacente.

A biblioteca Requests facilita o envio e recebimento de informações pela internet.

No nosso projeto, faremos uso dessa biblioteca para estabelecer a comunicação com a API do GitHub.

Vamos iniciar acessando nosso ambiente e abrindo a pasta onde realizaremos nosso trabalho. No meu caso, já tenho o terminal do WSL aberto e digitarei cd projeto_requests/ para navegar até a pasta onde desenvolveremos nosso projeto. Em seguida, pressionarei "Enter". Agora, digitarei code . para abrir o VS Code já nessa pasta do projeto.

cd projeto_requests/

Comando para abrir o VSCode:

code .

Aguardemos um momento enquanto o VS Code é aberto.

Nesta pasta do lado esquerdo do VSCode, já possuo o ambiente virtual criado, assim como você também deve ter feito, seguindo as atividades de "Preparando o Ambiente" mencionadas anteriormente. Além disso, já possuo um notebook chamado linguagens_repos.ipynb. Este notebook está atualmente vazio, apenas dividido de acordo com as seções do nosso projeto. Caso queira baixar o notebook, também disponibilizarei para você.

Para começarmos a explorar a biblioteca Requests, vamos acessar a documentação oficial. No momento, fecharei o VSCode. Para que você possa acessar a mesma página que eu, basta digitar requests quick start no seu navegador. Assim, você encontrará a documentação relevante para prosseguirmos.

Quickstart

Na página da documentação da biblioteca Requests, você encontrará uma forma rápida de começar a trabalhar com ela. Para fazer uma requisição (make a request) o primeiro passo mencionado é importar a biblioteca usando o código import requests. Em seguida, há um trecho de código que explora mais detalhadamente os recursos da biblioteca.

Trecho de código da documentação:

r = requests.get('https://api.github.com/events')

Copiamos o trecho de código acima retirado da documentação, vamos ao notebook no VSCode e colamos esse código na segunda célula pressionando "Ctrl + V".

Na primeira célula, faremos a importação da biblioteca utilizando import requests. Ao executar a primeira célula e também a segunda, estaremos preparando o ambiente para utilizar os recursos da biblioteca.

import requests

Na terceira célula, atribuiremos o nome r à nossa variável para podermos visualizar o resultado que ela retorna.

r

Ao pressionarmos "Shift + Enter", o resultado exibido é "response" entre colchetes com o número 200.

< Response [200] >

Mas o que isso significa?

Para uma análise mais detalhada, vamos examinar cada parte do trecho de código:

r = requests.get('https://api.github.com/events')

Temos a variável r que é igual a requests, que é o nome da biblioteca que importamos anteriormente. Em seguida, utilizamos o método .get para realizar uma requisição HTTP do tipo GET. Entre parênteses e aspas simples, passamos a URL da API do GitHub, especificamente "'https://api.github.com/events'".

Esse trecho de código é responsável por realizar uma requisição. Mas, afinal, o que é uma requisição?

Uma requisição é uma solicitação feita a um servidor da internet. Para que uma requisição ocorra, é necessário que haja um cliente que faça a solicitação a um servidor específico. O servidor, por sua vez, responderá a essa requisição fornecendo as informações solicitadas.

No caso do nosso código, assumimos o papel de cliente e estamos realizando uma requisição ao servidor, que no nosso caso é a API do GitHub. Através da URL fornecida na requisição, esperamos receber as informações solicitadas. Existem vários tipos de requisições disponíveis. No momento, estamos utilizando o método .get, que é usado quando desejamos solicitar dados específicos ao servidor.

No código em questão, estamos utilizando uma requisição .get, mas qual é exatamente a informação que estamos solicitando ao servidor da API do GitHub? Para verificar essa informação, podemos acessar o link diretamente em um navegador. Para fazer isso, pressionamos "Ctrl" e clicaremos no link (https://api.github.com/events), o que abrirá o navegador com a página correspondente à URL requisitada.

É justamente o link que estamos passando ao fazer a requisição. Analisando o link, percebemos que tem api.github.com/events. Esses events que estamos passando na URL no momento da requisição estão especificando a informação que queremos extrair dessa API do GitHub, ou seja, os eventos que estão acontecendo no GitHub, as ações. E é isso que ele vai retornar no formato JSON, que é esse formato que podemos conferir nesta página.

Esse formato consiste em uma lista composta por diversos dicionários, em que cada dicionário contém informações sobre um evento específico que ocorre no GitHub. Cada dicionário inclui o ID do evento, o tipo de evento ou ação, o ator envolvido e várias outras informações relevantes.

Já sabemos qual informação que estamos solicitando por meio daquela requisição GET. Agora, vamos retornar ao nosso código e verificar o conteúdo retornado por essa URL.

No entanto, ao inspecionarmos o conteúdo da variável r, que armazena o resultado da requisição, encontramos apenas a mensagem "< response [200] >". O que será que isso significa e como podemos fazer para acessar especificamente o conteúdo da página que solicitamos?

Conhecendo a Requests - Explorando a biblioteca

Após realizar nossa primeira requisição GET, ao analisar o conteúdo da variável onde armazenamos a resposta, deparamo-nos com o valor < Response [200] >. O valor "response" indica o tipo do objeto retornado em nossa solicitação, ou seja, é o tipo da nossa variável.

Toda vez que realizamos uma requisição, obtemos várias informações em resposta, incluindo um código de status (status code).

O status code tem a finalidade de indicar se a requisição foi aceita e concluída com sucesso, ou, por outro lado, se ocorreu algum erro e a requisição foi rejeitada.

No nosso caso, um código de status na faixa dos 200 indica que a requisição foi aceita e que obtivemos acesso aos dados solicitados. Existem outros códigos de status que representam diferentes situações, e incluirei uma atividade nesta aula para apresentar esses outros códigos de status também.

O objeto do tipo response representado pela variável r em nosso caso, contém várias informações sobre a requisição que realizamos. Agora vamos aprender como acessar essas informações.

Acessando as informações

Para começar, vamos supor que desejamos acessar somente o status code da requisição, sem exibi-lo na forma atual. Podemos fazer isso simplesmente referenciando o nome da nossa variável, r.status_code, na célula seguinte.

r.status_code

Teclamos "Shift + Enter" para rodar a célula. Ao executarmos essa referência, obteremos o status code da requisição que foi realizada e armazenada na variável r:

Como retorno, obtemos:

200

Além disso, podemos acessar outras informações, como a URL que foi utilizada para realizar a requisição. Para isso, podemos utilizar r.url. A URL retornará os eventos que estavam ocorrendo no GitHub.

r.url

Como retorno, obtemos:

'https://api.github.com/events'

No momento, o que é fundamental é entendermos como acessar o conteúdo da URL, isto é, o conteúdo que requisitamos.

Existem duas opções para fazer isso:

  1. Usando o r.text
r.text

Como retorno, obtemos:

O retorno abaixo foi parcialmente transcrito. Para conferi-lo na íntegra, execute o código na sua máquina.

'[{"id":"28660725505", "type": "PushEvent","actor":{"id":54496419,"login": "supershel120…

Esse comando traz todo o conteúdo que vimos anteriormente no navegador em uma string, por isso temos aspas simples envolvendo o conteúdo.

  1. Usando o r.json(), que traz o conteúdo no formato de JSON.
r.json()

Ao executar a célula, será possível visualizar os dados solicitados no momento da requisição:

Output exceeds the size limit. Open the full output data in a text editor

[ {
 "id": "28660725505",
   "type": "PushEvent",
  "actor": {
     "id": 54496419,
     "login": "supershel12019",
     "display_login": "supershel12019",
     "gravatar_id": "",
     "url": "https://api.github.com/users/supershell2019",
     "avatar_url": "https://avatars.githubusercontent.com/u/54496419?"
   },
   "repo": {
     "id": 489658584,
     "name": "supershel12019/images",
     "url": "https://api.github.com/repos/supershell2019/images"
   },
   "payload": {
     "repository": {
       "id": 489658584

…

É importante mencionar que pode haver um aviso indicando que o JSON é extenso e não será exibido completamente no log do VSCode. No entanto, se desejarmos acessar todos os dados, basta clicarmos em "in a text editor", o que abrirá uma nova aba com o JSON completo e todas as informações extraídas.

Com o auxílio dessa abordagem, temos a capacidade de manipular os dados de acordo com as necessidades específicas. Com isso, conseguimos extrair informações dos eventos do GitHub e incorporar esses dados em nosso projeto no notebook.

Mas como podemos acessar outros tipos de informação do GitHub ainda utilizando essa API? Para isso, precisamos alterar os chamados endpoints.

Endpoints

Os endpoints são partes da URL que precisamos modificar para acessar informações específicas de uma API. Para ilustrar melhor, vamos revisitar o código inicial da nossa requisição GET usando o requests.get, onde passamos a URL para obter informações sobre os eventos.

r = requests.get('https://api.github.com/events')

A URL base (api.github.com) é o ponto de partida que sempre utilizaremos para extrair informações da API do GitHub. No nosso caso, estamos utilizando o endpoint "events" para obter informações sobre os eventos que ocorrem no GitHub e as ações associadas a eles. Dessa forma, podemos acessar os dados relacionados aos eventos específicos da plataforma.

Se desejarmos obter informações diferentes, precisamos alterar apenas a parte do código que define o endpoint. Vamos copiar esse código e colar na célula abaixo, na seção "Utilizando outro endpoint" do VSCode.

Para obter informações sobre as versões disponíveis da API do GitHub, vamos alterar o endpoint de "events" para "versions". É importante destacar que para saber qual endpoint utilizar para obter a informação desejada, podemos explorar a documentação oficial da API do GitHub, onde encontraremos todas as informações necessárias. Vamos realizar essa alteração no código e verificar as versões disponíveis da API.

r = requests.get('https://api.github.com/versions')

Vamos adicionar abaixo na mesma célula um r.status_code, para ver se essa requisição vai dar certo.

r = requests.get('https://api.github.com/versions')
r.status_code

Executamos e obtemos o status 200 como retono.

Vamos digitar r.json() na célula abaixo para visualizarmos o conteúdo da resposta em formato JSON.

r.json()

Como retorno, temos:

['2022-11-28']

O comando retornou o resultado desejado, que é o conteúdo da requisição feita, apresentando uma lista que contém a data de lançamento da última versão do GitHub. Essa é a versão atual disponível no momento em que este vídeo está sendo gravado, e será a versão utilizada ao longo do curso para o desenvolvimento de nosso projeto.

É importante destacar que, ao longo do curso, pode ser que novas versões da API sejam lançadas, resultando em uma lista com datas atualizadas das versões disponíveis. É bastante comum que APIs passem por atualizações e mudanças ao longo do tempo.

No entanto, é altamente recomendável que você utilize exatamente a mesma versão da API que estou utilizando durante o desenvolvimento do projeto. Isso garantirá que você não encontre erros inesperados e não precise fazer modificações no seu código. Manter a consistência da versão da API é uma prática recomendada para evitar problemas de compatibilidade.

E, por isso, irei fornecer uma atividade após este vídeo na qual ensino justamente como especificar a versão desejada da API ao fazer a requisição.

No entanto, caso, durante o curso, essa versão da API que utilizei não esteja mais disponível por algum motivo, é crucial que você consulte a documentação da API do GitHub para verificar as alterações entre as versões, a fim de adaptar seu código a essas mudanças e evitar erros graves que possam comprometer seu projeto.

Conclusão

Aprendemos a manipular os endpoints e compreendemos o funcionamento das versões de uma API, focando especialmente na API do GitHub. Agora, vamos pressionar "Ctrl + S" para salvar nosso notebook até este ponto.

Pronto! Agora que dominamos a manipulação do objeto response, o trabalho com endpoints, e estamos familiarizados com a biblioteca Requests e a API do GitHub, podemos prosseguir com nosso projeto e iniciar o processo de ETL.

Sobre o curso Python e APIs: conhecendo a biblioteca Requests

O curso Python e APIs: conhecendo a biblioteca Requests possui 114 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Engenharia de Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas