0

我正在尝试使用 Google 脚本在 Clockify 中启动计时器。该脚本没有给出错误(例如 400 Bad Request),但没有启动任何计时器。

API 文档位于https://clockify.me/developers-api#operation--v1-workspaces--workspaceId--time-entries-post

function StartClockifyTimer() {
// Starts a timer based on the current sheet
// Step 1: Find PID
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var FileNo = sheet.getSheetName();
  var PIDheaders = {"X-Api-Key" : "[apikey]", "content-type" : "application/json"};
  //var PIDpayload = JSON.stringify({'name' : FileNo});
  var PIDoptions = {
  'muteHttpExceptions' : true,
  'method' : 'get',
  'headers' : PIDheaders,
  //'params' : PIDpayload
  };
  var PID = UrlFetchApp.getRequest('https://api.clockify.me/api/v1/workspaces/[wid]/projects/', PIDoptions);
  for(i in PID) {
  Logger.log(i + ": " + PID[i]);
}
//Step 2: Use PID to start timer
  timezone = "GMT+" + new Date().getTimezoneOffset()/60;
  var date = Utilities.formatDate(new Date(), timezone, "yyyy-MM-dd'T'HH:mm:ss'Z'");
  var headers = {"X-Api-Key" : "[apikey]", "content-type" : "application/json"};
  var payload = JSON.stringify({'start' : date, 'projectId' : PID});
  var clockifyoptions = {
  'muteHttpExceptions' : true,
  'method' : 'post',
  'headers' : headers,
  'payload' : payload
  };
  var r = UrlFetchApp.fetch('https://api.clockify.me/api/v1/workspaces/[wid]/time-entries/', clockifyoptions);
  Logger.log(r);
}

--EDIT-- 自发布以来,由于收到的建议,我在流程中添加了一个新步骤,以按名称查找 PID。但是,我无法使 GET 请求正常工作。我需要按照https://clockify.me/developers-api#operation--v1-workspaces--workspaceId--projects-get中所述通过 FileNo 查询“名称” ,但我无法获取 GET 请求. 即使上面带有注释部分的代码也会返回:

[19-08-01 11:37:46:024 MDT] getAs: function getAs() {/* */}

[19-08-01 11:37:46:025 MDT] getHeaders: function getHeaders() {/* */}

[19-08-01 11:37:46:025 MDT] getContentText:函数 getContentText() {/* */}

[19-08-01 11:37:46:026 MDT] getContent: function getContent() {/* */}

[19-08-01 11:37:46:026 MDT] getResponseCode: function getResponseCode() {/* */}

[19-08-01 11:37:46:027 MDT] getAllHeaders: function getAllHeaders() {/* */}

[19-08-01 11:37:46:027 MDT] toString: 函数 toString() {/* */}

[19-08-01 11:37:46:028 MDT] getBlob: function getBlob() {/* */}

我已经确认在第 2 步中使用硬编码的 ProjectID 是可行的,所以我需要帮助实际上是第 1 步 - 查找 PID。谁能帮我格式化 GET 请求?

万分感谢。

4

2 回答 2

1

你可以尝试几件事来看看出了什么问题:

(1) 更换

UrlFetchApp.fetch('https://api.clockify.me/api/v1/workspaces/[workspaceredacted]/time-entries/', clockifyoptions);
Logger.log(clockifyoptions);

有了这个

var r = UrlFetchApp.fetch('https://api.clockify.me/api/v1/workspaces/[workspaceredacted]/time-entries/', clockifyoptions);
Logger.log(r);

这样,日志将向您显示来自 API 的响应,您可以使用它进行调试。

(2)projectId有效载荷中的可能是错误的。

假设projectID是活动工作表的名称,请尝试替换

  var FileNo = ss.getSheetName();

  var FileNo = sheet.getSheetName();
于 2019-08-01T16:01:30.133 回答
0

知道了。将代码留给其他尝试使用 Clockify 的 API 的人。

function StartClockifyTimer() {
// Starts a timer based on the current sheet
// Step 1: Find PID
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var FileNo = sheet.getSheetName();
  var url = 'https://api.clockify.me/api/v1/workspaces/[workspaceid]/projects?name='+FileNo
  const header = {
    "headers": {
      "X-Api-Key" : "[apikey]",
      "content-type" : "application/json",
      "Accept" : "*/*"
      }
  };
  var response = UrlFetchApp.fetch(url, header)
  var json = response.getContentText();
  var data = JSON.parse(json);
  var PID = data[0]["id"];
  Logger.log(PID);

//Step 2: Use PID to start timer
  timezone = "GMT+" + new Date().getTimezoneOffset();
  var date = Utilities.formatDate(new Date(), timezone, "yyyy-MM-dd'T'HH:mm:ss'Z'");
  var headers = {"X-Api-Key" : "[apikey]", "content-type" : "application/json"};
  var payload = JSON.stringify({'start' : date, 'projectId' : PID});
  var clockifyoptions = {
  'muteHttpExceptions' : true,
  'method' : 'post',
  'headers' : headers,
  'payload' : payload
  };
  UrlFetchApp.fetch('https://api.clockify.me/api/v1/workspaces/[workspaceid]/time-entries/', clockifyoptions);
}
于 2019-08-01T18:18:29.300 回答