从Sling API JSON Post获取代码500

时间:2018-06-01 20:15:26

标签: javascript json http google-apps-script

所以似乎Sling(sling.is)更新了their API,但从未发送过包含警告或信息的电子邮件,因此我的脚本已损坏。我的代码的最终目标(在更新之前工作正常)是在公司活动获得批准后,简单地将员工轮班发布到Sling。

我在谷歌应用脚​​本中运行所有这些代码,因为我需要从电子表格中提取数据来创建轮班。代码首先工作"添加"转移到系统,然后第二次"发布"这些转变让所有员工都能看到他们。我设法弄清楚如何修复第一部分,因为它似乎切换了一些基本的语法。但我不能为我的生活弄清楚如何解决第二个(出版)部分。

Sling没有为他们的API提供任何支持,所以我认为在这里张贴将是我的下一个最佳选择。

这是我收到的错误:

  

" https://api.sling.is/v1/shifts/sync返回的代码请求失败   500.截断的服务器响应:{" message":"糟糕,发生意外错误。"}(使用muteHttpExceptions选项检查完整响应)   (第257行,文件"代码")"

//CREATE SHIFTS ON SLING
     //This is pulling data from google spreadsheet cells
  var staff = getByName('Attendants', row);
  var start = Utilities.formatDate(getByName('Date', row), 
ss.getSpreadsheetTimeZone(), "YYYY-MM-dd") + "T" + 
Utilities.formatDate(getByName('Starting Time of Attendants', row), 
ss.getSpreadsheetTimeZone(), "H:mm") + ":00.000-04";
  var end = Utilities.formatDate(getByName('Date', row), 
ss.getSpreadsheetTimeZone(), "YYYY-MM-dd") + "T" + 
Utilities.formatDate(getByName('Ending Time of Attendants', row), 
ss.getSpreadsheetTimeZone(), "H:mm") + ":00.000-04";
  var notes = getByName('City', row) + ", " + getByName('Event Type', row)

  var payload = {
  "available": true,
  "dtstart": start,  
  "dtend": end,
  "location": {
    "id": 1022310
  },
  "position": {
    "id": 1022302
  },
  "summary": notes,
  "user": {
    "id": 1
  }
  };

  var headers = {
   "Authorization" : "9e632842f4e61927336337f1aa65b75c"
  };

  var options = {

  'method' : 'post',                  
  'contentType': 'application/json', 
  'headers' : headers,
  'payload' : JSON.stringify(payload)


};
  for(i=1; i<=staff; i++){
  UrlFetchApp.fetch("https://api.sling.is/v1/shifts? 
ignoreConflicts=false&publish=true", options);
  }
// All of that ^^ works               

  var payloadtwo = 
    {
      "summary": notes
  };          


  var optionstwo = {

  'method' : 'post',                  
  'contentType': 'application/json', 
  'headers' : headers,
  'payload' : JSON.stringify(payloadtwo)


  };

  UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);

我甚至尝试从JSON选项中完全删除了payload(body)参数。

  var payloadtwo = { 
  "summary": notes, 
  "dtstart": "2018-11-07T12:00:00:00.000-04", 
  "dtend": "2018-11-09T12:00:00:00.000-04" 
  };        


var optionstwo = {

'method' : 'post',                  
'contentType': 'application/json', 
'headers' : headers


};

UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);

然后它说

  

&#34; https://api.sling.is/v1/shifts/sync返回的代码400请求失败。   截断的服务器响应:   {&#34; message&#34;:&#34;发布需要日期范围或列表   事件&#34;}(使用muteHttpExceptions选项检查完整响应)   (第256行,文件&#34;代码&#34;)&#34;

Sling API&#34;&#34;文档&#34;有关班次过帐功能,请访问:https://api.sling.is/#/shifts/post_shifts_sync

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在你问题的the API document中,似乎请求正文是一个包含数组的对象。似乎关键是event。那么请你试试这个修改过的脚本吗?运行时,请设置notesheaders

修改后的脚本:

var payloadtwo = {
  "event": [ // or "Event"
    {
      "summary": notes,
      "dtstart": "2018-11-07T12:00:00:00.000-04",
      "dtend": "2018-11-09T12:00:00:00.000-04",
    }
  ]
};
var optionstwo = {
  'method': 'post',
  'contentType': 'application/json',
  'payload': JSON.stringify(payloadtwo),
  'headers': headers,
  'muteHttpExceptions': true,
};
var res = UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);
Logger.log(res)

注意:

  • 如果发生错误,请从'payload': JSON.stringify(payloadtwo),修改为'payload': payloadtwo,并再次运行。

我无法尝试测试,因为我没有帐号。因此,如果此脚本出现错误,请告诉我。我想考虑其他修改点。

编辑1:

修改后的脚本:

var payloadtwo = [
  {
    "summary": notes,
    "dtstart": "2018-11-07T12:00:00:00.000-04",
    "dtend": "2018-11-09T12:00:00:00.000-04",
  }
];
var optionstwo = {
  'method': 'post',
  'contentType': 'application/json',
  'payload': JSON.stringify(payloadtwo), // or payloadtwo
  'headers': headers,
  'muteHttpExceptions': true,
};
var res = UrlFetchApp.fetch("https://api.sling.is/v1/shifts/sync", optionstwo);
Logger.log(res)