Módulo 2: Conexão a dados

Aula 3 de 4

Web, APIs e JSON

Puxando cotações, feriados e dados públicos direto da internet.

16 minutos de leitura


Muita análise fica melhor com dado externo: cotação do dólar, IPCA, feriados nacionais, CEP, indicadores setoriais. O Power Query lê tudo isso com Web.Contents.

Linguagem MCotação do dólar na API do Banco Central
let    Url = https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/"        & "CotacaoDolarPeriodo(dataInicial=@di,dataFinalCotacao=@df)"        & "?@di='01-01-2023'&@df='12-31-2024'&$format=json",    Fonte = Json.Document(Web.Contents(Url)),    Valores = Fonte[value],    Tabela = Table.FromList(Valores, Splitter.SplitByNothing(), null, null, ExtraValues.Error),    Expandido = Table.ExpandRecordColumn(        Tabela, "Column1",        {"cotacaoCompra", "cotacaoVenda", "dataHoraCotacao"},        {"Compra", "Venda", "DataHora"}    ),    Tipos = Table.TransformColumnTypes(        Expandido,        {{"Compra", type number}, {"Venda", type number}, {"DataHora", type datetime}}    ),    DataPura = Table.AddColumn(Tipos, "Data", each Date.From([DataHora]), type date)in    DataPura
Linguagem MForma compatível com atualização agendada
let    Resposta = Json.Document(        Web.Contents(            https://api.exemplo.com",            [                RelativePath = "v1/pedidos",                Query = [ desde = "2024-01-01", limite = "500" ],                Headers = [ #"Authorization" = "Bearer " & ChaveApi ]            ]        )    )in    Resposta

Paginação

APIs sérias devolvem os dados em páginas. A técnica padrão é criar uma função que recebe o número da página e usar List.Generate ou List.Transform para percorrer todas.

Linguagem MPercorrendo 20 páginas de uma API
let    fnPagina = (pagina as number) as table =>        let            Resposta = Json.Document(                Web.Contents(https://api.exemplo.com",                    [ RelativePath = "v1/pedidos", Query = [ page = Text.From(pagina) ] ])            ),            Dados = Table.FromRecords(Resposta[data])        in            Dados,    Paginas = List.Transform({1..20}, each fnPagina(_)),    Tudo = Table.Combine(Paginas)in    Tudo

Exercício prático

Conecte-se a uma API pública (BrasilAPI de feriados é ótima para começar), expanda o JSON em tabela, trate os tipos e traga os feriados de 3 anos. Você vai reusar isso no Módulo 6.