Skip to main content
Solved

Problema com API de database

  • February 2, 2022
  • 4 replies
  • 321 views

joaogalhardo

Boa tarde,

estou buscando os registros de um database através da API.

Tenho o seguinte código:

1function myFunction() {
2
3 // CHAMADA API PIPEFY
4
5 url = "https://api.pipefy.com/graphql"
6 var codigo = "*****"
7 var query = "query ($codigo: ID!) { table_records (table_id : $codigo){ edges { node { updated_at record_fields { name report_value } } } } }"
8 var options =
9 {
10 "method": "POST",
11 "headers": {
12 "Authorization": "Bearer ****",
13 "Content-type":"application/json",
14 },
15 "payload": JSON.stringify({query, variables : {codigo}})
16 }
17
18 var response = UrlFetchApp.fetch(url,options);
19 var CC = response.getContentText();
20 var datos = JSON.parse(CC);
21 var valores = datos.data.table_records.edges[0].node.record_fields;
22 var atualizacao = datos.data.table_records.edges[1].node.updated_at;
23 var cliente1 = datos.data.table_records.edges[0].node.record_fields;
24 var cliente2 = datos.data.table_records.edges[1].node.record_fields;
25 var cliente3 = datos.data.table_records.edges[2].node.record_fields;
26
27console.log(cliente1)
28console.log(cliente2)
29console.log(cliente3)

e estou obtendo as seguintes informações:

cliente1

1[ { name: 'Nome', report_value: 'Joice Lacerda' },
2 { name: 'CPF', report_value: '' },
3 { name: 'Financiamento', report_value: '110.800,00' },
4 { name: 'FGTS', report_value: '2.329,91' },
5 { name: 'Subsídio', report_value: '1.755,00' },
6 { name: 'Bonificaçao', report_value: '4.000,00' },
7 { name: 'Entrada', report_value: '19.621,93' },
8 { name: 'Fase Atual', report_value: 'Caixa de entrada' } ]

cliente2

1[ { name: 'Nome', report_value: 'Fabricio Soares De Souza' },
2 { name: 'CPF', report_value: '318.058.498-08' },
3 { name: 'Financiamento', report_value: '110.800,00' },
4 { name: 'Subsídio', report_value: '1.755,00' },
5 { name: 'Bonificaçao', report_value: '4.000,00' },
6 { name: 'Entrada', report_value: '21.944,99' },
7 { name: 'FGTS', report_value: '0,01' } ]

cliente3

1[ { name: 'Nome', report_value: 'Beatriz Boreli Gomes' },
2 { name: 'CPF', report_value: '463.531.798-63' },
3 { name: 'Financiamento', report_value: '110.800,00' },
4 { name: 'Bonificaçao', report_value: '4.000,00' },
5 { name: 'Entrada', report_value: '23.700,00' },
6 { name: 'FGTS', report_value: '0,01' },
7 { name: 'Subsídio', report_value: '0,01' } ]

Os índices desses objetos que tenho como retorno variam, daí não consigo criar uma regra para colocá-los nas colunas certas da planilha
ex: o campo FGTS está no índice [3] do cliente1, índice [6] no cliente2 e índice [5] no cliente3, ou seja, não vem padronizado.

Como posso resolver isso? E por que os dados são enviados dessa forma?

Best answer by joaogalhardo

Juliana Spinardi wrote:

@joaogalhardo continua com o mesmo problema? 

 

Oi Juliana, entrei em contato com o chat e a equipe respondeu que é por  conta da ordem em que foi preenchido. Caso alguém tenha o mesmo problema, eis a solução que fiz:

 

1for (var i = 0 ; i < tamanho; i++){
2 var cliente = datos.data.table_records.edges[i].node.record_fields
3 var nome = cliente.findIndex(x => x.name === "Nome");
4 var cpf = cliente.findIndex(x => x.name === "CPF");
5 var financiamento = cliente.findIndex(x => x.name === "Financiamento");
6 var fgts = cliente.findIndex(x => x.name === "FGTS");
7 var subsidio = cliente.findIndex(x => x.name === "Subsídio");
8 var bonificacao = cliente.findIndex(x => x.name === "Bonificaçao");
9 var entrada = cliente.findIndex(x => x.name === "Entrada");

 

Pego os campos do registro e armazeno na variável cliente. Depois procuro o índice associado ao nome do campo que preciso, e utilizo posteriormente para atribuir o valor na coluna certa da planilha
 

1sheet.getRange(controle+2, 1).setValue(datos.data.table_records.edges[i].node.record_fields[nome].report_value);
2 sheet.getRange(controle+2, 2).setValue(datos.data.table_records.edges[i].node.record_fields[cpf].report_value);
3 sheet.getRange(controle+2, 3).setValue(datos.data.table_records.edges[i].node.record_fields[financiamento].report_value);
4 sheet.getRange(controle+2, 4).setValue(datos.data.table_records.edges[i].node.record_fields[fgts].report_value);
5 sheet.getRange(controle+2, 5).setValue(datos.data.table_records.edges[i].node.record_fields[subsidio].report_value);
6 sheet.getRange(controle+2, 6).setValue(datos.data.table_records.edges[i].node.record_fields[bonificacao].report_value);
7 sheet.getRange(controle+2, 7).setValue(datos.data.table_records.edges[i].node.record_fields[entrada].report_value);
8 sheet.getRange(controle+2, 9).setValue(datos.data.table_records.edges[i].node.updated_at);

 

View original
Did this topic help you find an answer to your question?

4 replies

Lucas Democh
Forum|alt.badge.img+15

Olá @joaogalhardo,

 

Utilize o código abaixo para ignorar os índices e para baixar mais de 50 registros:

 

1table_id = "XXXXXX"
2pipefy_token = 'XXXXXX'
3table_fields = [""]
4nome_arquivo = 'X'
5
6
7url = "https://api.pipefy.com/graphql"
8
9headers = {
10 "authorization": f"Bearer {pipefy_token}",
11 "content-type": "application/json"
12}
13
14df = pd.DataFrame(columns=table_fields)
15
16has_next_page = True
17first_query = True
18
19while(has_next_page):
20
21 if first_query:
22 payload = {"query": "{ table_records(table_id:\""+table_id+"\") {edges {node {id title record_fields {name value}}} pageInfo {endCursor hasNextPage}}}"}
23 first_query = False
24 else:
25 payload = {"query": "{ table_records(table_id:\""+table_id+"\",after:\""+end_cursor+"\") {edges {node {id title record_fields {name value}}} pageInfo {endCursor hasNextPage}}}"}
26
27 response = requests.request("POST", url, json=payload, headers=headers)
28
29 json_data = json.loads(response.text)
30 end_cursor = json_data["data"]["table_records"]["pageInfo"]["endCursor"]
31 has_next_page = json_data["data"]["table_records"]["pageInfo"]["hasNextPage"]
32 total_records_pg = len(json_data["data"]["table_records"]["edges"])
33
34 for i in range(total_records_pg):
35 card_title = json_data["data"]["table_records"]["edges"][i]["node"]["title"]
36 card_data_d = json_data["data"]["table_records"]["edges"][i]["node"]["record_fields"]
37 card_data = {x['name']:x['value'] for x in card_data_d}
38 df = df.append(card_data, ignore_index=True)

Exemplo de df.info():

 

 

 

 


joaogalhardo
  • Author
  • Inspiring
  • 7 replies
  • February 2, 2022

É que estou fazendo no Apps Script do Google e a linguagem lá é em JavaScript


Juliana Spinardi
Pipefy Staff
Forum|alt.badge.img+8

@joaogalhardo continua com o mesmo problema? 


joaogalhardo
  • Author
  • Inspiring
  • 7 replies
  • Answer
  • February 4, 2022
Juliana Spinardi wrote:

@joaogalhardo continua com o mesmo problema? 

 

Oi Juliana, entrei em contato com o chat e a equipe respondeu que é por  conta da ordem em que foi preenchido. Caso alguém tenha o mesmo problema, eis a solução que fiz:

 

1for (var i = 0 ; i < tamanho; i++){
2 var cliente = datos.data.table_records.edges[i].node.record_fields
3 var nome = cliente.findIndex(x => x.name === "Nome");
4 var cpf = cliente.findIndex(x => x.name === "CPF");
5 var financiamento = cliente.findIndex(x => x.name === "Financiamento");
6 var fgts = cliente.findIndex(x => x.name === "FGTS");
7 var subsidio = cliente.findIndex(x => x.name === "Subsídio");
8 var bonificacao = cliente.findIndex(x => x.name === "Bonificaçao");
9 var entrada = cliente.findIndex(x => x.name === "Entrada");

 

Pego os campos do registro e armazeno na variável cliente. Depois procuro o índice associado ao nome do campo que preciso, e utilizo posteriormente para atribuir o valor na coluna certa da planilha
 

1sheet.getRange(controle+2, 1).setValue(datos.data.table_records.edges[i].node.record_fields[nome].report_value);
2 sheet.getRange(controle+2, 2).setValue(datos.data.table_records.edges[i].node.record_fields[cpf].report_value);
3 sheet.getRange(controle+2, 3).setValue(datos.data.table_records.edges[i].node.record_fields[financiamento].report_value);
4 sheet.getRange(controle+2, 4).setValue(datos.data.table_records.edges[i].node.record_fields[fgts].report_value);
5 sheet.getRange(controle+2, 5).setValue(datos.data.table_records.edges[i].node.record_fields[subsidio].report_value);
6 sheet.getRange(controle+2, 6).setValue(datos.data.table_records.edges[i].node.record_fields[bonificacao].report_value);
7 sheet.getRange(controle+2, 7).setValue(datos.data.table_records.edges[i].node.record_fields[entrada].report_value);
8 sheet.getRange(controle+2, 9).setValue(datos.data.table_records.edges[i].node.updated_at);

 


Reply


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