Какие причины "Сервер API Google Maps отклонил ваш запрос. Внутренняя ошибка была найдена для этого проекта API".?

Это использует API статических карт.

У меня есть веб-страница с 3 тегами img, каждый из которых является вызовом API статических карт (NB, конечно, это не настоящий ключ API).

Эти 3 тега идентичны, за исключением увеличения, которое составляет 10, 13 и 16 для трех изображений.

Ключ API взят из проекта, в котором включен API статических карт, настроен и включен биллинг.

Я отправил около 60 запросов (это совершенно новый проект разработки, так что я только начинаю).

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

403 "Сервер API Карт Google отклонил ваш запрос. Внутренняя ошибка была обнаружена для этого проекта API."

Поэтому, если я обновлю страницу 5 раз, то есть 15 запросов, я получу около 4 сбоев и 11 успехов.

Так почему же Google Maps случайно отклоняет некоторые запросы с этим 403?

Ответ 1

Вы уверены, что ваш ключ API верен?

Из https://developers.google.com/maps/documentation/staticmaps/#Limits:

API Google Статических Карт имеет следующие пределы использования:

  • Без ключа API:

    1000 запросов статических карт на каждый IP-адрес за 24-часовой период. 50 запросов статических карт на каждый IP-адрес в минуту. Это означает, что если у вас есть одна страница, содержащая более 50 карт, страница будет превышать этот предел.

Дополнительные запросы изображения могут быть приобретены на основе каждого приложения по курсу, указанному в FAQ. Дополнительная квота приобретается через API-консоль и требует использования ключа API.

Если пользователь превышает эти ограничения, сервер вернет статус HTTP 403 и отобразит нижеприведенное изображение, чтобы указать, что превышена квота:

403 screenshot

Кажется, что 50 карт в минуту могут объяснить ваши случайные ошибки 403.

Если это не проблема, я бы подал заявку на поддержку поддержки Google Geo, так как она обозначалась как "внутренняя ошибка".

Ответ 2

Итак, если я обновляю страницу 5 раз, т.е. 15 запросов, я получаю около 4 неудач и 11 успехов.

Я думаю, что ваши запросы превысят предел за короткое время. Я не уверен, как вы показываете карту, но я рекомендую вам последовательно загружать карту.

Пример: использование JavaScript с https://github.com/caolan/async

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html,body {
        height: 100%;
        margin: 0;
        padding: 0
      }
    </style>
    <script type="text/javascript" src="async.js"></script>
    <script type="text/javascript">
      function loadImg(params, callback) {
        var url = "http://maps.googleapis.com/maps/api/staticmap?" + 
                   params + "&zoom=1&size=100x100" +
                   "&sensor=false&key={YOUR_KEY_IS_HERE}";
        var img = new Image();
        img.src = url;
        img.onload = function() {
          document.body.appendChild(img);
          callback();
        };
        img.onerror = function() {
          callback(url);
        }
      }

      function loadMaps() {
        var urlList = [
          "markers=label:0|LosAngles",
          "markers=label:1|NewYork",
          "markers=label:2|SanFrancisco",
          "markers=label:3|Frorida",
          "markers=label:4|Arizona",
          "markers=label:5|Ohaio",
          "markers=label:6|Hawai",
          "markers=label:7|Texus",
          "markers=label:8|Seattle",
          "markers=label:9|Florida",
          "markers=label:A|kansas",
          "markers=label:B|utah",
          "markers=label:C|iowa",
          "markers=label:D|oregon",
          "markers=label:E|alaska",
          "markers=label:F|Washington D.C"
        ];

        async.eachSeries(urlList, loadImg, function(err) {
          if (err) {
            console.log("error", err);
          } else {
            console.log("all image are loaded");
          }
        });
      }
    </script>
  </head>
  <body onload="loadMaps()">
  </body>
</html>

enter image description here