当前位置: 首页 > 知识库问答 >
问题:

使用Google API访问公共日历,无需用户登录

谭富
2023-03-14

我想使用谷歌的REST API访问公共日历。

Google的日历API建议我需要OAuth令牌才能访问日历:

https://developers.google.com/google-apps/calendar/auth

然而,我正在访问一个公共日历,并且正在服务器上执行此操作,因此不能/不应该要求用户进行身份验证。

我使用node.jsapi:

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);
      });
  });

这将返回“您的客户端发出了一个格式错误或非法的请求。这是我们所知道的全部信息。”

正在呼叫。在.calendals之后使用ApiKey('***')。get()返回相同的错误。

有什么建议吗?

共有2个答案

唐俊英
2023-03-14

正如留档不止一次声明的那样

所有对Google Calendar API的请求都必须由经过身份验证的用户授权。

因此,如果您想使用google日历API,您需要一个经过身份验证的用户。这可以使用Passport.js和Passport-google-oauth等模块轻松实现。

但是,如果您可以暂时抛开API并

  • 日历是公开的
  • 您想要只读访问权限

你可以通过ical、xml或html轻松抓取公共地址和消费日历。看看英国假日公共日历:http://imgur.com/UGjPtqp

您可以从以下位置公开访问数据:

  • xmlhttps://www.google.com/calendar/feeds/en.uk#holiday@group.v.calendar.google.com /public/basic
  • icalhttps://www.google.com/calendar/ical/en.uk#holiday@group.v.calendar.google.com /public/basic.ics
  • htmlhttps://www.google.com/calendar/embed?src=en.uk#holiday@group.v.calendar.google.com

此时,使用节点获取这些资源并获得所需的数据是很简单的。

陈寒
2023-03-14

哦,来吧,伙计们!您可以在没有 OAuth 的情况下获取数据,而无需用户登录,只要日历设置为公共!我自己测试过。

$.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

 类似资料:
  • 我正在阅读以前Office 365共享日历的问题 使用Oauth进行身份验证的用户现在可以访问共享日历了吗? 基本上,我尝试使用“OAuth2客户端凭据流”来实现一个服务,但是我希望只有当日历与使用rest api调用的特定用户共享时才能访问该日历:https://outlook.office365.com/api/v1.0/Users/"电子邮件id/calendar groups/" "其他日

  • 我正在创建一个Node JS(Express)web应用程序,一旦用户登录,它将显示用户的Google日历事件。 将有多个用户,名称和电子邮件地址等数据存储在数据库中。 用户登录后,如何在不需要任何其他用户输入的情况下检索与用户关联的Google日历事件? 我在这里实现了Google的快速入门示例https://developers.google.com/google-apps/calendar/

  • 我想访问日历RestAPI。我已经创建了azure多租户应用程序,并对其进行了配置。 我尝试获取对资源“https://outlook.office365.com/”的访问令牌,但出现错误 “AADSTS50001:资源'https://outlook.office365.com/'已禁用。 注意:我在azure帐户的“其他应用程序的权限”部分中找不到“Office 365 Exchange On

  • 我们正在尝试使用EWS管理的应用编程接口集成办公365。我们使用办公365管理中心创建了一个具有模拟角色的服务号。现在,我们如何使用该服务号访问应用程序中其他用户的数据(如邮件、联系人、日历)?谢谢,罗希特

  • 如何知道使用Exchange EWS API共享了哪个日历。

  • 我从https://github . com/microsoftgraph/NodeJS-apponlytoken-rest-sample下载了NodeJS代码,并授予了所需的所有权限(在所有邮箱中读写日历,在Microsoft Graph应用程序权限中读取目录数据应用程序权限)。 我可以成功获取添加到Azure AD的所有用户,但我无法获取他们的任何日历信息或创建事件(这是示例中的原始代码)。我