Skip to main content

Automação de exportação de relatório


joaosenna

Bom dia pessoal, gostaria de saber se tem alguma forma pra exportar os relatorios de forma automatizada, sem precisar entrar no relatório e clicar em download.

Gostaria de fazer isso para conectar o relatório no power bi e atualizar uma vez por semana. Se houver alguma forma, por favor me ajudem, ficarei muito grato

Pinned reply

February 23, 2022

Oi @joaosenna a extração é feita via Pyhton.

 

Abaixo o código para extração de todos os cards de um Pipe:

 

    import requests
    import pandas as pd
    import json

    token = 'X'

    url = "https://api.pipefy.com/graphql"

    nome_arquivo = 'pipefy'

    payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

    headers = {
        "authorization": f"Bearer {token}",
        "content-type": "application/json"
    }
    has_next_page = True
    first_query = True
    pipe_id = "X"
    json_data = {}
    records_df = pd.DataFrame()
    while(has_next_page):
      if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
      else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


      response = requests.request("POST", url, json=payload, headers=headers)
      json_data = json.loads(response.text)
      end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
      has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
      total_records_pg = len(json_data["data"]["allCards"]["edges"])
      for i in range(total_records_pg):
            card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
            card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
            card_data = {x['name']:x['value'] for x in card_data_d}
            records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

 

Abaixo o código para extração de todos os registros de uma tabela (Link do Colab):

https://colab.research.google.com/drive/1iscCAFMzHw7B9uM4yuslIkealqlvaINI?usp=sharing

23 replies

rafael.jefte
Forum|alt.badge.img+6

Olá, tudo bem? 

Até onde sei não há como fazer isso de forma automática, já tentei, inclusive seria muito útil pra mim, mas ainda precisamos exporta-los quando precisamos deles em planilha. 


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • January 27, 2022

@joaosenna

 

Não existe uma função nativa do Pipefy para extrair, mas existem algumas formas de conectar o Pipefy ao Power BI. Vou listar algumas delas:

 

  1. Você pode instalar o conector do Pipefy ao Power BI na sua máquina. Ele permite baixar todas as tabelas do Pipefy para o Power BI Desktop. É importante ressaltar que não é possível programar a atualização automática com este conector, pois ele não é homologado pela Microsoft.  Sendo assim, você precisaria ainda fazer o refresh manual dentro do Power BI. Se esta opção lhe atender, você pode baixar o conector neste link (peça autorização de acesso).

Depois de baixar o conecto, você precisa salvá-lo na pasta: Este Computador > Documentos > Power BI Desktop

Depois de salvar esta pasta o Pipefy estará disponível em outras conexões no Power BI.

  1. Extração via Python (ou outra linguagem de programação) e armazenamento em alguma plataforma de dados. Eu tenho projetos em AWS Lambda e GCP Cloud Functions + Big Query. Neste cenário, você pode extrair todas as tabelas do Pipefy com uma frequência pré-definida e consultar pelo Power BI Desktop ou Online. Eu normalmente baixo uma vez por dia, pois quanto maior o volume de informações transacionadas, maior o volume de gastos.

Algum destes cenários te atende?

 

 


rafael.jefte
Forum|alt.badge.img+6
Lucas Democh wrote:

@joaosenna

 

Não existe uma função nativa do Pipefy para extrair, mas existem algumas formas de conectar o Pipefy ao Power BI. Vou listar algumas delas:

 

  1. Você pode instalar o conector do Pipefy ao Power BI na sua máquina. Ele permite baixar todas as tabelas do Pipefy para o Power BI Desktop. É importante ressaltar que não é possível programar a atualização automática com este conector, pois ele não é homologado pela Microsoft.  Sendo assim, você precisaria ainda fazer o refresh manual dentro do Power BI. Se esta opção lhe atender, você pode baixar o conector neste link (peça autorização de acesso).

Depois de baixar o conecto, você precisa salvá-lo na pasta: Este Computador > Documentos > Power BI Desktop

