使用Google API访问公共日历,无需用户login
我想使用Google的REST API访问公共日历。
Google的日历APIbuild议我需要一个OAuth令牌来访问日历:
https://developers.google.com/google-apps/calendar/auth
但是,我正在访问公共日历,并从服务器这样做,所以不能/不应该要求用户进行身份validation。
我正在使用node.js API:
googleapis .discover('calendar', 'v3').execute(function(err, client) { client.calendar.calendars.get({ calendarId: '***@group.calendar.google.com' }) .execute(function (err, response) { console.log('response from google', response); }); });
这返回“您的客户已经发出了一个格式不正确或非法的请求,这就是我们所知道的。
.withApiKey('***')
之后调用.withApiKey('***')
.calendars.get()
返回相同的错误。
有什么build议么?
由于文档状态不止一次
所有对Google日历API的请求都必须由经过身份validation的用户授权。
因此,如果您想使用Google日历API,则需要经过身份validation的用户。 这可以通过使用Passport.js和Passport-google-oauth等模块轻松实现。
但是,如果您可以暂时搁置这个API一会儿
- 日历是公开的
- 你想只读访问
您可以轻松获取公共地址,并通过ical,xml或html使用日历。 看看英国的假期公共日历: http : //imgur.com/UGjPtqp
您可以从以下公开访问数据:
- xml https://www.google.com/calendar/feeds/en.uk%23holiday%40group.v.calendar.google.com/public/basic
- ical https://www.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics
- html https://www.google.com/calendar/embed?src=en.uk%23holiday%40group.v.calendar.google.com&ctz=Europe/London
此时,通过节点获取这些资源并获取所需的数据是微不足道的。
哦,来吧,伙计! 只要日历设置为公共,您就可以在没有OAuth的情况下获取数据,而不需要用户login! 我已经testing过了。
$.ajax({ url:"https://www.googleapis.com/calendar/v3/calendars/" + cal_id + "/events?key=" + api_key, success: function(data) { console.log(data); } });
去尝试一下。
文档位于https://developers.google.com/google-apps/calendar/v3/reference/events/list#examples
Google需要拥有经过身份validation的用户,但由于这是公共日历,您不应该要求用户进行身份validation。 这是服务器端,所以使用自己的authentication(或创build一个谷歌用户只是为此),作为一个身份validation的用户,你将有权访问该日历,而不要求真正的用户进行身份validation…