JSONP AJAX в сценарии Google - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь научиться запрашивать данные с сайта местных органов власти (надеясь, что смогу научить студентов по математике провести анализ данных). Я надеюсь получить данные и вставить их в Google Sheets. Ниже приведен пример, предоставленный официальным сайтом о том, как сделать запрос:

var data = {
  resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id
  limit: 5, // get 5 results
  q: 'jones' // query for 'jones'
};
$.ajax({
  url: 'https://data.gov.sg/api/action/datastore_search',
  data: data,
  dataType: 'jsonp',
  success: function(data) {
    alert('Total results found: ' + data.result.total)
 }
});$

Я попробовал следующий код в скрипте Google Apps:

function testapi(){
  var data = {
    resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id
    limit: 5, // get 5 results
    q: 'Yishun' 
  };

  var url = "https://data.gov.sg/api/action/datastore_search";
  var response = UrlFetchApp.fetch(url,data).getContentText();
}

Я получаю ошибку 404. Я думаю, что опция "данные" не была передана.

Буду признателен за помощь. Я учитель математики, а не специалист по кодированию.

Обновление: я изменил код на это, но все равно ошибка 404.

function testapi(){
  var data = {
    resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id
    limit: 5, // get 5 results
    q: 'Yishun' // query for 'jones'
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(data)
  };  

  var url = "https://data.gov.sg/api/action/datastore_search";
      var response = UrlFetchApp.fetch(url,options).getContentText();

  }

1 Ответ

0 голосов
/ 20 мая 2019

Проблема:

Когда ключ payload присутствует в аргументе options / params для UrlFetchApp, method по умолчанию устанавливается на post. И любая попытка изменить метод получения «молча» игнорируется. Другие аналогичные скриптовые платформы автоматически конвертируют payload в параметры запроса url. Но UrlFetchApp молча меняет метод публикации и ничего больше.

Решение:

Повторно создайте объект данных в виде строки запроса. Например, data:{x:1,y:2} следует изменить на ?x=1&y=2 и добавить к URL.

Отрывок:

function testapi() {
  var data = {
    resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id
    limit: 5, // get 5 results
    q: 'Yishun', // query for 'jones'
  };

  var options = {
    method: 'get',
    // 'contentType': 'application/json',
    // 'payload' : data,//If set, method is ignored.
    headers: { Accept: '*/*', 'Content-Type': 'application/json' },
    muteHttpExceptions: true,
  };

  var url = 'https://data.gov.sg/api/action/datastore_search';
  //var url = 'https://httpbin.org/get'; test the method
  var query = '?',
    i = 0;
  for (var key in data) {
    i ? (query += '&') : null;
    query += key + '=' + data[key];
    i = 1;
  }
  url += query;
  var response = UrlFetchApp.fetch(url, options).getContentText();
  Logger.log(response);
}

Связанный:

UrlSearchParams

...