【问题标题】:Is there a way to fetch data from a graphql API in apps script?有没有办法从应用脚本中的 graphql API 获取数据?
【发布时间】:2019-10-25 09:47:25
【问题描述】:

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

有一个问题是使用 POST 获取 graphql 数据 (Providing query string to fetch from a GraphQL API),但我需要获取的 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);
}

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

{
  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")"

我必须做什么才能使我的代码正常工作?

【问题讨论】:

    标签: javascript google-apps-script google-sheets graphql fetch-api


    【解决方案1】:

    解决方案是在获取之前对 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2021-06-04
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多