Blog

Postado em em 6 de agosto de 2022

Ler Qualquer API com VBA – Lendo Informações de API

Quer aprender como ler qualquer API com VBA? Hoje eu vou te mostrar o passo a passo para fazer isso de forma eficiente!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, Impressionadores! Na aula de hoje eu vou te mostrar como ler informações de API com VBA!

Uma API nada mais é do que um programa/sistema em que você pode fazer requisições de informações com base em um parâmetro.

No nosso exemplo vamos ter uma API que traz as informações calorias de alimentos, então você vai passar para a API o nome do alimento e ela vai retornar essas informações calóricas.

Acontece que essas APIs geralmente fornecem os resultados no formato json, então podemos entrar no git hub para baixar o Json converter (conversor de json).

Isso vai facilitar muito a sua vida, pois ele vai transformar esse resultado em uma forma que você consiga entender e já fica pronto para usar!

Além disso vamos precisar da biblioteca Microsoft Scriping Runtime e da biblioteca WinHTTP Services no seu VBA para consultar API!

E aí, vamos aprender como fazer a requisição para API? Vem comigo que eu te ensino!

Ativando referências no VBA

Precisaremos utilizar uma biblioteca específica do Excel/VBA para nos auxiliar na aula de hoje. Portanto, precisaremos ativá-la para fazer esses procedimentos a seguir.

Precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.

Logo após você terá, com o VBA aberto, que:

  • Ir na guia Ferramentas
  • Referências…
  • Marcar a caixinha correspondente ao “Microsoft WinHTTP Services” (como na foto abaixo) e referente também ao “Microsoft Scripting Runtime”
  • OK

Inserindo um Módulo no VBA

Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.

Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.

Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.

Por padrão ele terá o nome de “Módulo 1”. Vamos mudar sua propriedade Name para “modModeloLerAPI”.

Colocaremos a seguinte sub dentro dele:

Sub testeLerAPI()

'https://rapidapi.com/calorieninjas/api/calorieninjas/

Dim requisicao As New WinHttpRequest
Dim resposta As Object
Dim url As String, parametros As String

 Range("B2:B7").ClearContents

' Definir a URL e os parâmetros
url = "https://calorieninjas.p.rapidapi.com/v1/nutrition"
parametros = "?query=" & Cells(1, 2).Value

' Enviar a requisição
requisicao.Open "Get", url & parametros
requisicao.SetRequestHeader "X-RapidAPI-Key", "5da6f65d38mshe9c3f30892c766ap1f913bjsnfc5107da89eb"
requisicao.SetRequestHeader "X-RapidAPI-Host", "calorieninjas.p.rapidapi.com"
requisicao.Send

' Tratamento de erros
If requisicao.Status <> 200 Then
    MsgBox "Erro: " & requisicao.ResponseText
    Exit Sub
End If

' Converter o JSON
Set resposta = JsonConverter.ParseJson(requisicao.ResponseText)

' Tratar as informações
Dim itens As Collection
Set itens = resposta("items")

Dim alimento As Dictionary
Set alimento = itens(1)

Cells(2, 2).Value = alimento("serving_size_g")

Cells(4, 2).Value = alimento("calories")
Cells(5, 2).Value = alimento("carbohydrates_total_g")
Cells(6, 2).Value = alimento("protein_g")
Cells(7, 2).Value = alimento("fat_total_g")

End Sub

Comentários a respeito do código acima:

  • Dimensionar:
    • a variável “requisicao” como sendo do tipo um novo objeto do tipo WinHttpRequest, que é um objeto da biblioteca que ativamos, a “Microsoft WinHTTP Services”
    • a variável “resposta” como um objeto
    • as variáveis “url” e “parâmetros” do tipo texto
    • Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
  • Limpar o conteúdo do intervalo de células de B2 a B7
  • Armazenar na variável “url” o texto que corresponde ao site exatamente que vamos acessar para pegar as informações, que é https://calorieninjas.p.rapidapi.com/v1/nutrition
  • Armazenar na variável “parametros” o texto “?query=” & Cells(1, 2).Value, que vai compreender o parâmetro informado específico que vamos tentar pegar as informações. Esse parâmetro vai ser o que vamos pesquisar diretamente na “url” especificada
  • Abrir o objeto que é representado pela variável “requisicao” passando os argumentos “url” e “parametros”, dos quais ela vai pegar informações (get)
  • Passar para o cabeçalho da “requisicao” os parâmetros “padrão” informados pela API, como mostramos no vídeo (em duas linhas diferentes)
  • Dar o comando de “enviar” requisição, que é de fato quando o VBA envia a requisição para o site
  • Com um simples tratamento de erro, vamos verificar através de uma estrutura If se a propriedade “Status” da variável “requisicao” é diferente de 200 (porque essa resposta é a esperada quando uma resposta válida é retornada pela API). Caso o “Status” seja diferente de 200:
  • Configurar a variável “resposta” para receber o objeto da biblioteca JSON, que vai ser responsável por retornar a resposta, em texto, da “requisicao”
  • Dimensionar a variável “itens” como uma variável do tipo “Collection”, da biblioteca JSON
  • Configurar a variável “itens” para receber o conjunto de unidades representadas pelo grupo “items”, como mostrado em vídeo
  • Dimensionar a variável “alimento” como uma variável do tipo “Dictionary”, da biblioteca JSON
  • Configurar o elemento “alimento” como o termo “itens” de número 1, no caso o primeiro e único
  • Armazenar:
    • Na célula de linha 2 e coluna 2 o valor resultante da consulta da variável alimento, buscando o item “serving_size_g”
    • Na célula de linha 4 e coluna 2 o valor resultante da consulta da variável alimento, buscando o item “calories”
    • Na célula de linha 5 e coluna 2 o valor resultante da consulta da variável alimento, buscando o item “carbohydrates_total_g”
    • Na célula de linha 6 e coluna 2 o valor resultante da consulta da variável alimento, buscando o item “protein_g”
    • Na célula de linha 7 e coluna 2 o valor resultante da consulta da variável alimento, buscando o item “fat_total_g”
  • Se encerra o código

Veja o funcionamento do código para os exemplos de “Banana”, e “Tomato” (tomate, em inglês):

Ler Qualquer API com VBA
Ler Qualquer API com VBA

Conclusão – Ler Qualquer API com VBA

Nessa aula você lidou com os seguintes conceitos:

Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA! Um abraço!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer aprender a construir um Dashboard em Excel do zero? Se inscreva gratuitamente na Jornada do Excel!