Depois de salvar esta pasta o Pipefy estará disponível em outras conexões no Power BI.

  1. Extração via Python (ou outra linguagem de programação) e armazenamento em alguma plataforma de dados. Eu tenho projetos em AWS Lambda e GCP Cloud Functions + Big Query. Neste cenário, você pode extrair todas as tabelas do Pipefy com uma frequência pré-definida e consultar pelo Power BI Desktop ou Online. Eu normalmente baixo uma vez por dia, pois quanto maior o volume de informações transacionadas, maior o volume de gastos.

Algum destes cenários te atende?

 

 

Boas demais essas dicas! 


joaosenna
  • Author
  • Regular Participant
  • 2 replies
  • February 1, 2022
Lucas Democh wrote:

@joaosenna

 

Não existe uma função nativa do Pipefy para extrair, mas existem algumas formas de conectar o Pipefy ao Power BI. Vou listar algumas delas:

 

  1. Você pode instalar o conector do Pipefy ao Power BI na sua máquina. Ele permite baixar todas as tabelas do Pipefy para o Power BI Desktop. É importante ressaltar que não é possível programar a atualização automática com este conector, pois ele não é homologado pela Microsoft.  Sendo assim, você precisaria ainda fazer o refresh manual dentro do Power BI. Se esta opção lhe atender, você pode baixar o conector neste link (peça autorização de acesso).

Depois de baixar o conecto, você precisa salvá-lo na pasta: Este Computador > Documentos > Power BI Desktop

Depois de salvar esta pasta o Pipefy estará disponível em outras conexões no Power BI.

  1. Extração via Python (ou outra linguagem de programação) e armazenamento em alguma plataforma de dados. Eu tenho projetos em AWS Lambda e GCP Cloud Functions + Big Query. Neste cenário, você pode extrair todas as tabelas do Pipefy com uma frequência pré-definida e consultar pelo Power BI Desktop ou Online. Eu normalmente baixo uma vez por dia, pois quanto maior o volume de informações transacionadas, maior o volume de gastos.

Algum destes cenários te atende?

 

 

Amigo, MUITO obrigado pelas dicas, com certeza atende, Já enviei solicitação de acesso ao conector.

 

Gostaria de saber, se possível, de que forma vc faz extração via python para o GCP. Vc faz web scrapping com selenium ou algum outro tipo de procedimento?


joaosenna
  • Author
  • Regular Participant
  • 2 replies
  • February 23, 2022

Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • February 23, 2022
Pinned reply

Oi @joaosenna a extração é feita via Pyhton.

 

Abaixo o código para extração de todos os cards de um Pipe:

 

    import requests
    import pandas as pd
    import json

    token = 'X'

    url = "https://api.pipefy.com/graphql"

    nome_arquivo = 'pipefy'

    payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

    headers = {
        "authorization": f"Bearer {token}",
        "content-type": "application/json"
    }
    has_next_page = True
    first_query = True
    pipe_id = "X"
    json_data = {}
    records_df = pd.DataFrame()
    while(has_next_page):
      if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
      else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


      response = requests.request("POST", url, json=payload, headers=headers)
      json_data = json.loads(response.text)
      end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
      has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
      total_records_pg = len(json_data["data"]["allCards"]["edges"])
      for i in range(total_records_pg):
            card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
            card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
            card_data = {x['name']:x['value'] for x in card_data_d}
            records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

 

Abaixo o código para extração de todos os registros de uma tabela (Link do Colab):

https://colab.research.google.com/drive/1iscCAFMzHw7B9uM4yuslIkealqlvaINI?usp=sharing


bruno.grego
  • Regular Participant
  • 4 replies
  • June 29, 2022
Lucas Democh wrote:

Oi @joaosenna a extração é feita via Pyhton.

 

