Есть ли способ получить данные из API GraphQl в скрипте приложения? - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь получить данные из API GraphQL через скрипт приложения.

Есть вопрос об использовании POST для получения данных graphql ( Предоставление строки запроса для извлечения из API GraphQL ), но URL-адрес, который мне нужно получить, позволяет только GET.

Код, который я написал ниже:

function main() {
  var ss = SpreadsheetApp.getActiveSheet();
  url = "https://coletum.com/api/graphql?query={answer(formId:7787){answer{nomeDaEmpresa107176,cnpj107177,inscricaoEstadual107178,telefone107179},metaData{userId,userName,source,friendlyId,createdAt,createdAtDevice,createdAtCoordinates,updatedAt,updatedAtCoordinates}}}&token=k4foipsju5ckosk4w8o0w084cc8oos0"

  var response = UrlFetchApp.fetch(url,{method: 'GET', headers: { 'Content-Type': 'application/json'} })

  var lists = JSON.parse((response.getContentText()));

  Logger.log(lists);
}

Если я вставлю URL в браузер, все будет нормально:

{
  data: {
    answer: [
      {
        answer: {
          nomeDaEmpresa107176: "LAVORO",
          cnpj107177: "26.693.198/0001-20",
          inscricaoEstadual107178: 12341234,
          telefone107179: "(66) 1234-1234"
        },
        metaData: {
          userId: 9938,
          userName: "Mendes",
          source: "web_private",
          friendlyId: "1.202279",
          createdAt: "2019-05-10T00:14:54+00:00",
          createdAtDevice: "2019-05-10T00:14:54+00:00",
          createdAtCoordinates: {
            longitude: -52.20797,
            latitude: -12.58536
          },
          updatedAt: null,
          updatedAtCoordinates: {
            longitude: null,
            latitude: null
          }
        }
      },
      {
        answer: {
          nomeDaEmpresa107176: "RURAL",
          cnpj107177: "26.693.198/0001-20",
          inscricaoEstadual107178: 1234,
          telefone107179: "(66) 1234-1234"
        },
        metaData: {
          userId: 9938,
          userName: "Mendes",
          source: "web_private",
          friendlyId: "1.202280",
          createdAt: "2019-05-10T00:15:15+00:00",
          createdAtDevice: "2019-05-10T00:15:15+00:00",
          createdAtCoordinates: {
            longitude: -52.20797,
            latitude: -12.58536
          },
          updatedAt: null,
          updatedAtCoordinates: {
            longitude: null,
            latitude: null
          }
        }
      },
      {
        answer: {
          nomeDaEmpresa107176: "PRIMAVERA MÁQUINAS",
          cnpj107177: "26.693.198/0001-20",
          inscricaoEstadual107178: 12341234,
          telefone107179: "(66) 1234-1234"
        },
        metaData: {
          userId: 9938,
          userName: "Mendes",
          source: "web_private",
          friendlyId: "1.202281",
          createdAt: "2019-05-10T00:15:51+00:00",
          createdAtDevice: "2019-05-10T00:15:51+00:00",
          createdAtCoordinates: {
            longitude: -52.20797,
            latitude: -12.58536
          },
          updatedAt: null,
          updatedAtCoordinates: {
            longitude: null,
            latitude: null
          }
        }
      },
      {
        answer: {
          nomeDaEmpresa107176: "SINAGRO",
          cnpj107177: "26.693.198/0001-20",
          inscricaoEstadual107178: 1234,
          telefone107179: "(66) 98412-1030"
        },
        metaData: {
          userId: 9938,
          userName: "Mendes",
          source: "web_private",
          friendlyId: "1.202633",
          createdAt: "2019-05-10T20:54:02+00:00",
          createdAtDevice: "2019-05-10T20:54:02+00:00",
          createdAtCoordinates: {
            longitude: -52.20629,
            latitude: -12.59418
          },
          updatedAt: null,
          updatedAtCoordinates: {
            longitude: null,
            latitude: null
          }
        }
      }
    ]
  }
}

Но, используя Url Fetch в скрипте приложений, я получил ошибку:

"Invalid Argument: https://coletum.com/api/graphql?query={answer(formId:7787){answer{nomeDaEmpresa107176,cnpj107177,inscricaoEstadual107178,telefone107179},metaData{userId,userName,source,friendlyId,createdAt,createdAtDevice,createdAtCoordinates,updatedAt,updatedAtCoordinates}}}&token=k4foipsju5ckosk4w8o0w084cc8oos0 (line 5, file "Código")"

Что я должен сделать, чтобы мой код работал?

1 Ответ

1 голос
/ 11 июня 2019

Решение заключалось в том, чтобы ENCODE de url перед извлечением:

function main() {
  var ss = SpreadsheetApp.getActiveSheet();
  url_orcamentos = "https://coletum.com/api/graphql?query={answer(formId:7787){answer{nomeDaEmpresa107176,cnpj107177,inscricaoEstadual107178,telefone107179},metaData{userId,userName,source,friendlyId,createdAt,createdAtDevice,createdAtCoordinates,updatedAt,updatedAtCoordinates}}}&token=k4foipsju5ckosk4w8o0w084cc8oos0"
  url = encodeURI(url_orcamentos)
  var response = UrlFetchApp.fetch(url,{method: 'GET', headers: { 'Content-Type': 'application/json'} })

  var lists = JSON.parse((response.getContentText()));

  Logger.log(lists);
}
...