有没有办法从应用程序脚本中的 graphql API 获取数据?

Gui*_*des 3 javascript google-sheets google-apps-script graphql fetch-api

我正在尝试通过应用程序脚本从 graphql API 获取数据。

\n\n

使用 POST 获取 graphql 数据存在一个问题(Providing query string to fetch from a GraphQL API),但我需要获取的 url 只允许 GET。

\n\n

我写的代码如下:

\n\n
function main() {\n  var ss = SpreadsheetApp.getActiveSheet();\n  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"\n\n  var response = UrlFetchApp.fetch(url,{method: \'GET\', headers: { \'Content-Type\': \'application/json\'} })\n\n  var lists = JSON.parse((response.getContentText()));\n\n  Logger.log(lists);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我将网址粘贴到浏览器中,一切正常:

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

但是在应用程序脚本中使用 Url Fetch 时出现错误:

\n\n
"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\xc3\xb3digo")"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要做什么才能让我的代码正常工作?

\n

Gui*_*des 8

解决方案是在获取之前对 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);
}
Run Code Online (Sandbox Code Playgroud)