Abaixo o código para extração de todos os cards de um Pipe:

 

    import requests
    import pandas as pd
    import json

    token = 'X'

    url = "https://api.pipefy.com/graphql"

    nome_arquivo = 'pipefy'

    payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

    headers = {
        "authorization": f"Bearer {token}",
        "content-type": "application/json"
    }
    has_next_page = True
    first_query = True
    pipe_id = "X"
    json_data = {}
    records_df = pd.DataFrame()
    while(has_next_page):
      if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
      else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


      response = requests.request("POST", url, json=payload, headers=headers)
      json_data = json.loads(response.text)
      end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
      has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
      total_records_pg = len(json_data["data"]["allCards"]["edges"])
      for i in range(total_records_pg):
            card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
            card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
            card_data = {x['name']:x['value'] for x in card_data_d}
            records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

 

Abaixo o código para extração de todos os registros de uma tabela (Link do Colab):

https://colab.research.google.com/drive/1iscCAFMzHw7B9uM4yuslIkealqlvaINI?usp=sharing



Lucas, no caso, tenho uma necessidade de extrair um relatório ja criado no Pipe (na aba “Relatórios”), o qual faço o download manual em .xlsx. Esse processo tem como automatizar tambem?
Onde o output seria salvar o .xlsx numa pasta no sharepoint.

Desde já, muito obrigado!

 


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • June 29, 2022

Oi @bruno.grego,

Infelizmente não tem como automatizar esta extração. Não de uma forma fácil.

 

As opções que vejo são:

  • Fazer a extração via banco (API) de dados e aplicar os mesmos filtros. Assim você teria os dados estruturados e disponíveis para análise e/ou construção de relatórios.
  • Criar um Crawler para fazer a extração na frequência desejada.

bruno.grego
  • Regular Participant
  • 4 replies
  • June 29, 2022
Lucas Democh wrote:

Oi @bruno.grego,

Infelizmente não tem como automatizar esta extração. Não de uma forma fácil.

 

As opções que vejo são:

  • Fazer a extração via banco (API) de dados e aplicar os mesmos filtros. Assim você teria os dados estruturados e disponíveis para análise e/ou construção de relatórios.
  • Criar um Crawler para fazer a extração na frequência desejada.

Obrigado!


Eduardo Ladeira

Oi Pessoal,

Muito interessante o tópico! Extremamente útil na customização de relatórios.

 

Tenho trabalho com pipes e tabelas muito grandes. Como é contabilizado o consumo da API? Cada página passada conta como uma consulta diferente de API diferente?

 

A solução do Pipefy é fantástica, mas um ponto que sinto falta no Pipefy são relatórios mais detalhados de utilização de automação e consumo de API.

 

Obrigado


wenceslau-16-diego
Forum|alt.badge.img
Lucas Democh wrote:

Oi @joaosenna a extração é feita via Pyhton.

 

Abaixo o código para extração de todos os cards de um Pipe:

 

    import requests
    import pandas as pd
    import json

    token = 'X'

    url = "https://api.pipefy.com/graphql"

    nome_arquivo = 'pipefy'

    payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

    headers = {
        "authorization": f"Bearer {token}",
        "content-type": "application/json"
    }
    has_next_page = True
    first_query = True
    pipe_id = "X"
    json_data = {}
    records_df = pd.DataFrame()
    while(has_next_page):
      if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
      else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


      response = requests.request("POST", url, json=payload, headers=headers)
      json_data = json.loads(response.text)
      end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
      has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
      total_records_pg = len(json_data["data"]["allCards"]["edges"])
      for i in range(total_records_pg):
            card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
            card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
            card_data = {x['name']:x['value'] for x in card_data_d}
            records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

 

Abaixo o código para extração de todos os registros de uma tabela (Link do Colab):

https://colab.research.google.com/drive/1iscCAFMzHw7B9uM4yuslIkealqlvaINI?usp=sharing

Bom dia,

 

no meu está dando erro no end_cursor, o que seria ?


Lais Laudari

Algo relacionado a Pagination? @Lucas Democh consegue dar uma força aqui? 😊


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • April 20, 2023

@wenceslau-16-diego testei o código e está funcionado em nosso ambiente.

 

Onde você está rodando o código? Qual versão do Python? Pode enviar um print do erro?


