Премиальные запросы к API Foursquare завершаются с ошибкой 429 и ошибкой quota_exceeded - PullRequest
0 голосов
/ 11 июня 2018

У меня проблема с выполнением "премиальных" запросов к API Foursquare.Есть приложение, которое уже некоторое время выполняет запросы, но перестало это делать несколько дней назад.

Вот как это выглядит на примере места (из проводника API):

In [47]: requests.get('https://api.foursquare.com/v2/venues/49eeaf08f964a52078681fe3', params={'client_id': settings.FOURSQUARE_CLIENT_ID, 'client_secret': settings.FOURSQUARE_CLIENT_SECRET, 'v': '20180611'})
2018-06-11 14:37:03,221:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.foursquare.com
2018-06-11 14:37:03,616:DEBUG:urllib3.connectionpool:https://api.foursquare.com:443 "GET /v2/venues/49eeaf08f964a52078681fe3?client_secret=<SNIP>&client_id=<SNIP>&v=20180611 HTTP/1.1" 429 134
Out[47]: <Response [429]>

In [49]: dict(_47.headers)
Out[49]: 
{'Accept-Ranges': 'bytes',
 'Access-Control-Allow-Origin': '*',
 'Connection': 'keep-alive',
 'Content-Length': '134',
 'Content-Type': 'application/json; charset=utf-8',
 'Date': 'Mon, 11 Jun 2018 14:37:03 GMT',
 'Server': 'nginx',
 'Tracer-Time': '1',
 'Via': '1.1 varnish',
 'X-Cache': 'MISS',
 'X-Cache-Hits': '0',
 'X-RateLimit-Limit': '0',
 'X-RateLimit-Path': '/v2/venues/X',
 'X-RateLimit-Remaining': '0',
 'X-Served-By': 'cache-hhn1536-HHN'}

In [50]: _47.json()
Out[50]: 
{u'meta': {u'code': 429,
  u'errorDetail': u'Quota exceeded',
  u'errorType': u'quota_exceeded',
  u'requestId': u'5b1e890f6a60717ee10bf7cd'},
 u'response': {}}

Ответ явно связан с ограничениями скорости, но он не соответствует описанию, приведенному в https://foursquare.com/dev/overview/ratelimits или https://developer.foursquare.com/docs/api/troubleshooting/rate-limits. Что еще более важно, он показывает 'X-RateLimit-Limit': '0', предполагая, что либо нет предела, либоэто полностью запрещено.

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

Пользовательский доступ с токеном, скопированным из API Explorer, неожиданно работает (но отображаеттот же 'X-RateLimit-Limit': '0', что и в случае неудачного ответа выше):

In [56]: requests.get('https://api.foursquare.com/v2/venues/49eeaf08f964a52078681fe3', params={'oauth_token': sample_oauth_token, 'v': '20180611'})
2018-06-11 14:35:00,417:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.foursquare.com
2018-06-11 14:35:01,066:DEBUG:urllib3.connectionpool:https://api.foursquare.com:443 "GET /v2/venues/49eeaf08f964a52078681fe3?oauth_token=<SNIP>&v=20180611 HTTP/1.1" 200 None
Out[56]: <Response [200]>

In [57]: dict(_57.headers)
Out[57]: 
{'Accept-Ranges': 'bytes',
 'Access-Control-Allow-Origin': '*',
 'Connection': 'keep-alive',
 'Content-Encoding': 'gzip',
 'Content-Type': 'application/json; charset=utf-8',
 'Date': 'Mon, 11 Jun 2018 14:35:01 GMT',
 'Server': 'nginx',
 'Strict-Transport-Security': 'max-age=31536000',
 'Tracer-Time': '257',
 'Transfer-Encoding': 'chunked',
 'Vary': 'Accept-Encoding,User-Agent,Accept-Language',
 'Via': '1.1 varnish',
 'X-Cache': 'MISS',
 'X-Cache-Hits': '0',
 'X-Rate-Limit-Key': '77.49.114.206',
 'X-RateLimit-Limit': '0',
 'X-RateLimit-Path': '/v2/venues/X',
 'X-RateLimit-Remaining': '0',
 'X-Served-By': 'cache-hhn1530-HHN',
 'X-ex': 'fastly_cdn'}

Наконец, запросы без премиум работают с нашими учетными данными приложения без проблем:

In [59]: requests.get('https://api.foursquare.com/v2/venues/49eeaf08f964a52078681fe3/similar', params={'client_id': settings.FOURSQUARE_CLIENT_ID, 'client_secret': settings.FOURSQUARE_CLIENT_SECRET, 'v': '20180611'})
2018-06-11 14:50:33,378:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.foursquare.com
2018-06-11 14:50:33,790:DEBUG:urllib3.connectionpool:https://api.foursquare.com:443 "GET /v2/venues/49eeaf08f964a52078681fe3/similar?client_secret=<SNIP>&client_id=<SNIP>&v=20180611 HTTP/1.1" 200 None
Out[59]: <Response [200]>

In [60]: dict(_59.headers)
Out[60]: 
{'Accept-Ranges': 'bytes',
 'Access-Control-Allow-Origin': '*',
 'Connection': 'keep-alive',
 'Content-Encoding': 'gzip',
 'Content-Type': 'application/json; charset=utf-8',
 'Date': 'Mon, 11 Jun 2018 14:50:33 GMT',
 'Server': 'nginx',
 'Strict-Transport-Security': 'max-age=31536000',
 'Tracer-Time': '18',
 'Transfer-Encoding': 'chunked',
 'Vary': 'Accept-Encoding,User-Agent,Accept-Language',
 'Via': '1.1 varnish',
 'X-Cache': 'MISS',
 'X-Cache-Hits': '0',
 'X-Rate-Limit-Key': '77.49.114.206',
 'X-RateLimit-Limit': '10000',
 'X-RateLimit-Path': '/v2/venues/X/similar',
 'X-RateLimit-Remaining': '9993',
 'X-Served-By': 'cache-hhn1529-HHN',
 'X-ex': 'fastly_cdn'}

Любая идея, что такоепроблема квоты / ограничения скорости и как ее исправить?

...