未配置Google Calendar API v3访问权限

时间:2014-11-17 21:42:36

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

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

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访问密钥( API& auth> Credentials ),并替换了上面的{YOUR_API_KEY}用我的实际钥匙。我确保打开了Calendar API( API& auth> API )。当我在浏览器中粘贴此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 Calendar API已开启,而且肯定是(默认情况下它已启用)。我在这里缺少什么?

5 个答案:

答案 0 :(得分:25)

使用谷歌的日历API让我感到沮丧几个小时,我想记录一些过于完整(超出这个问题的范围)的答案来自少数几个可能遇到困难的人的答案。

首先,如果您像我一样,您可以从日历的设置中获取公开地址:enter image description here

对于我的公开日历,该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&gt; Credentials。在“公开API访问权限”下,点击Create new key&gt; {KEY_TYPE}&gt; Create;在我的情况下,{KEY_TYPE}Browser key,因为我有一个完全的前端应用程序。暂时填写参考资料。这应该会为您创建一个API密钥,您可以将其插入到上面的URL中(其中显示{API_KEY}

第3。添加引用

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

要解决此问题,请点击 API&amp;下的Edit allowed referers - 。 auth&gt;凭据 - 并添加(1)将向API发出请求的域的名称,以及(2)如果您在本地开发http://localhost:{PORT}/*。确保在最后添加通配符。

<强> 4。从允许的域发出HTTP请求

完成所有这些配置后,如果您只是将网址粘贴到浏览器中,您仍会收到错误消息。这是因为请求必须来自您允许的其中一个域。只需从您正在构建的任何应用程序中提出请求。在我的例子中,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.
    }
});

答案 1 :(得分:5)

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

我遇到了与首先描述的sea_monster相同的问题,虽然我插入了一个公共API访问密钥并检查了API是否已打开,但我总是出错:

  

403,AccessNotConfigured,未启用API ...

<强>解决方案

我必须转到Google Developer Console,选择我的项目,点击左侧的“API a Auth”,然后点击“API”并选择Calendar API。虽然它已打开,但我不得不停用API,等待消息并再次打开API。现在我的代码工作了,我没有必要改变它!

答案 2 :(得分:2)

我遇到了同样的问题,我的问题是因为我的项目 Google API

中有不同的名称

enter image description here

此处,Google API中的名称为&#34; 应用示例&#34;

要解决此问题,我将项目中的名称更改为&#34; 应用示例&#34;太

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

答案 3 :(得分:2)

转到API Manager&gt;仪表板&gt;启用API 并搜索或选择:URL Shortener API 然后选择启用按钮。

答案 4 :(得分:-3)

在API资源管理器中测试呼叫时,您还必须激活选项&#34;使用OAuth 2.0授权请求&#34;然后授权正在请求的权限。 在这种情况下,用户(即使是他自己)需要授权访问信息。

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

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

希望这些信息有用。