wenceslau-16-diego
Forum|alt.badge.img
Lucas Democh wrote:

@wenceslau-16-diego testei o código e está funcionado em nosso ambiente.

 

Onde você está rodando o código? Qual versão do Python? Pode enviar um print do erro?


Creio que tenha sido a indentação do código.

Seria esse correto abaixo ?
Teria como trazer os nomes dos CADS ?

import requests
import pandas as pd
import json

token = 'X'

url = "https://api.pipefy.com/graphql"
nome_arquivo = 'pipefy'
payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

headers = {"authorization": f"Bearer {token}", "content-type": "application/json"}

has_next_page = True
first_query = True
pipe_id = "303177751"
json_data = {}
records_df = pd.DataFrame()

while(has_next_page):
    if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
    else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


    response = requests.request("POST", url, json=payload, headers=headers)
    json_data = json.loads(response.text)
    end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
    has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
    total_records_pg = len(json_data["data"]["allCards"]["edges"])

    for i in range(total_records_pg):
        card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
        card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
        card_data = {x['name']:x['value'] for x in card_data_d}
        records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

df

 

Peguei do modelo: Avaliação de Desempenho

 

Aparece o resultado:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 25 columns):
 #   Column                                                         Non-Null Count  Dtype 
---  ------                                                         --------------  ----- 
 0   Motivação                                                      5 non-null      object
 1   Conhecimento                                                   5 non-null      object
 2   Inovação                                                       5 non-null      object
 3   Atitude                                                        5 non-null      object
 4   Quais são as três áreas principais que você precisa melhorar?  6 non-null      object
 5   Início do período de avaliação                                 6 non-null      object
 6   Reação do funcionário ao feedback                              4 non-null      object
 7   Como foi a reunião de feedback?                                3 non-null      object
 8   Fim do período de avaliação                                    6 non-null      object
 9   Seus três pontos fortes                                        6 non-null      object
 10  Data da reunião                                                4 non-null      object
 11  Responsabilidade                                               5 non-null      object
 12  Nome                                                           7 non-null      object
 13  Qualidade do trabalho                                          5 non-null      object
 14  Trabalho em equipe                                             5 non-null      object
 15  E-mail                                                         6 non-null      object
 16  Três maiores conquistas profissionais                          6 non-null      object
 17  Próxima reunião                                                4 non-null      object
 18  Como você avaliaria sua avaliação geral de desempenho?         5 non-null      object
 19  Observações                                                    1 non-null      object
 20  Os objetivos foram atingidos?                                  3 non-null      object
 21  Próximos passos                                                1 non-null      object
 22  Resultados do acompanhamento                                   1 non-null      object
 23  Avaliador responsável                                          1 non-null      object
 24  Comentários sobre a sua avaliação do colaborador               1 non-null      object

 


Forum|alt.badge.img

Boa tarde!

Teria o  código para extração de todos os cards de um Pipe via GCP?


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • November 13, 2023

@clarice_silva é o mesmo código.


Forum|alt.badge.img

Mas o código do pipefy vai rodar no GCP sem precisar alterar? 


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • December 13, 2023

@clarice_silva o código foi escrito em python e pode rodar em qualquer plataforma em nuvem. 

 

A diferença são os serviços que você vai utilizar em cada uma das nuvens.

 

Quando desenvolvemos este código, nós utilizávamos o GCP com os seguintes serviços:

  • Cloud Scheduler
  • Cloud Shell
  • Google Big Query

Ele também é compatível para rodar em Google Colaboratory (Colab), mas até onde eu sei, o Colab não permite uma agendamento para execução.

 


Forum|alt.badge.img
Lucas Democh wrote:

@clarice_silva é o mesmo código.

Mas o mesmo condigo do Python vai rodar no GCP?

Não teria que mudar nada?


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • December 13, 2023

@clarice_silva a estrutura do código que foi postada aqui neste tópico não muda.

 

