O Power BI consegue ler a resposta JSON da brapi pelo Power Query. A forma mais
segura é criar um parâmetro para o token e usar Web.Contents com URL base,
caminho relativo e parâmetros separados.
O exemplo abaixo consulta PETR4, VALE3 e ITUB4:
let
Source = Json.Document(
Web.Contents(
"https://brapi.dev",
[
RelativePath = "api/v2/stocks/quote",
Query = [symbols = "PETR4,VALE3,ITUB4"],
Headers = [Authorization = "Bearer " & BrapiToken]
]
)
),
Results = Source[results],
AsTable = Table.FromList(
Results,
Splitter.SplitByNothing(),
{"row"},
null,
ExtraValues.Error
),
ExpandResult = Table.ExpandRecordColumn(
AsTable,
"row",
{"symbol", "data"},
{"symbol", "data"}
),
ExpandQuote = Table.ExpandRecordColumn(
ExpandResult,
"data",
{
"shortName",
"currency",
"regularMarketPrice",
"regularMarketChange",
"regularMarketChangePercent",
"regularMarketVolume",
"regularMarketTime"
}
)
in
ExpandQuoteCriar o parâmetro do token
No Power BI Desktop:
- abra Transformar dados;
- escolha Gerenciar parâmetros;
- crie
BrapiTokencom tipo Texto; - cole o token gerado no dashboard da brapi.
Não coloque o token diretamente no código M que será enviado para um repositório ou compartilhado com outras pessoas.
Credenciais no arquivo PBIX
Um parâmetro melhora a manutenção, mas não transforma o token em segredo absoluto dentro de um arquivo compartilhado. Controle quem recebe o PBIX e configure a credencial novamente no Power BI Service.
Como a resposta vira tabela
A API retorna um envelope com results, requestedAt e took. Cada item de
results guarda o ticker em symbol e a cotação em data.
O código M executa três transformações:
- converte
resultsem linhas; - expande
symboledata; - expande os campos de cotação usados no relatório.
Você pode selecionar outros campos disponíveis na documentação de cotação. Evite expandir tudo por padrão, pois colunas sem uso deixam o modelo maior e mais frágil.
Usar uma tabela de tickers
Para um painel editável, crie uma tabela chamada Ativos com uma coluna
symbol. Depois transforme essa coluna em texto separado por vírgulas.
Symbols = Text.Combine(List.Distinct(Ativos[symbol]), ",")Substitua o valor fixo da consulta:
Query = [symbols = Symbols]A API aceita até 20 símbolos por requisição. Se a tabela passar desse limite, divida a lista em lotes e combine as respostas.
Importar histórico para gráficos
Use um segundo query para a série de preços:
Historical = Json.Document(
Web.Contents(
"https://brapi.dev",
[
RelativePath = "api/v2/stocks/historical",
Query = [
symbols = "PETR4,VALE3",
range = "1y",
interval = "1d",
sortOrder = "asc"
],
Headers = [Authorization = "Bearer " & BrapiToken]
]
)
)Expanda results, depois data e historicalDataPrice. Defina a data como
Data/Hora e preços como Número decimal antes de criar os relacionamentos.
O passo a passo em Python e a diferença entre close e adjustedClose estão
em dados históricos da B3.
Atualização no Power BI Service
Depois de publicar o relatório, abra as configurações do conjunto de dados.
Cadastre a credencial para https://brapi.dev e escolha uma frequência que
respeite seu plano e a necessidade do painel.
Usar RelativePath e Query ajuda o Power BI Service a reconhecer uma fonte
estável. URLs montadas por concatenação podem ser classificadas como fonte
dinâmica e impedir a atualização agendada.
A quantidade diária de atualizações também depende da licença do Power BI. Isso é separado do limite de requisições da brapi.
Modelo mínimo do dashboard
Um painel simples pode ter:
- cartão com
regularMarketPrice; - variação diária com
regularMarketChangePercent; - volume do pregão;
- linha histórica de
adjustedClose; - tabela de ativos com horário da última cotação.
Mostre regularMarketTime no relatório. Assim o leitor sabe quando o dado foi
atualizado e não confunde a última cotação disponível com streaming de bolsa.
Para importar os mesmos dados no Excel, use o tutorial de cotações da B3 com Power Query.
