Aula 8: Universo Marvel com Python

Nas últimas aulas vimos como programar em Python, o que é uma API e como executar os programas através do terminal Linux. Nesta aula vamos coletar dados sobre os personagens da Marvel através de sua API.

API da Marvel

Assim como diversas empresas, a Marvel também possui a sua página para desenvolvedores. Nela você pode se cadastrar, gerar uma senha de acesso para você, ver a documentação ou testar as funcionalidades da ferramenta.

É sempre recomendado ler a documentação para entender como ela funciona e que tipo de resultados ela entrega. Essa dica é importante principalmente quando o código não está funcionando.

O uso da API da Marvel é feito com requisições, onde você passa para o programa uma URL (localizador uniforme de recursos, do inglês Uniform Resource Locator) e recebe uma resposta do site, sendo necessário o acesso da placa à internet. A construção dessa URL iremos apresentar na explicação do programa.

Uma grande vantagem de se utilizar as requisições em Python é que muitas vezes a biblioteca (requests) já vem instalada, como é o caso do Raspbian. Em algumas APIs é necessário instalar os pacotes, utilizando o programa “pip“, que é um sistema de gerenciamento de pacotes. Apresentaremos em outra aula um exemplo de uso desse programa.

Muitas APIs desse tipo para serem utilizadas é necessário gerar senhas de acesso, caso contrário a API simplesmente não funciona. Nesta aula iremos emprestar as nossas chaves, porém é aconselhável que você solicite as suas próprias chaves, caso use a API mais vezes.

Programa

O programa, de uma forma geral, gera a URL e faz a requisição para os servidores da Marvel. Segundo a documentação da API, essa URL é dividida em 5 partes “base + requisição + horário + chave pública + chave criptografada“. No programa, montamos essa URL e recebemos os dados.

O código também é dividido em 5 partes, é interessante você ler o código e os comentários e entender o seu funcionamento. Não precisa entender como cada função funciona internamente, apenas o porquê dela estar ali.

  1. Apenas listamos as bibliotecas a serem utilizadas: hashlib, time e requests.
  2. Definimos as chaves utilizadas na API. Se você possuir as suas pode substituir essa parte do código.
  3. Essa é a parte mais complexa, montamos a chave criptografada, combinando o horário, a chave particular e a chave pública.
  4. Solicitamos ao usuário que escreva o personagem que ele deseja obter a descrição.
  5. Fazemos a requisição aos servidores da Marvel e separamos a descrição do personagem.

Como vimos aula passada, você pode copiar este código em um arquivo “.py” e executá-lo na placa. 

## Bibliotecas a serem importadas
import hashlib  # Realizar a MD5
import time   # Coletar o tempo
import requests # Biblioteca que faz requisicoes, utilizada para acessar a Marvel

## Chaves da API para a aplicação
particular = "34f791afb9c0e48f1780ac3a6b6e91af4fbfe8d6" # Chave particular (private key)
publica = "3bbb0094c15bbcba2bb38fb9b0897c26" # Chave publica (public key)


## Construindo o MD5
m = hashlib.md5()   # Chamando a funcao para criptografar

ts = str(time.time())   # Coleta o tempo atual

# Adiciona todos as parcelas da criptografia na forma de bytes
m.update(bytes(ts, 'utf-8'))  # O tempo atual
m.update(bytes(particular, 'utf-8')) # A chave particular (private key)
m.update(bytes(publica, 'utf-8')) # Adiciona a chave publica (public key)

hasht = m.hexdigest() # Cria o MD5


## Montando URL da requisicao
base = "https://gateway.marvel.com"  # Pagina base para todas as requisicoes

# Pede pro usuario digitar o nome
personagem = input("Digite o nome em ingles do personagem: \n")
# O que se quer da requisicao
requisicao = "/v1/public/characters?name=" + personagem + "&orderBy=name&limit=1"


# Juntando todas as partes da URL
URL = base + requisicao +"&ts=" + ts+ "&apikey=" + publica + "&hash=" + hasht


## Fazendo a requisicao
dados = requests.get(URL).json() # Os dados sao recebidos a partir da requisicao

# Voce pode descomentar a linha abaixo e ver como os dados sao recebidos pela requisicao
#print(dados)

# Verifica se existe uma descrição dentro dos dados recebidos
try:
    descricao = dados["data"]["results"][0]["description"]
except: # Se nao existe
    exit("Voce digitou um personagem invalido") # Avisa o usuario do erro e para o programa

print(descricao) # Apresentamos na tela esse resultado

Veja que caso você digite um personagem errado, é apresentada uma mensagem de erro.

Com isso, temos um exemplo de uso de API, com o programa que acessa os servidores e verifica a descrição do seu personagem favorito. Da Marvel.