Se você acessar o código que foi compartilhado via Colab, a única diferença é que no começo você não precisa fazer a importação do boto3, que é um SDK necessário para rodar na AWS.

No final do código, você preciso apontar para o seu data lake no GCP ou outra nuvem de preferência. 


suporteTI
Forum|alt.badge.img
  • New Member
  • 1 reply
  • April 11, 2024
Lucas Democh wrote:

Oi @joaosenna a extração é feita via Pyhton.

 

Abaixo o código para extração de todos os cards de um Pipe:

 

    import requests
    import pandas as pd
    import json

    token = 'X'

    url = "https://api.pipefy.com/graphql"

    nome_arquivo = 'pipefy'

    payload = "{\"query\":\"{ allCards (pipeId:X) { edges { node { id title fields { name report_value updated_at value } } } }} \"}"

    headers = {
        "authorization": f"Bearer {token}",
        "content-type": "application/json"
    }
    has_next_page = True
    first_query = True
    pipe_id = "X"
    json_data = {}
    records_df = pd.DataFrame()
    while(has_next_page):
      if first_query:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}
        first_query = False
      else:
        payload = {"query": "{ allCards (pipeId:\""+pipe_id+"\",after:\""+end_cursor+"\") { edges { node { id title fields { name report_value updated_at value } } } pageInfo {endCursor hasNextPage}}}"}


      response = requests.request("POST", url, json=payload, headers=headers)
      json_data = json.loads(response.text)
      end_cursor =json_data['data']['allCards']["pageInfo"]["endCursor"] #record é edges
      has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]
      total_records_pg = len(json_data["data"]["allCards"]["edges"])
      for i in range(total_records_pg):
            card_title = json_data["data"]["allCards"]["edges"][i]["node"]["title"]
            card_data_d = json_data["data"]["allCards"]["edges"][i]["node"]["fields"]
            card_data = {x['name']:x['value'] for x in card_data_d}
            records_df = records_df.append(card_data, ignore_index=True)

    records_df.info()

    df = records_df

    df.columns = df.columns.str.replace(' ', '_')
    df.columns = df.columns.str.replace('ã', 'a')
    df.columns = df.columns.str.replace('Á', 'A')
    df.columns = df.columns.str.replace('é', 'e')
    df.columns  = df.columns.str.replace('ê', 'e')
    df.columns  = df.columns.str.replace('á', 'a')
    df.columns  = df.columns.str.replace('ç', 'c')   
    df.columns  = df.columns.str.replace('í', 'i')
    df.columns  = df.columns.str.replace('ú', 'u') 
    df.columns  = df.columns.str.replace('õ', 'o') 
    df.columns  = df.columns.str.replace('ó', 'o')
    df.columns  = df.columns.str.replace('õ', 'o')
    df.columns  = df.columns.str.replace('.', '')

    df = df.reset_index(drop=True)

 

Abaixo o código para extração de todos os registros de uma tabela (Link do Colab):

https://colab.research.google.com/drive/1iscCAFMzHw7B9uM4yuslIkealqlvaINI?usp=sharing

Estou tendo o seguinte erro ao rodar no jupyter notebook:

KeyError                                  Traceback (most recent call last)Cell In[13], line 34     32 response = requests.request("POST", url, json=payload, headers=headers)     33 json_data = json.loads(response.text)---> 34 end_cursor = json_data["data"]['allCards']["pageInfo"]["endCursor"] #record é edges     35 has_next_page = json_data["data"]["allCards"]["pageInfo"]["hasNextPage"]     36 total_records_pg = len(json_data["data"]["allCards"]["edges"])KeyError: 'data'

 

Poderiam me auxiliar?


manthan-tiwari

Hi everyone, 

Hi Everyone, Is there any way we could extract Dashboard stats and all the charts via API, the or is there any other way to do it, like using python script or power bi 


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • August 14, 2024

Hello @manthan-tiwari

You cannot extract data from the Pipe dashboard via API, but you can extract the data and use it to calculate whatever is necessary.

In this topic, an example code for extraction was shared.


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings