带有专用google日历事件的FullCalendar

带有专用google日历事件的FullCalendar,fullcalendar,google-calendar-api,Fullcalendar,Google Calendar Api,我目前在我的网站上使用谷歌日历,你可以插入iframe。我测试了Fullcalendar,我喜欢你能用它做什么 但是我想和嵌入日历一样,我希望能够创建私有事件(而不是日历,事件)。日历的共享设置是公共的,但使用chrome时,您可以使用您的google帐户登录,使用嵌入日历可以查看私人事件(如果您有权访问日历) 这可以用Fullcalendar实现吗 Fullcalendar仅为前端解决方案。登录google帐户和任何其他身份验证都不是其中的一部分 也就是说,它是可以的,但前提是它是一个公共的谷

我目前在我的网站上使用谷歌日历,你可以插入iframe。我测试了Fullcalendar,我喜欢你能用它做什么

但是我想和嵌入日历一样,我希望能够创建私有事件(而不是日历,事件)。日历的共享设置是公共的,但使用chrome时,您可以使用您的google帐户登录,使用嵌入日历可以查看私人事件(如果您有权访问日历)


这可以用Fullcalendar实现吗

Fullcalendar仅为前端解决方案。登录google帐户和任何其他身份验证都不是其中的一部分

也就是说,它是可以的,但前提是它是一个公共的谷歌日历。如果你想把它连接到一个私有的谷歌日历上,你必须内置这个功能


如果您可以使用JS获取gcal事件并处理身份验证,那么将它们放入FullCalendar就很容易了。但第一部分需要几个步骤。请查看谷歌日历api文档以获取说明

我知道如何通过OAUTH进行连接,并在身份验证后获取私有事件

通过点击一个按钮,你们可以连接到一个谷歌帐户(若已经在浏览器中连接,并没有按钮会出现,你们将自动登录)

我跟着


var clientId='';
var-apiKey='';
var作用域https://www.googleapis.com/auth/calendar';
函数handleClientLoad(){
gapi.client.setApiKey(apiKey);
setTimeout(checkAuth,1);
}
函数checkAuth(){
auth.authorize({client_id:clientId,scope:scopes,immediate:true},handleAuthResult);
}
函数handleAuthResult(authResult){
var authorizeButton=document.getElementById('authorized-button');
if(authResult&!authResult.error){
authorizeButton.style.visibility='hidden';
makeApiCall();
}否则{
authorizeButton.style.visibility='';
authorizeButton.onclick=handleAuthClick;
GeneratePublicCalendar();
}
}
函数handleAuthClick(事件){
auth.authorize({client_id:clientId,scope:scopes,immediate:false},handleAuthResult);
返回false;
}
//加载API并进行API调用。在屏幕上显示结果。
函数makeApiCall(){
//步骤4:加载Google+API
load('calendar','v3')。然后(function(){
//步骤5:组装API请求
var请求=gapi.client.calendar.events.list({
“日历ID”:”
});
//步骤6:执行API请求
请求。然后(功能(resp){
var eventsList=[];
var-successArgs;
var成功;
如果(响应结果错误){
reportError('Google日历API:'+data.error.message,data.error.errors);
}
其他如果(分别结果项){
$。每个(分别为结果项、功能(i、条目){
var url=entry.htmlink;
//使每个事件的URL在正确的时区显示时间
//如果(时区搜索){
//url=injectQsComponent(url,'ctz='+timezoneArg);
//}
事件列表推送({
id:entry.id,
标题:entry.summary,
开始:entry.start.dateTime | | entry.start.date,//try timed。将返回到整天
结束:entry.end.dateTime | | entry.end.date,//相同
url:url,
地点:entry.location,
description:entry.description
});
});
//调用成功处理程序并允许它返回新的事件数组
successArgs=[eventsList].concat(Array.prototype.slice.call(arguments,1));//转发其他jq参数
successRes=$.fullCalendar.applyAll(true、this、successArgs);
如果($.isArray(successRes)){
返回成功者;
}
}
如果(eventsList.length>0)
{
//在此处创建日历,但事件选项为:
//fullcalendar.events:eventsList(仍在寻找一种方法,可以删除当前事件并填充这些新闻事件,而无需重新创建日历)。
}
返回事件列表;
},功能(原因){
console.log('错误:'+原因.结果.错误.消息);
});
});
}
函数GeneratePublicCalendar(){
//当用户未登录时,您需要一个带有googleApi的普通fullcalendar
$(“#日历”).fullCalendar({
GoogleKey:“”,
...
});  
}

是的,我制作了一个Fullcalendar,它很简单,也很好。但是我要找的是对gcal.js进行修改,以处理身份验证,并尽可能收集私有事件。如果您的事件是私有的,并且您的可调度性很忙,则Fullcalendar将该事件作为未定义的事件加载。我想更改此未定义的事件如果您已登录。@AlexandreBizeau根据您的经验,您可以只使用日历的私人提要。但是,我不知道在进行此操作时身份验证是如何工作的。可能尝试私人提要,但如果失败,请让其回退。如果不起作用,请告诉我,我可能会删除我的答案,因为它有点没有抓住要点。您的答案是错误的不错。它指出了一个事实,即fullcalendar是真正的前端,我知道这一点。但我想知道如何处理身份验证并像嵌入式一样获得日历访问权限。