Olá à todos! Estou tentando fazer uma consulta em uma API no power query e o código, a princípio, funcionou tranquilamente e consegui obter o retorno de alguns registros, porém somente com 100. Ao aplicar uma etapa de paginação no código o retorno da API agora vem sempre com o código 500, gostaria de saber onde o meu código está errando:
let
limite = 50,
pagina = 1,
data_inicio = Date.ToText(Date.AddDays(Date.From(DateTime.LocalNow()), - (90 - 1)), "yyyy-MM-dd", "pt-BR"), //pega a data dos últimos 30 dias
data_fim = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"),
chave_api_cobli = api_key,
url = "https://api.cobli.co/",
ObterCaminhos = (url, headers, payload) =>
let
Origem = Json.Document(Web.Contents(url, [Headers = headers, RelativePath = "public/v1/road-speed-events", Query = payload])),
Dados = Origem[data]
in
Dados,
ObterCaminhosRecursivo = (dadosAcumulados as list, pagina as number) =>
let
payload = [
start_date = data_inicio,
end_date = data_fim,
limit = Text.From(limite),
page = Text.From(pagina),
timezone = "America/Sao_Paulo"
],
headers = [
Accept = "application/json",
#"cobli-api-key" = chave_api_cobli
],
novosDados = ObterCaminhos(url, headers, payload),
dadosCombinados = dadosAcumulados & novosDados,
hasNextPage = not List.IsEmpty(novosDados),
proximosDados = if hasNextPage then @ObterCaminhosRecursivo(dadosCombinados, pagina + 1) else dadosCombinados
in
proximosDados,
ObterDadosComEspera = (dadosAcumulados as list, pagina as number) =>
let
dados = ObterCaminhosRecursivo(dadosAcumulados, pagina),
hasNextPage = not List.IsEmpty(dados),
proximosDados = if hasNextPage then List.Accumulate({1..Number.RoundDown(List.Count(dados) / limite)}, dados, (state, current) => let _ = Function.InvokeAfter(() => null, #duration(0, 0, 0, 1)) in ObterCaminhosRecursivo(state, pagina + limite)) else dados
in
proximosDados,
resultado = ObterDadosComEspera({}, pagina)
in
resultado
Na documentação da API informa que o erro 500 é erro no servidor, mas isso quer dizer que fiz algo errado? Estourei o tempo de solicitações? Ficou muito confuso pra mim a partir desse momento e gostaria de uma ajuda.
Pergunta
FrancoAndre
Olá à todos! Estou tentando fazer uma consulta em uma API no power query e o código, a princípio, funcionou tranquilamente e consegui obter o retorno de alguns registros, porém somente com 100. Ao aplicar uma etapa de paginação no código o retorno da API agora vem sempre com o código 500, gostaria de saber onde o meu código está errando:
let limite = 50, pagina = 1, data_inicio = Date.ToText(Date.AddDays(Date.From(DateTime.LocalNow()), - (90 - 1)), "yyyy-MM-dd", "pt-BR"), //pega a data dos últimos 30 dias data_fim = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), chave_api_cobli = api_key, url = "https://api.cobli.co/", ObterCaminhos = (url, headers, payload) => let Origem = Json.Document(Web.Contents(url, [Headers = headers, RelativePath = "public/v1/road-speed-events", Query = payload])), Dados = Origem[data] in Dados, ObterCaminhosRecursivo = (dadosAcumulados as list, pagina as number) => let payload = [ start_date = data_inicio, end_date = data_fim, limit = Text.From(limite), page = Text.From(pagina), timezone = "America/Sao_Paulo" ], headers = [ Accept = "application/json", #"cobli-api-key" = chave_api_cobli ], novosDados = ObterCaminhos(url, headers, payload), dadosCombinados = dadosAcumulados & novosDados, hasNextPage = not List.IsEmpty(novosDados), proximosDados = if hasNextPage then @ObterCaminhosRecursivo(dadosCombinados, pagina + 1) else dadosCombinados in proximosDados, ObterDadosComEspera = (dadosAcumulados as list, pagina as number) => let dados = ObterCaminhosRecursivo(dadosAcumulados, pagina), hasNextPage = not List.IsEmpty(dados), proximosDados = if hasNextPage then List.Accumulate({1..Number.RoundDown(List.Count(dados) / limite)}, dados, (state, current) => let _ = Function.InvokeAfter(() => null, #duration(0, 0, 0, 1)) in ObterCaminhosRecursivo(state, pagina + limite)) else dados in proximosDados, resultado = ObterDadosComEspera({}, pagina) in resultado
Na documentação da API informa que o erro 500 é erro no servidor, mas isso quer dizer que fiz algo errado? Estourei o tempo de solicitações? Ficou muito confuso pra mim a partir desse momento e gostaria de uma ajuda.
Desde já agradeço a atenção.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Faça login para comentar
Você vai ser capaz de deixar um comentário após fazer o login
Entrar Agora