Ir para conteúdo
  • 0

Requisição para Graph API da Meta [Editor Avançado] [Arquivo pbix]


Janio Rolim

Pergunta

  • Alunos

Boa tarde, pessoal! 

Há dois dias atrás postei sobre isso aqui e não obtive ajuda para resolver este problema. Isso está me atrasando muito, então estou postando de novo com mais detalhes e com o arquivo pbix para facilitar qualquer ajuda.

Eu estou ficando com o prazo curto para terminar esse projeto, então agradeço de coração qualquer dica ou ajuda para resolver isso.

Estou enfrentando um problema com a integração da API da Meta para obter dados de uma conta de anúncios do Facebook. A configuração inicial da API está correta, e consigo retornar os dados sem problemas no ambiente de desenvolvimento. Criei o código de consulta no editor avançado do Power Query e, ao confirmar a edição, tudo parece funcionar perfeitamente.

No entanto, o problema ocorre quando tento atualizar os dados ou fechar e aplicar as alterações no Power Query. Nessas situações, recebo um erro diezendo que a "Column1" não foi encontrada ou a tabela retorna vazia.

Ou seja, na primeira execução do código ele funciona, mas depois para de funcionar. Não é nem um problema com a API e nem com o token, pois, jogando a url no navegador ela esta funcionando perfeitamente.

É importante ressaltar que o erro não tem a ver com a expansão das colunas, pois mesmo quando removo esta etapa o erro persiste.

Estou há dias tentando resolver esse problema, mas já esgotei minhas ideias sobre o que pode estar causando essa interferência. Alguém já passou por isso ou tem alguma dica sobre o que pode estar acontecendo?

Segue meu código, e as imagens do problema.

Imagem 1 - Dados recebidos logo após colar o código e clicar em confirmar no editor avançado;

Imagem 2 - O que acontece quando eu clico em atualizar visualização;

Imagem 3 - O que acontece quando eu clico em fechar e aplicar.

Anexo - Arquivo pbix do projeto 

 

Agradeço desde já pela ajuda!

 

let
    // URL base e parâmetros
    baseUrl = "https://graph.facebook.com/v20.0/act_695487245543343/insights",
    // Define a URL base da API do Facebook para obter dados de insights de anúncios.

    queryParams = "?time_increment=1&time_range=%7B%27since%27%3A%272023-01-01%27%2C%27until%27%3A%272024-12-31%27%7D&level=ad&fields=account_id%2Ccampaign_id%2Cadset_id%2Cad_id%2Cdate_start%2Cdate_stop%2Cobjective%2Creach%2Cclicks%2Cimpressions%2Cspend%2Cactions",
    // Define os parâmetros de consulta para a API, incluindo o intervalo de datas, nível de detalhe (anúncio) e os campos que serão retornados.

    accessToken = "&access_token=EAAFNazyPYNoBOxZASFgrRpAULVZC5rpnYZARhvnFkR7Kx3ZCwRNb5uTevhw9BoZCulLfZBpgHfD9XVziZBQNDDfiI69netZC0KIFRWVNJPohhkZBa6vwfSbUaH3HuzmWIU1EyXu1EInz6Ubn2gWjZCB7zsQe9gpw9PSJKI9ZA6metZBajO1cZB3uZC0QqTY8sTZCmQ2ZBZCBaxOqMjmSBpRPLq0haIgZDZD",
    // Especifica o token de acesso necessário para autenticação na API.

    initialUrl = baseUrl & queryParams & accessToken,
    // Combina a URL base, os parâmetros de consulta e o token de acesso para formar a URL completa da solicitação.

    // Função para obter dados de uma URL
    GetData = (url as text) as table =>
    let
        // Tenta obter o conteúdo da URL
        jsonResponse = try Json.Document(Web.Contents(url, [Timeout=#duration(0,0,10,0)])) otherwise null,
        // Tenta fazer uma solicitação HTTP para a URL e decodifica a resposta JSON. Define um tempo limite de 10 segundos. Em caso de erro, retorna null.

        data = if jsonResponse <> null and Record.HasFields(jsonResponse, "data") then jsonResponse[data] else {},
        // Verifica se a resposta contém o campo "data" e extrai os dados se presente. Caso contrário, retorna uma lista vazia.

        nextPage = if jsonResponse <> null and Record.HasFields(jsonResponse, "paging") and Record.HasFields(jsonResponse[paging], "next") then jsonResponse[paging][next] else null,
        // Verifica se a resposta contém uma indicação de próxima página de dados. Se sim, obtém a URL da próxima página.

        dataTable = if List.NonNullCount(data) > 0 then 
                        Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
                    else
                        #table({}, {}),
        // Converte os dados em uma tabela, desde que existam dados não nulos. Caso contrário, cria uma tabela vazia.

        result = try dataTable otherwise #table({}, {}),
        // Tenta retornar a tabela de dados; em caso de erro, retorna uma tabela vazia.

        nextData = if nextPage <> null then @GetData(nextPage) else #table({}, {}),
        // Se houver uma URL para a próxima página, chama recursivamente a função GetData para obter os dados adicionais; caso contrário, retorna uma tabela vazia.

        combined = Table.Combine({result, nextData})
    in
        combined,
    // Combina os resultados da página atual com os da próxima página, se houver.

    // Chamada inicial para obter dados
    result = GetData(initialUrl),
    // Chama a função GetData para obter os dados a partir da URL inicial.



    // Expansão da coluna com verificação de erro
    #"Column1 Expandido" = try Table.ExpandRecordColumn(result, "Column1", {"account_id", "campaign_id", "adset_id", "ad_id", "date_start", "date_stop", "objective", "reach", "clicks", "impressions", "spend", "actions"}, {"Column1.account_id", "Column1.campaign_id", "Column1.adset_id", "Column1.ad_id", "Column1.date_start", "Column1.date_stop", "Column1.objective", "Column1.reach", "Column1.clicks", "Column1.impressions", "Column1.spend", "Column1.actions"}) otherwise result,
    // Expande as colunas de um registro aninhado, especificando as colunas que devem ser extraídas. Se ocorrer um erro, retorna a tabela original.

    // Diagnóstico para garantir que os dados são exibidos corretamente
    Output = try #"Column1 Expandido" otherwise #table({}, {})
    // Tenta retornar a tabela expandida; se ocorrer um erro, retorna uma tabela vazia.
    
in
    Output
    // Retorna a tabela final de resultados.

 

VersãoFinal.pbix

Captura de tela 2024-08-05 151320.png

Captura de tela 2024-08-05 151449.png

Captura de tela 2024-08-05 154151.png

Editado por Janio Rolim
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Faça login para comentar

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



Entrar Agora
×
×
  • Criar Novo...