Skip to main content

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

  • January 26, 2022
  • 23 replies
  • 2079 views

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

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
  • Legend
  • 529 replies
  • January 26, 2022

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
  • 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
  • Legend
  • 529 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?

 

 

Boas demais essas dicas! 


joaosenna
  • Author
  • Explorer
  • 2 replies
  • February 1, 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?

 

 

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
  • Explorer
  • 2 replies
  • February 23, 2022

@Lucas Democh 


Lucas Democh
Forum|alt.badge.img+15
  • Legend
  • 396 replies
  • 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


bruno.grego
  • Explorer
  • 4 replies
  • June 29, 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



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
  • 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
  • Explorer
  • 4 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.

Obrigado!


Eduardo Ladeira
  • New Member
  • 1 reply
  • September 16, 2022

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

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
  • 536 replies
  • April 20, 2023

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


Lucas Democh
Forum|alt.badge.img+15
  • 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

@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
  • Inspiring
  • 6 replies
  • November 10, 2023

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
  • Legend
  • 396 replies
  • November 13, 2023

@clarice_silva é o mesmo código.


Forum|alt.badge.img
  • Inspiring
  • 6 replies
  • December 13, 2023

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


Lucas Democh
Forum|alt.badge.img+15
  • 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
  • Inspiring
  • 6 replies
  • December 13, 2023

@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
  • 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

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
  • New Member
  • 1 reply
  • August 14, 2024

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
  • 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.