【问题标题】:Google Calendar API v3 Access Not Configured未配置 Google Calendar API v3 访问
【发布时间】:2014-11-17 21:42:36
【问题描述】:

我正在尝试使用 v3 的 Google API 从客户的公共日历中获取事件列表。我在API Explorer 中输入了日历 ID,我得到了肯定的结果:

https://www.googleapis.com/calendar/v3/calendars/rpsj44u6koirtq5hehkt21qs6k%40group.calendar.google.com/events?key={YOUR_API_KEY}`

=> [List of events here, as expected]

为了创建 API 密钥,我在 Google Developer Console 中创建了一个项目,创建了一个公共 API 访问密钥(APIs & auth > Credentials),并将上面的 {YOUR_API_KEY} 替换为我的实际密钥.我确保日历 API 已打开(APIs & auth > APIs)。当我将此 URL 粘贴到浏览器中时,我收到以下错误响应:

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured. The API is not enabled for your project, or there is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your configuration.",
    "extendedHelp": "https://console.developers.google.com"
   }
  ],
  "code": 403,
  "message": "Access Not Configured. The API is not enabled for your project, or there is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your configuration."
 }
}

我看到的所有回复都说您需要确保 Google 日历 API 已打开,而且肯定是打开的(此外,默认情况下已打开)。我在这里错过了什么?

【问题讨论】:

  • 我刚刚在 API 控制台中创建了一个全新的项目,单击日历 API 旁边 API 部分中的小开关,然后为服务器创建了一个新的公共 API 访问密钥凭据部分中的应用程序。然后我进入浏览器,粘贴googleapis.com/calendar/v3/calendars/…>,一切正常,所以你的步骤中一定只有一个小错误;)
  • 您找到解决方案了吗?我正在经历同样的事情
  • 我最好的猜测是,您需要从您在开发者控制台(APIs & Auth > Credentials > Referers)中输入“Referers”字段的同一服务器进行 API 调用。我从我设置的本地站点打了一个电话(我将 localhost:8888/* 放在了引用字段中),它现在正在返回日历事件。

标签: api calendar google-api google-calendar-api


【解决方案1】:

使用 Google 的日历 API 让我沮丧了几个小时,我想从几个来源记录一个过于完整(超出此问题范围)的答案,以供其他可能遇到困难的人使用。

首先,如果你和我一样,你可以从日历设置中获得公共地址:

对于我的公共日历,那个 XML 链接是 this;但是数据很混乱,而且我认为代表的是旧版本的 API。经过一番搜索,我找到了 v3 API 的正确 URL 结构:https://www.googleapis.com/calendar/v3/calendars/dl9fj86o2ohe7o823s7jar920s%40group.calendar.google.com/events?key={API_KEY}

但是就像这个问题一样,我遇到了一个错误。执行以下操作:

1.创建项目

通过转到Google Developer Console 并单击Create Project 来执行此操作。我对此感到困惑,因为我的应用程序完全是前端,而且我认为我不需要 Google Developer 项目。我错了;我需要一个项目来执行后续步骤。

2。为您的项目创建 API 密钥

创建项目后,单击项目名称并导航至APIs & auth > Credentials。在“公共API访问”下,点击Create new key > {KEY_TYPE} > Create;在我的情况下,{KEY_TYPE}Browser key,因为我有一个完全前端的应用程序。现在跳过填写推荐人。这应该会为您创建一个 API 密钥,您可以将其插入到上面的 URL 中(上面写着 {API_KEY}

3。添加推荐人

如果您已经做到了这一点,您应该会看到 OP 所说的错误。您收到此错误的原因是即使日历是公开的,Google 也只允许来自指定域的请求。因此,我可以发布我的日历 ID 甚至我的 API 密钥,如果没有我的允许,其他开发人员将无法以编程方式访问我的日历。

要解决此问题,请单击 APIs & auth > Credentials 下的 Edit allowed referers,然后添加 (1) 将向 API 发出请求的域的名称,以及 (2) 如果你正在本地开发http://localhost:{PORT}/*。确保在末尾添加通配符。

4.从允许的域发出 HTTP 请求

完成所有这些配置后,如果您只是将 URL 粘贴到浏览器中,您仍然会收到错误消息。这是因为请求必须来自您刚刚允许的域之一。只需从您正在构建的任何应用程序中发出请求。在我的例子中,JavaScript (jQuery) 看起来像这样:

$.ajax({
    type: 'GET',
    url: {MY_URL},
    success: function(data) {
        // Throw a debugger statement in here,
        // and you should be able to inspect your data.
    }
});

【讨论】:

  • @RaphaelOliveira,我添加了一些细节。 LMK,如果你还是找不到,我会添加截图。
【解决方案2】:

您无需 OAuth 2.0 即可访问公共日历。

我遇到了与最初描述的 sea_monster 相同的问题,虽然我插入了一个公共 API 访问密钥并检查了 API 是否已打开,但我总是收到一条错误消息:

403,AccessNotConfigured,API 未启用...

解决方案

我必须去谷歌开发者控制台,选择我的项目,点击左边的“APIs an Auth”,然后点击“APIs”并选择日历API。虽然它已打开,但我不得不停用 API,等待消息并再次打开 API。现在我的代码可以工作了,我不必更改它!

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我的问题是因为我在 projectGoogle APIs

    中有不同的名称

    这里 Google API 中的名称是“App Example

    为了解决这个问题,我将项目中的名称也更改为“App Example

            public MakeRequestTask(GoogleAccountCredential credential) {
                HttpTransport transport = AndroidHttp.newCompatibleTransport();
                JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
                mService = new com.google.api.services.calendar.Calendar.Builder(
                        transport, jsonFactory, credential)
                        .setApplicationName("App Example")
                        .build();
            }
    

    【讨论】:

      【解决方案4】:

      转到 API 管理器 > 仪表板 > 启用 API 并搜索或选择: URL Shortener API 然后选择启用按钮。

      【讨论】:

        【解决方案5】:

        当您在 API Explorer 中测试调用时,您还必须激活“使用 OAuth 2.0 授权请求”选项,然后授权所请求的权限。 在这种情况下,用户(即使是您自己)需要授权访问信息。

        为了让应用程序访问用户的信息,必须使用 OAuth 2.0 进行身份验证过程。 在这里你可以找到文档:https://developers.google.com/accounts/docs/OAuth2

        您还可以使用 OAuth Playground (https://developers.google.com/oauthplayground/) 进行 API 调用(如在 API 资源管理器中),但在这种情况下,需要执行授权所需的步骤,在 API 资源管理器中,这些步骤会在开启时自动完成“使用 OAuth 2.0 授权请求”按钮。

        希望这些信息有用。

        【讨论】:

        • 我很困惑为什么我需要使用 OAuth 2.0 才能访问公共日历。我客户网站的访问者不必使用她的 Google 帐户进行 OAuth 即可查看页面上列出的事件,对吧?
        • 没错,如果网站上列出了日历,则网站用户不必获得 Oauth 授权。但是,Web 应用程序仍需要通过 OAuth 授权才能使用 API 访问该信息。在这里您可以找到有关如何在网站中嵌入日历的信息support.google.com/calendar/answer/41207?hl=en
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多