Alunos FrancoAndre Postado Janeiro 5 Alunos Compartilhar Postado Janeiro 5 Galera tenho esse código que faz uma consulta numa api e retorna o data (lista com os dados) e pagination (records com número página e próxima página): let Source = Web.Contents( url, [ RelativePath = "road-speed-events", Headers = [ Accept = "application/json", #"Content-Type" = "application/json", #"cobli-api-key" = api_key ], Query = [ limit = Number.ToText(100), page = Number.ToText(1), start_date = Date.ToText(Date.AddDays(Date.From(DateTime.LocalNow()), - (365 - 1)), "yyyy-MM-dd", "pt-BR"), end_date = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), timezone = "America/Sao_Paulo" ] ] ), json = Json.Document(Source) in json Preciso de um código que faça um looping de paginação e combine os dados de todas as páginas e no final ter a tabela completa. O número de páginas ta respeitando da API e na documentação é informado uma limitação de 50 requests por segundo. Alguém poderia ajudar? Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Solução Erick Oliveira Postado Janeiro 6 Alunos Solução Compartilhar Postado Janeiro 6 @FrancoAndre Faça esse ajuste no final da função: (page as number) as table => let Source = Web.Contents( url, [ RelativePath = "road-speed-events", Headers = [ Accept = "application/json", #"Content-Type" = "application/json", #"cobli-api-key" = api_key ], Query = [ limit = Number.ToText(100), page = Number.ToText(page), start_date = Date.ToText( Date.AddDays(Date.From(DateTime.LocalNow()), - (365 - 1)), "yyyy-MM-dd", "pt-BR" ), end_date = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), timezone = "America/Sao_Paulo" ] ] ), json = Json.Document(Source) in json[data] Link para o comentário Compartilhar em outros sites More sharing options...
1 Alunos Erick Oliveira Postado Janeiro 5 Alunos Compartilhar Postado Janeiro 5 Fala @FrancoAndre, Tenho algo semelhante que talvez se aplique a você, mas vale umas alterações: Primeiro transforme o seu código em uma função e chame-a de fxBuscarDados: (page as number) as table => let Source = Web.Contents( url, [ RelativePath = "road-speed-events", Headers = [ Accept = "application/json", #"Content-Type" = "application/json", #"cobli-api-key" = api_key ], Query = [ limit = Number.ToText(100), page = Number.ToText(page), start_date = Date.ToText( Date.AddDays(Date.From(DateTime.LocalNow()), - (365 - 1)), "yyyy-MM-dd", "pt-BR" ), end_date = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), timezone = "America/Sao_Paulo" ] ] ), json = Json.Document(Source) in Source Depois utilize o código abaixo para acumular as tabelas: let NumberPages = 100000, // Selecione um número de páginas limites para mapear FetchAllPages = List.Accumulate( List.Numbers(1, NumberPages), {}, (state, current) => let // Buscar dados da página atual currentPageData = fxBuscarDados(current), // Verificar se a página atual retornou algum dado hasData = Table.RowCount(currentPageData) > 0, // Se a página atual não tiver dados, retorna o estado acumulado Condition = if hasData then List.Combine({state, currentPageData}) else state in condition ), // Chamar a função para todas as páginas e converter para tabela AllData = Table.FromList(FetchAllPages, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in AllData Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos FrancoAndre Postado Janeiro 5 Autor Alunos Compartilhar Postado Janeiro 5 17 minutos atrás, Erick Oliveira disse: Fala @FrancoAndre, Tenho algo semelhante que talvez se aplique a você, mas vale umas alterações: Primeiro transforme o seu código em uma função e chame-a de fxBuscarDados: (page as number) as table => let Source = Web.Contents( url, [ RelativePath = "road-speed-events", Headers = [ Accept = "application/json", #"Content-Type" = "application/json", #"cobli-api-key" = api_key ], Query = [ limit = Number.ToText(100), page = Number.ToText(page), start_date = Date.ToText( Date.AddDays(Date.From(DateTime.LocalNow()), - (365 - 1)), "yyyy-MM-dd", "pt-BR" ), end_date = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), timezone = "America/Sao_Paulo" ] ] ), json = Json.Document(Source) in Source Depois utilize o código abaixo para acumular as tabelas: let NumberPages = 100000, // Selecione um número de páginas limites para mapear FetchAllPages = List.Accumulate( List.Numbers(1, NumberPages), {}, (state, current) => let // Buscar dados da página atual currentPageData = fxBuscarDados(current), // Verificar se a página atual retornou algum dado hasData = Table.RowCount(currentPageData) > 0, // Se a página atual não tiver dados, retorna o estado acumulado Condition = if hasData then List.Combine({state, currentPageData}) else state in condition ), // Chamar a função para todas as páginas e converter para tabela AllData = Table.FromList(FetchAllPages, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in AllData Opa, Erick! Retornou 500 Internal Server Error 😞 Será que limitação de request foi estourada? Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos Erick Oliveira Postado Janeiro 5 Alunos Compartilhar Postado Janeiro 5 @FrancoAndre Altera a variável NumberPages para um número pequeno, tipo 10, e faz o teste. Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos FrancoAndre Postado Janeiro 6 Autor Alunos Compartilhar Postado Janeiro 6 22 horas atrás, Erick Oliveira disse: @FrancoAndre Altera a variável NumberPages para um número pequeno, tipo 10, e faz o teste. Fiz a alteração mas apresentou outro erro na etapa FetchAllPages: Tentei ajuda com o chatgpt e ele sugeriu converter currentPageData em uma lista antes de combiná-la com o state ficando List.Combine({state, Table.ToRows(currentPageData)}), porém apresentou o mesmo problema: Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos FrancoAndre Postado Janeiro 8 Autor Alunos Compartilhar Postado Janeiro 8 Em 06/01/2024 em 16:20, Erick Oliveira disse: @FrancoAndre Faça esse ajuste no final da função: (page as number) as table => let Source = Web.Contents( url, [ RelativePath = "road-speed-events", Headers = [ Accept = "application/json", #"Content-Type" = "application/json", #"cobli-api-key" = api_key ], Query = [ limit = Number.ToText(100), page = Number.ToText(page), start_date = Date.ToText( Date.AddDays(Date.From(DateTime.LocalNow()), - (365 - 1)), "yyyy-MM-dd", "pt-BR" ), end_date = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"), timezone = "America/Sao_Paulo" ] ] ), json = Json.Document(Source) in json[data] Permanece o mesmo erro Link para o comentário Compartilhar em outros sites More sharing options...
0 Alunos FrancoAndre Postado Janeiro 8 Autor Alunos Compartilhar Postado Janeiro 8 11 horas atrás, FrancoAndre disse: Permanece o mesmo erro Fiz uma alteração na função para ser retornado uma tabela e na consulta, na etapa FetchAllPages onde se encontra uma condição, envolvi o currentPageData com chaves para transformar em lista, ficando: List.Combine({state, {currentPageData}}). Com isso a tabela paginada com todos os dados foi gerada! Agrade pelo código Erick, ajudou bastante! Grato! Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
FrancoAndre
Galera tenho esse código que faz uma consulta numa api e retorna o data (lista com os dados) e pagination (records com número página e próxima página):
Preciso de um código que faça um looping de paginação e combine os dados de todas as páginas e no final ter a tabela completa.
O número de páginas ta respeitando da API e na documentação é informado uma limitação de 50 requests por segundo.
Alguém poderia ajudar?
Link para o comentário
Compartilhar em outros sites
7 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