Ir para conteúdo
  • 0

Adicionar campo de filtro dentro do Body de uma requisição API


Henrik Oliveira Paes
Ir para solução Solucionado por Henrik Oliveira Paes ,

Pergunta

  • Alunos

Tudo bem pessoal?

Estou com o seguinte problema: Fiz uma requisição para uma API no Power Query, de método POST. Como o sistema não me fornece manual, eu estou buscando todas as informações via Inspect do Fetch/XHR no navegador. Fiz a requisição e funcionou tranquilamente, ela está trazendo os dados para o PowerBI.
O problema é que eu precisaria fazer um filtro de datas, se não, vai carregar dados desde 1995... e para colocar esse filtro dentro do Body é que estou com dificuldades.

Vou colocar fotos do Fetch e da minha requisição para que facilite o entendimento, visto que não posso compartilhar o Pbix porque tem o Token de acesso aos dados.

Já tentei inclusive o ChatGPT e não tive muito sucesso. Até porque esse filtro precisa ficar redondo para posteriormente aplicar a atualização incremental com RangeStart e RangeEnd.


PowerQuery.png.a737a3911e65dc3e4bee77ed6be660cd.png

 

Fetch.jpg.ce74a77c687d8231e9f9ec75d5e50836.jpg

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Boa tarde pessoal!

@Rafael Pereira O fornecedor do sistema havia pedido 700 reais mensais para "liberar a API" e enviar o manual. Então como ficaria inviável, optei por eu mesmo investigar a URL e conectar na API. Respondendo sua pergunta, não tenho manual.

@Henrique Merola Faria Infelizmente nesse formato não deu certo também, ele apresenta erro no campo de consulta mesmo.

@Alex Pereira Até consegui fazer funcionar utilizando essa função Uri.EscapeDataString, porém fica muito ruim de colocar depois um RangeStart e RangeEnd ai dentro, pelo menos eu não imaginei uma forma de fazer isso.

Galera agradeço pelo apoio, mas hoje pela manhã consegui resolver depois de muita insistência com o ChatGPT. Vou colocar a solução abaixo.

image.png.d2b1229b88436cc8493c8be0500e52d0.png

  • Like 2
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
7 horas atrás, Henrik Oliveira Paes disse:

Tudo bem pessoal?

Estou com o seguinte problema: Fiz uma requisição para uma API no Power Query, de método POST. Como o sistema não me fornece manual, eu estou buscando todas as informações via Inspect do Fetch/XHR no navegador. Fiz a requisição e funcionou tranquilamente, ela está trazendo os dados para o PowerBI.
O problema é que eu precisaria fazer um filtro de datas, se não, vai carregar dados desde 1995... e para colocar esse filtro dentro do Body é que estou com dificuldades.

Vou colocar fotos do Fetch e da minha requisição para que facilite o entendimento, visto que não posso compartilhar o Pbix porque tem o Token de acesso aos dados.

Já tentei inclusive o ChatGPT e não tive muito sucesso. Até porque esse filtro precisa ficar redondo para posteriormente aplicar a atualização incremental com RangeStart e RangeEnd.


PowerQuery.png.a737a3911e65dc3e4bee77ed6be660cd.png

 

Fetch.jpg.ce74a77c687d8231e9f9ec75d5e50836.jpg

Olá @Henrik Oliveira Paes, tudo bem?

Essa API não tem documentação?

Geralmente esse tipo de detalle é esclarecido na documentação da API.

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boooom diaaa

Geralmente, as APIs possuem um parâmetro no corpo da requisição chamado query ou algo semelhante, que permite passar filtros como os de datas. Abaixo segue um exemplo de como esse filtro pode ser aplicado no body da requisição POST no Power Query utilizando atualização incremental.

 

let
    ObterToken = () =>
        let
            urlToken = "https://autenticador.secullum.com.br/Token",
            grantType = grant_type_secullum,
            username = username_secullum,
            password = password_secullum,
            clientId = client_id_secullum,
            body = "grant_type=" & Uri.EscapeDataString(grantType) &
                "&username=" & Uri.EscapeDataString(username) &
                "&password=" & Uri.EscapeDataString(password) &
                "&client_id=" & Uri.EscapeDataString(clientId),
            headers = [#"Content-Type" = "application/x-www-form-urlencoded"],
            options = [
                Headers = headers,
                Content = Text.ToBinary(body)
            ],
            response = Json.Document(Web.Contents(urlToken, options)),
            accessToken = response[access_token]
        in
            accessToken,

    accessToken = ObterToken(),
    urlGet = "https://pontowebintegracaoexterna.secullum.com.br/IntegracaoExterna/Batidas",
    DataInicio = DateTime.ToText(RangeStart, "yyyy-MM-dd"), // Corrigido: use aspas duplas para definir o valor da data
    DataFim = DateTime.ToText(RangeEnd, "yyyy-MM-dd"), // Corrigido: use aspas duplas para definir o valor da data
    body2 = "DataInicio=" & Uri.EscapeDataString(DataInicio) &
        "&DataFim=" & Uri.EscapeDataString(DataFim), // Corrigido: removido espaço em branco
    headersGet = [#"Authorization" = "Bearer " & accessToken],
    optionsGet = [
        Headers = headersGet,
        Query = [
            DataInicio = DataInicio,
            DataFim = DataFim
        ]
    ],
    responseGet = Json.Document(Web.Contents(urlGet, optionsGet))
in
	 responseGet


É importante ressaltar que a forma como as datas precisam ser passadas pode variar dependendo da API. Isso significa que você deve adaptar o formato da data dos parâmetros de atualização incremental para atender às exigências específicas da API que está utilizando.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
13 horas atrás, Henrik Oliveira Paes disse:

Boa tarde pessoal!

@Rafael Pereira O fornecedor do sistema havia pedido 700 reais mensais para "liberar a API" e enviar o manual. Então como ficaria inviável, optei por eu mesmo investigar a URL e conectar na API. Respondendo sua pergunta, não tenho manual.

@Henrique Merola Faria Infelizmente nesse formato não deu certo também, ele apresenta erro no campo de consulta mesmo.

@Alex Pereira Até consegui fazer funcionar utilizando essa função Uri.EscapeDataString, porém fica muito ruim de colocar depois um RangeStart e RangeEnd ai dentro, pelo menos eu não imaginei uma forma de fazer isso.

Galera agradeço pelo apoio, mas hoje pela manhã consegui resolver depois de muita insistência com o ChatGPT. Vou colocar a solução abaixo.

image.png.d2b1229b88436cc8493c8be0500e52d0.png

Você faz uma concatenação só que no caso deve transformar a data primeiro nesse formato xx/xx/xxxx como fiz exemplo te mostrei. Veja exemplo abaixo:

 

    let
    DataInicio = DateTime.ToText(RangeStart, "dd/MM/yyyy"),
    DataFim = DateTime.ToText(RangeEnd, "dd/MM/yyyy"),
    Body = Json.FromValue(
        [
            page = pageNumber,
            limit = 25,
            filter = "[ 
                {
                    ""property"":""AnoMes"",
                    ""operator"":""greaterOrEqual"",
                    ""value"":""" & DataInicio & """,
                    ""and"":true
                },
                {
                    ""property"":""AnoMes"",
                    ""operator"":""lessOrEqual"",
                    ""value"":""" & DataFim & """,
                    ""and"":true
                }
            ]"
        ]
    )
in
    Body



  • Like 1
Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...