我一直在研究Google Calendar API和有关身份验证的文档(http://code.google.com/apis/calendar/v3/using.html#auth).这里提到的用例似乎是编写一个访问用户日历的应用程序.但是,我正在编写一个网页,该网页将访问网站所有者的日历并仅显示该日历的信息.因此,我不希望用户输入他们的Google帐户信息,这是oAuth想要做的事情.
基本上,我正在寻找一种方法来访问单个私有Google日历,并通过将凭据直接传递给服务来对其进行身份验证.
这里有一个类似的问题:如何使用OAuth与Google日历仅访问一个日历? 这似乎表明海报最初是直接传递凭证.此功能是否仍然可用?你如何处理我描述的用例?
使用Google日历API v3,我在Google日历中添加了一个事件.现在我想建立一个html链接,以便有人可以点击并查看日历事件.
这是我尝试过的:
<a href="https://www.google.com/calendar/feeds/default/private/full/{{ event.googleID }}">View Google</a>
href看起来像:
https://www.google.com/calendar/feeds/default/private/full/bigstringhere1ovmuup7mjf0
问题是我得到401错误"需要授权"
如何根据Google日历ID构建查看/编辑日历活动的链接?
我正在尝试编写一个脚本,该脚本将从Google电子表格中获取数据,并在我的Google日历中创建活动.
我管理得很好,但每次运行它都会产生重复.所以现在我试图通过在电子表格中创建一个列17来防止这种情况,每列自动生成唯一的事件ID,然后每次运行脚本时,它将查看每行的事件ID并删除相应的事件如果我已经更改了行,则在使用原始数据或更新的数据重新创建它之前在日历中.
我是新手编写的任何类型的脚本并拼凑在一起,但现在正在撞墙.任何人都可以解决这个问题吗?
function CalInsert() {
var cal = CalendarApp.getDefaultCalendar();
var id = SpreadsheetApp.getActiveSheet().getRange(2,17).getValue();
if (id != 0) {
var event = cal.getEventSeriesById(id);
event.deleteEventSeries();
}
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow(); // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var title = row[0]; // First column
var desc = …Run Code Online (Sandbox Code Playgroud) 我正在对以下URL进行get请求({id}替换为web界面中的id):
https://www.googleapis.com/calendar/v3/calendars/{id}
Run Code Online (Sandbox Code Playgroud)
一些断言:
正在使用有效的访问令牌正确设置Authorize标头(该令牌适用于Analytics API)
我为oauth2设置了以下范围,它正确显示:
https://www.googleapis.com/auth/calendar
Run Code Online (Sandbox Code Playgroud)令牌似乎没有过期; 它适用于Analytics API.
{ "error": { "errors": [ { "domain": "global", "reason": "insufficientPermissions", "message": "Insufficient Permission" } ], "code": 403, "message": "Insufficient Permission" } }
Run Code Online (Sandbox Code Playgroud)我的问题是,我必须制作一个演示应用程序,其中我想阅读Google日历的事件,因为我已经手动插入事件标题,事件时间和整个事件的详细信息.现在我需要从那个日历中读取那些事件.为此,我尝试使用提供日历API类的gcode(谷歌代码)API.但我仍然无法阅读这些事件.
我制作了一个包含很多活动列表的ICS Feed.我的时区似乎不起作用.
在下面的示例中,您会看到我的活动应该从07:55:00开始到09:30:00结束.这是它应该在我的日历中显示的内容.相反,它显示09:55:00和11:30:00 - 两个小时的偏移.时区应设置为Europe/Copenhagen但不会产生任何影响.
谁能告诉我如何才能实现正确的时间?
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Test Calendar
X-WR-TIMEZONE:Europe/Copenhagen
X-WR-CALDESC:Test Calendar
BEGIN:VEVENT
DTSTART:20110926T075500Z
DTEND:20110926T093000Z
DTSTAMP:20111002T133505Z
UID:E9QNQ30EG-5SRB7-QQKL3-2JUUZ-477LBRV4IMSJ78
CREATED:20111002T133505Z
LAST-MODIFIED:20111002T133505Z
LOCATION:B34
SEQUENCE:3
SUMMARY:2abc3c Ma3 CD (B34)
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud) 回调端点托管在Heroku上.appname.herokuapp.com已在Search Console中进行验证,并已添加到Google控制台API和服务允许的域列表中.
请求
POST /calendar/v3/calendars/CALENDAR_ID/events/watch HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer TOKEN
Content-Type: application/json
{
"id":"1",
"type": "web_hook",
"address":"https://APPNAME.herokuapp.com/change"
}
Run Code Online (Sandbox Code Playgroud)
响应
400 Bad Request
{
"error": {
"errors": [
{
"domain": "push",
"reason": "channelUnknown",
"message": "WEB_HOOK channel unavailable for:
{address=https://APPNAME.herokuapp.com/change}"
}
],
"code": 400,
"message": "WEB_HOOK channel unavailable for: {address=https://APPNAME.herokuapp.com/change}"
}
}
Run Code Online (Sandbox Code Playgroud)
什么
WEB_HOOK频道不可用
错误的意思?
编辑:与顶级域名相同的结果,证书的主题与域名完全匹配.
所以我一直在使用REST方法调用Google的API.我需要将事件插入到我拥有ID的特定日历中.这是我发送的POST请求:
地址:https: //www.googleapis.com/calendar/v3/calendars/ {calendarID}/events
身体:
Authorization: Bearer {access_token}
{
"end": {
"dateTime": "2012-08-30T12:30:00",
"timeZone": "America/Chicago"
},
"start": {
"dateTime": "2012-08-30T14:00:00",
"timeZone": "America/Chicago"
},
"summary": "E E 306",
"colorId": "9"
"kind": "calendar#event"
}
Run Code Online (Sandbox Code Playgroud)
这是我不断得到的回应:
{
"error":{
"errors":[
{
"domain":"calendar",
"reason":"timeRangeEmpty",
"message":"The specified time range is empty.",
"locationType":"parameter",
"location":"timeMax"
}
],
"code":400,
"message":"The specified time range is empty."
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白我可能做错了什么.我输入了所有必要的数据,它要求我提供一个事件甚至不存在的参数.我也找不到关于这个特殊问题的任何文件.有没有人看到我失踪的东西?
我正在尝试访问包含国家法定假日的公共日历(来自Google日历):
calendarId: 'pt_br.brazilian#holiday@group.v.calendar.google.com'
Run Code Online (Sandbox Code Playgroud)
由于日历是公开的,我以为我只能使用API密钥访问它:
function OnLoadCallback() {
var config = {
client_id: '32j4lk32j5kj342l5h.googleuser.com', //fake client id
scope: 'https://www.googleapis.com/auth/calendar.readonly'
};
gapi.client.setApiKey('fId345AM20HXXXXXXXXXXXXXXXXgT3f9kyp2REfkaw2'); //fake api key
gapi.client.load('calendar', 'v3', function() {
var today = new Date(),
request;
request = gapi.client.calendar.calendarList.get({
calendarId: 'pt_br.brazilian#holiday@group.v.calendar.google.com',
timeMin: (new Date(today.getFullYear(), today.getMonth(), today.getDay(), 0, 0, 0, 0)).toISOString(),
timeMax: (new Date(today.getFullYear(), today.getMonth(), today.getDay(), 23, 59, 59, 999)).toISOString(),
fields: 'items(creator(displayName,email),end,endTimeUnspecified,start,summary)'
});
request.execute(function(response) {
window.alert('length of items: ' + response.items.length);
});
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直收到以下响应,这是一个401(未授权)错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": …Run Code Online (Sandbox Code Playgroud) 假设我有一个some.account@gmail.com带有项目的Google帐户project-1(在Google Developer Console中配置为Google App Engine应用程序)和一个包含12..@developer.gserviceaccount.com属于它的电子邮件地址的服务帐户.
我知道如何使用此服务帐户创建日历并以编程方式操作其条目:我使用Google API客户端库(Java版本,带有服务帐户凭据)在我的Google App Engine应用程序中调用Google Calendar API只是.但是,任何此类创建的日历似乎都由服务帐户明确拥有,而不是由我的Google帐户使用.我从以下观察中得出结论:
My calendars.Other calendars| 来访问这样的日历 Add a friend´s calendar使用服务帐户的电子邮件地址,我可以发送请求,但它永远不会得到答复(可能是因为服务帐户的电子邮件地址不是"真实的"电子邮件地址).CalendarListEntry#hidden,因此应该应用默认值false.所以我的问题是:如何在普通的Google Calendar Web UI中访问使用Google Calendar API(以及我的案例中的Java客户端)以编程方式创建的日历和日历条目.例如,服务帐户可以与其拥有的Google帐户共享其日历,还是可以使用UI中的服务帐户凭据直接操作Google帐户的日历.
我意识到在同一主题上有一些先前的问题,但到目前为止它们并没有帮助我解开这个谜团.
google-app-engine google-calendar-api google-account service-accounts
google-api ×5
oauth-2.0 ×2
android ×1
calendar ×1
curl ×1
google-oauth ×1
heroku ×1
icalendar ×1
java ×1
javascript ×1
oauth ×1
offset ×1
timezone ×1