【问题标题】:Extract Pingdom API data using GAS to google spreadsheet使用 GAS 提取 Pingdom API 数据到谷歌电子表格
【发布时间】:2025-12-21 08:35:09
【问题描述】:

我已经使用 GAS 从 Pingdom 提取了 API 数据,但是我能够提取的唯一数据是......

TestID   |  TestName |  ResponseTime | Status
1299405     Google         243          up
1299434     Yahoo          342          up
1299499     Bling          299          up

通过使用这个脚本..

function pingdom() {

var headers = 
{  
    "Accept": "application/json",
    "Authorization": "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "App-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "Account-Email": "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
 var options = 
{ 
    "headers" : headers, 
    "method" : "get"
}

var response = UrlFetchApp.fetch("https://api.pingdom.com/api/2.0/checks", options); 
var response_json = JSON.parse(response.getContentText()); 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1");


var rows = [], data; 

for (i = 0; i < response_json.checks["length"]; i++) { 
    data = response_json.checks[i]; 
    rows.push([data.id, data.name, data.lastresponsetime, data.status]); 
}

//Set column headings 
var colHeaders = [[ "Test ID", "Test Name", "Response Time", "Status"]]; 
dataRange = sheet.getRange(1, 1, 1, 4); 
dataRange.setValues(colHeaders) ;

//Display data 
dataRange = sheet.getRange(2, 1, rows.length, 4); 
dataRange.setValues(rows);
}

现在我正在尝试提取更多数据,例如“平均响应时间和正常运行时间”,不幸的是 Pingdom API 只允许我提取单个 testID 的数据(TestID 将在 API URL https://api.pingdom.com/api/2.0/summary.performance/1299405?includeuptime=true 中给出)

通过使用这个谷歌脚本...

function uptime() {
var headers = 
{  
    "Accept": "application/json",
    "Authorization": "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "App-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "Account-Email": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
 var options = 
{ 
    "headers" : headers, 
    "method" : "get"
}

 var rows = [] , sum = {};
 var response = UrlFetchApp.fetch("https://api.pingdom.com/api/2.0/summary.performance/1299405?includeuptime=true", options); 
 var response_json = JSON.parse(response.getContentText()); 
 //var sum = response_json.summary.states;
 for (i = 0; i < response_json.summary.hours.length; i++) 
 {
   sum = response_json.summary.hours[i] ;
 rows.push([sum["avgresponse"],sum["uptime"]]);
 break;
 }
 var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 var sheet = ss.getSheetByName("Sheet2");
 dataRange = sheet.getRange(1, 1, 1, 2); 

  //Set column headings 
var colHeaders = [[ "avg","uptime"]]; 
dataRange.setValues(colHeaders) ;

//Display data 
dataRange = sheet.getRange(2, 1, rows.length, 2); 
dataRange.setValues(rows);


}

我尝试从 sheet1 中提取 TestID 并创建一个循环,以便获得 sheet1 中所有 testID 的“平均响应时间和正常运行时间”。

data_id = response_json.checks[i]; 
     //for ( i = response_json.checks.id; i++){
        var response1 = UrlFetchApp.fetch("https://api.pingdom.com/api/2.0/summary.performance/" + data_id.id, options);

但不幸的是,我无法提取任何数据。如果有人可以帮助我实现这一目标,那将非常有帮助。

(这里是 Pingdom API 文档 - https://www.pingdom.com/resources/api

【问题讨论】:

    标签: api google-apps-script google-sheets google-spreadsheet-api


    【解决方案1】:

    您可以通过创建一个检查数组并循环遍历它们来做到这一点。我的工作表经常使用这个 ID,所以我所做的就是创建一个包含我所有支票的工作表,然后我可以在任何地方使用它。所以我的 checkID 表如下所示:

    CheckName                  | CheckID
    someendpoint.com/api         456213
    someotherendpoint.com/api    456213
    

    ...等

    然后您可以创建一个函数并从工作表中获取这些值。这是一个如何从工作表中获取它并将其放入数组的示例:

    var datetimeArr = new Array(); 
    var ids =  new Array();
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s2 = ss.getSheetByName('checkID');
    var names = s2.getRange('a1:a').getValues();
    var ids = s2.getRange('b1:b').getValues();
    

    【讨论】: