在Javascript中使用Google calendar API插入方法创建新日历会返回错误400 "Mis
Creating a new calendar using the Google Calendar API insert method in Javascript returns error 400 "Missing title"
我正在尝试使用Javascript在我的Google帐户中创建一个新的日历(通过Google Apps Script编辑器)。
首先,为了确保我的Oauth2与日历API一起工作,我发出一个GET请求来获取我的主日历:
var email = 'me@mydomain.com';
var fetchArgs = {};
fetchArgs.headers = {'Authorization': 'Bearer '+ calendarOauth2Service.getAccessToken() };
fetchArgs.method = 'GET';
fetchArgs.muteHttpExceptions = true;
var url = 'https://www.googleapis.com/calendar/v3/calendars/' + email;
var response = UrlFetchApp.fetch(url, fetchArgs);
请求成功并返回此响应:
{
"kind": "calendar#calendar",
"etag": "'"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'"",
"id": "me@mydomain.com",
"summary": "me@mydomain.com",
"timeZone": "America/New_York"
}
现在我想使用insert方法将日历添加到我的帐户:
var calendarResource = {
"summary": "test calendar title"
};
var fetchArgs = {};
fetchArgs.headers = {'Authorization': 'Bearer '+ calendarOauth2Service.getAccessToken() };
fetchArgs.method = "POST";
fetchArgs.data = calendarResource;
fetchArgs.muteHttpExceptions = true;
var url = 'https://www.googleapis.com/calendar/v3/calendars';
var response = UrlFetchApp.fetch(url, fetchArgs);
未创建日历,响应如下:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Missing title."
}
],
"code": 400,
"message": "Missing title."
}
}
我已经在这个问题上连续工作了将近20个小时了(一点也不夸张),但我还是搞不懂。我尝试了以下方法:
- 将
fetchArgs.data = calendarResource;
更改为fetchArgs.body = calendarResource;
-
fetchArgs.data = calendarResource;
变为fetchArgs.resource = calendarResource;
- 更改
fetchArgs.data = calendarResource;
为fetchArgs.payload = calendarResource;
- 更改
fetchArgs.data = calendarResource;
为fetchArgs.summary = calendarResource;
- 更改
fetchArgs.data = calendarResource;
为fetchArgs.title = calendarResource;
- 将
fetchArgs.data = calendarResource;
移动到fetchArgs.header
对象 - 将
fetchArgs.method = "POST";
移动到fetchArgs.header
对象 - 将
fetchArgs.contentType = 'application/json;
添加到fetchArgs
对象和fetchArgs.header
对象 - 还有很多其他的事情,现在想不起来了
SO上没有那么多与此相关的问题。这些是我一直在尝试的东西:
Google Calendar REST API错误
谷歌日历。插入API返回400 'required'
这是我最初的问题,我试图在我的谷歌应用程序域上为另一个日历做这件事,但由于我无法做到这一点,我决定创建这个问题,以从等式中删除域范围内的委托问题,只是专注于API调用。
另外,还有一件事值得一提:我能够使用Google Calendar API Calendar: insert documentation页面上的API Explorer成功创建日历。
它告诉我请求是这样的:
POST https://www.googleapis.com/calendar/v3/calendars
{
"summary": "test calendar title"
}
结果是这样的:
200 OK
- HIDE HEADERS -
cache-control: no-cache, no-store, max-age=0, must-revalidate
content-encoding: gzip
content-length: 193
content-type: application/json; charset=UTF-8
date: Sat, 22 Aug 2015 14:34:05 GMT
etag: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
expires: Fri, 01 Jan 1990 00:00:00 GMT
pragma: no-cache
server: GSE
vary: Origin, X-Origin
{
"kind": "calendar#calendar",
"etag": "'"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'"",
"id": "mydomain.com_xxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com",
"summary": "test calendar title"
}
任何想法?
根据luc的回答更新工作代码:
资源需要被字符串化(Google Apps Script调试器显示它是一个对象,而不是字符串)。
var calendarResource = {
"summary": "test calendar title"
};
var fetchArgs = {};
fetchArgs.headers = {'Authorization': 'Bearer '+ calendarOauth2Service.getAccessToken() };
fetchArgs.method = "POST";
fetchArgs.payload = JSON.stringify(calendarResource);
fetchArgs.muteHttpExceptions = true;
var url = 'https://www.googleapis.com/calendar/v3/calendars';
var response = UrlFetchApp.fetch(url, fetchArgs);
首先,我怀疑您应该设置有效负载,而不是数据。其次,传入的对象不会被解释为JSON,除非你告诉它(JSON.stringify(calendarResource))。
对于在浏览器环境中使用JavaScript的用户:
调试时,您应该尝试打印最终发送的请求(或通过开发人员工具在浏览器中查看),并将其与资源管理器中的请求进行比较。
使用JavaScript客户端库也可以省去一些麻烦。你看过这个教程吗?https://developers.google.com/google-apps/calendar/quickstart/js
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- JavaScript打印功能使日历停止工作
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- 谷歌日历 api 调用可以在角度工厂内返回承诺吗?
- 为什么此 Google 日历 API 请求不返回开始时间等事件数据
- Google 日历 API 在尝试获取我的所有日历事件时返回 404
- Google 日历 API 将日期、时间和事件名称返回给 Javascript
- 谷歌日历.插入API返回400'必需'
- 使用Google日历API返回401(未经授权)
- 插入一个事件与nodejs谷歌日历API返回400:"缺失的结束时间"
- 我想从数据库加载事件日历,返回值失去效果和日期不显示
- 谷歌日历返回一个无效的json文件
- 在Javascript中使用Google calendar API插入方法创建新日历会返回错误400 "Mis
- 加载时的Html日历没有't返回着陆月份的日期值
- 谷歌日历API返回错误401 '登录要求'关于在公共日历中插入事件