API календаря Google v3 Доступ не настроен

17

Я пытаюсь получить список событий из общего календаря клиента, используя v3 API Google. Я ввел идентификатор календаря в 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, создал ключ доступа Public API ( API & amp; auth & gt; Credentials ) и заменил {YOUR_API_KEY} выше на мои фактический ключ. Я убедился, что API-интерфейс Calendar включен ( API-интерфейсы и 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."
 }
}

Все ответы, которые я видел, говорят, что вам нужно убедиться, что API Google Calendar включен, и это определенно (также он включен по умолчанию). Что мне здесь не хватает?

    
задан sea_monster 17.11.2014 в 22:42
источник
  • Я только что создал совершенно новый проект в консоли API, нажал на маленький переключатель вкл / выкл, который находится в разделе API, рядом с API календаря, а затем создал новый ключ открытого API-интерфейса для серверного приложения в разделе «Учетные данные» , Впоследствии я зашел в браузер, вставил googleapis.com/calendar/v3/calendars/...; и все это сработало, поэтому на ваших шагах должна быть только небольшая ошибка;) –  luc 19.11.2014 в 23:47
  • Вы когда-нибудь находили решение? я испытываю то же самое –  achi 24.11.2014 в 05:10
  • Мое лучшее предположение заключается в том, что вам нужно сделать вызов API с того же сервера, что и в поле «Referers» на консоли разработчиков (API и Auth> Credentials> Referers). Я сделал звонок с локального сайта, который я установил (я помещаю localhost: 8888 / * в поле Referers), и теперь он возвращает события календаря. –  sea_monster 25.11.2014 в 06:08

5 ответов

25

Использование Google Calendar API разочаровывало меня в течение нескольких часов, и я хочу документировать слишком полный (выходящий за рамки этого вопроса) ответ из нескольких источников для всех, кто может испытывать трудности.

Во-первых, если вы похожи на меня, вы получили общедоступный адрес из настроек вашего календаря:

Для моего общедоступного календаря эта ссылка XML была этого ; но данные были грязными и, я думаю, представляли более старую версию API. После поиска немного, я нашел правильную структуру URL для API v3: https://www.googleapis.com/calendar/v3/calendars/dl9fj86o2ohe7o823s7jar920s%40group.calendar.google.com/events?key={API_KEY} .

Но, как этот вопрос, я получал сообщение об ошибке. Выполните следующие действия:

1. Создать проект

Сделайте это, перейдя в Консоль разработчика Google и нажав Create Project . Я был смущен этим, потому что мое приложение полностью интерфейсное, и я не думал, что мне нужен проект Google Developer. Я был неправ; Мне нужен был проект для выполнения следующих шагов.

2. Создайте ключ API для вашего проекта

После создания проекта щелкните по имени проекта и перейдите к APIs & auth & gt; %код%. В разделе «Открытый доступ к API» нажмите Credentials & gt; Create new key & gt; %код%; в моем случае {KEY_TYPE} было Create , так как у меня есть полностью внешнее приложение. Пропустить заполнение в реферерах пока. Это должно создать ключ API, который вы вставляете в указанный выше URL (где указано {KEY_TYPE} .

3. Добавление ссылок

Если вы сделали это так далеко, вы должны увидеть ошибку, о которой говорил OP. Причина, по которой вы получаете эту ошибку, состоит в том, что, несмотря на то, что календарь открыт, Google разрешает только запросы из указанных доменов. Поэтому я мог бы опубликовать идентификатор моего календаря и даже мой ключ API, а другой разработчик не смог бы получить доступ к моему календарю программно, если бы я не разрешил это.

Чтобы решить эту проблему, нажмите Browser key -under API и amp; auth & gt; Credentials - и добавьте (1) имя домена, который будет отправлять запрос API, и (2), если вы разрабатываете локально {API_KEY} . Убедитесь, что вы добавили подстановочный знак в конце.

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.
    }
});
    
ответ дан gwg 18.01.2015 в 07:08
источник
  • Не могли бы вы указать, где находится «Редактировать разрешенные ссылки»? –  Raphael Oliveira 14.03.2015 в 21:29
  • @RaphaelOliveira, я добавил некоторые подробности. LMK, если вы все еще не можете найти его, и я добавлю скриншот. –  gwg 15.03.2015 в 22:12
3

Вам не нужен OAuth 2.0 для доступа к общедоступному календарю.

У меня была такая же проблема, как и в описании sea_monster, хотя я вставлял открытый ключ доступа к API и проверял, что API включен, у меня всегда была ошибка:

  

403, AccessNotConfigured, API не включен ...

Решение

Мне нужно было пойти в Консоль разработчика Google, выбрать мой проект, щелкнуть слева на «APIs Auth», затем на «API» и выбрать API календаря. Хотя он был включен, мне пришлось отключить API, дождаться сообщений и снова включить API. Теперь мой код работает, и мне не нужно его менять!

    
ответ дан quicknik 13.01.2015 в 21:16
источник
  • На самом деле это решение сработало. –  Shajeel Afzal 26.10.2015 в 21:37
2

Я столкнулся с той же проблемой, и моя проблема состояла в том, что у меня были разные имена в проекте и API Google

Здесь в API Google используется название « Пример приложения "

Чтобы решить проблему, я изменил имя в моем проекте на " Пример приложения " тоже

        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();
        }
    
ответ дан Jorge Casariego 06.07.2016 в 20:19
источник
2

Перейдите в диспетчер API & gt; Панель инструментов & gt; Включить API Ищите или выберите: URL Shortener API Затем нажмите кнопку «Включить».

    
ответ дан MohammadSoori 08.10.2016 в 10:35
источник
-3

Когда вы протестировали вызов в API-интерфейсе API, вам также пришлось активировать опцию «Авторизовать запросы с использованием OAuth 2.0», а затем разрешить запрашиваемые разрешения. В этом случае пользователь (даже если он сам) должен разрешить доступ к информации.

Чтобы приложение могло получить доступ к информации пользователя, необходимо пройти процесс аутентификации с использованием OAuth 2.0. здесь вы можете найти документацию: Ссылка

Вы также можете использовать OAuth Playground ( Ссылка ), чтобы совершать вызовы API (как в API-интерфейсе API), но в этом случае пройдя шаги, необходимые для авторизации, в проводнике API эти шаги выполняются автоматически при включении кнопки «Авторизовать запросы с использованием OAuth 2.0».

Надеемся, что эта информация полезна.

    
ответ дан Gerardo 18.11.2014 в 01:06
источник
  • Я смущен, почему мне нужно использовать OAuth 2.0 для доступа к общедоступному календарю. Посетителю веб-сайта моего клиента не нужно иметь в OAuth свою учетную запись Google, чтобы видеть события, перечисленные на странице, не так ли? –  sea_monster 19.11.2014 в 02:36
  • Правильно, что пользователь веб-сайта не должен авторизоваться с Oauth, если календарь указан на веб-сайте. Однако веб-приложение все равно должно быть разрешено с помощью OAuth, чтобы получить доступ к этой информации с помощью API. Здесь вы можете найти информацию о том, как встраивать календарь на веб-сайт support.google.com/calendar/answer/41207?hl=ru –  Gerardo 19.11.2014 в 17:56