Мы используем Google Shortener в наших проектах, похоже, у Google есть два ограничения:
В 11:00 у нас есть задание cron, которое запускает код и сокращает около 15000 URL-адресов,
Вчера мы использовали только один ключ, но сегодня мы добавляем 6 ключей, чтобы обойти это ограничение, и каждую минуту используем один из них со следующим кодом
$googleAPIKeys = [
'KEY1CODE',
'KEY2CODE',
'KEY3CODE',
'KEY4CODE',
'KEY5CODE',
'KEY6CODE'
];
$roundRobinKey = date('i') % count($googleAPIKeys);
try {
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?key=' . $googleAPIKeys[$roundRobinKey], [
'json' => [
'longUrl' => $url
]
]);
} catch (ClientException $e) {
return $url;
}
$result = json_decode($req->getBody()->getContents());
Но все же столкнулся с 403 (ограничения превышают)

кажется странным, почему это происходит? Каковы истинные ограничения службы сокращения строк Google?как я могу обойти это ограничение?
Другое примечание: в сценарии с одним ключом, если вы превысите ограничение (100 на 100 секунд), если вы попытаетесь использовать этот ключ снова через 5 минут, все еще столкнетесь с 403 проблемой превышения ограничений !!! похоже ограничения гугла не такие как они сказали !!!
Обновлять
После прочтения Стандартные параметры запроса и Ограничение использования API Я изменил свой запрос на следующий
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?quotaUser=' . $userID . '&key=' . $myKey, [
'json' => [
'longUrl' => $url
]
]);
Какой userID является уникальным идентификатором пользователя для каждого запроса (потому что мы генерируем каждый URL-адрес для каждого пользователя). но все равно сталкиваюсь с 403 !!!
Любая идея?
Для протокола я не голосовал против, но спасибо за вотум доверия






Лимит будет зависеть от проекта и пользователя. однако он также может быть основан на IP.
обходные пути
Обратите внимание, что время, на которое вы заблокированы, должно составлять около часа.
quotaUser Alternative to userIp. Lets you enforce per-user quotas from a server-side application even in cases when the user's IP address is unknown. This can occur, for example, with applications that run cron jobs on App Engine on a user's behalf. You can choose any arbitrary string that uniquely identifies a user, but it is limited to 40 characters. Overrides userIp if both are provided. Learn more about Capping API usage.
Вы добавляете его как дополнительный параметр в свой запрос
quotaUser=xxxx
спасибо за внимание, как я могу отправить идентификатор пользователя в качестве параметра на конечную точку?
проверьте обновление, у меня было неправильное имя, кстати, это не всегда работает, они могут видеть, что вы отправляете img с того же IP-адреса
случайная строка, которую вы хотите использовать для идентификации пользователя. это не даст вам неограниченного количества, они все еще могут видеть, что он исходит с того же IP, но это должно помочь
Я попробую и сообщу о результате. Мне не нужен безлимитный доступ, просто нужно 20 000 запросов за один указанный час в день.
Я пробовал, но, к сожалению, у меня это не сработало, и после 4000 запросов 4000 уникальных userId столкнулись с 403 :(
Я обновил свой вопрос, вы знаете, почему это происходит?
это происходит из-за того, что вы отправляете запрос с того же IP-адреса, что и защита от флуда. вам нужно поделиться API с другими. замедлите ваши звонки, нет возможности увеличить эту квоту.
@DaImTo есть ли способ увеличить лимит до более чем 100 запросов за 100 секунд?
Нет, эту цитату нельзя продлить
@DaImTo вы можете увидеть в документации, используя quotaUser, сделайте его unquie IP. > quotaUser Произвольная строка, однозначно идентифицирующая пользователя. Позволяет применять квоты для каждого пользователя из серверного приложения даже в тех случаях, когда IP-адрес пользователя неизвестен. Это может происходить, например, с приложениями, которые запускают задания cron в App Engine от имени пользователя. Вы можете выбрать любую произвольную строку, которая однозначно идентифицирует пользователя, но она ограничена 40 символами.
Google знает IP-адрес, с которого исходит запрос. Вы можете отправить случайное значение quotaUser, если хотите. Это немного помогает, но в конечном итоге Google выясняет, что вы делаете, и вы все равно получите квоту на основе IP-адреса машины, выполняющей запрос.
@DaImTo мои пользователи уникальны, я имею в виду, что для каждого запроса я отправляю уникальный идентификатор пользователя как quotaUser
Да, должно работать, но только с ограничениями. Не ожидайте получения 100 запросов в секунду на пользователя, выполняющего задание cron за одним и тем же IP-адресом. Квота на запрос пользователя работает лучше всего, когда запрос выполняет другой компьютер.
@DaImTo, он должен работать, но не работает, в developers.google.com/analytics/devguides/reporting/core/v4/… ничего не упоминается об IP и unqiue IP, есть ли у вас предложения? мы пока боремся с этой проблемой.
Я предлагаю отказаться и принять ограничение. Я создал настраиваемую задачу SSIS, которая обращалась к API Google Analytics. Я пробовал все больше года, чтобы заставить его работать быстрее и не достичь этой квоты. Притормози и попробуйте еще раз. Это было лучшее, что я когда-либо придумал daimto.com/google-apis-flood-buster
@DaImTo, к сожалению, мы используем PHP, а PHP - отстой в многопоточности, и мы не можем заблокировать спящий поток на 1 секунду. как вы знаете, Google собирается закрыть службу goo.gl (заменить ее на FDL) к следующему году, и мы собираемся внедрить нашу службу сокращения в июне, нам просто нужно временное решение для снижения наших расходов на sms .. спасибо за внимание и время.
@DaIm: Конечно, я ищу способ затронуть Google, который принимает запрос с quotaUser в качестве уникального пользователя, я добавлю его к вашему ответу и, если не смогу найти, я приму ваш ответ в обоих условиях; - ). спасибо за время.
их api, вероятно, достаточно умен, чтобы понимать, что все запросы поступают из одного источника