google脚本中的jsonpajax
我正在尝试学习如何从当地政府数据网站查询数据(希望我能教我的数学学生做一些数据分析)。我希望得到这些数据,并将它们插入谷歌的表单。以下是官方网站提供的关于如何进行查询的示例:google脚本中的jsonpajax,ajax,google-apps-script,jsonp,urlfetch,http-method,Ajax,Google Apps Script,Jsonp,Urlfetch,Http Method,我正在尝试学习如何从当地政府数据网站查询数据(希望我能教我的数学学生做一些数据分析)。我希望得到这些数据,并将它们插入谷歌的表单。以下是官方网站提供的关于如何进行查询的示例: var data = { resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id limit: 5, // get 5 results q: 'jones' // query for 'jones' }; $.ajax({
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();
}
问题:
每当UrlFetchApp
的options
/params
参数中出现有效负载
键时,方法
默认设置为post
。任何试图更改获取方法的尝试都会被“静默”忽略。其他类似的脚本平台会自动将有效负载
转换为url查询参数。但是,UrlFetchApp
会默默地将方法更改为post,而不会更改其他内容
解决方案:
将数据对象重新创建为查询字符串。例如,数据:{x:1,y:2}
应更改为?x=1&y=2
,并附加到url
片段:
函数objectToQueryParams(obj){
返回(
'?' +
Object.entries(obj)
.map([k,v])=>`${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join(“&”)
);
}
风险值数据={
资源id:'1b702208-44bf-4829-b620-4615ee19b57c',//资源id
限制:5,//获得5个结果
q:'Yishun',//查询'jones'
};
log(objectToQueryParams(data))代码>可能重复我更改了代码,但仍然得到404错误。方法
错误。我确实更改了方法以获得,但错误仍然存在。
function testapi() {
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
function objectToQueryParams(obj) {
return (
'?' +
Object.entries(obj)
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join('&')
);
}
var data = {
resource_id: '1b702208-44bf-4829-b620-4615ee19b57c', // the resource id
limit: 5, // get 5 results
q: 'Yishun', // query for 'Yishun'
};
var query = objectToQueryParams(data);
url += query;
var response = UrlFetchApp.fetch(url, options).getContentText();
Logger.log(response);
}