Use pushshift's /meta endpoint to discover ratelimit.
This commit is contained in:
parent
e136aeea4e
commit
5adc0943aa
1 changed files with 16 additions and 1 deletions
|
@ -44,7 +44,7 @@ if not getattr(common.bot, 'CONTACT_INFO', ''):
|
||||||
raise ValueError(contact_info_message)
|
raise ValueError(contact_info_message)
|
||||||
|
|
||||||
useragent = USERAGENT.format(version=common.VERSION, contact=common.bot.CONTACT_INFO)
|
useragent = USERAGENT.format(version=common.VERSION, contact=common.bot.CONTACT_INFO)
|
||||||
ratelimit = ratelimiter.Ratelimiter(allowance=60, period=60)
|
ratelimit = None
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
session.headers.update({'User-Agent': useragent})
|
session.headers.update({'User-Agent': useragent})
|
||||||
|
|
||||||
|
@ -136,7 +136,21 @@ def _pagination_core(url, params, dummy_type, lower=None, upper=None):
|
||||||
prev_batch_ids = batch_ids
|
prev_batch_ids = batch_ids
|
||||||
ratelimit.limit()
|
ratelimit.limit()
|
||||||
|
|
||||||
|
def _initialize_ratelimiter():
|
||||||
|
global ratelimit
|
||||||
|
if ratelimit is not None:
|
||||||
|
return
|
||||||
|
common.log.debug('Initializing pushshift ratelimiter.')
|
||||||
|
url = 'https://api.pushshift.io/meta'
|
||||||
|
response = session.get(url)
|
||||||
|
response.raise_for_status()
|
||||||
|
response = response.json()
|
||||||
|
limit = response['server_ratelimit_per_minute']
|
||||||
|
common.log.debug('Pushshift ratelimit is %d items per minute.', limit)
|
||||||
|
ratelimit = ratelimiter.Ratelimiter(allowance=limit, period=60)
|
||||||
|
|
||||||
def get(url, params=None):
|
def get(url, params=None):
|
||||||
|
_initialize_ratelimiter()
|
||||||
if not url.startswith('https://'):
|
if not url.startswith('https://'):
|
||||||
url = API_URL + url.lstrip('/')
|
url = API_URL + url.lstrip('/')
|
||||||
|
|
||||||
|
@ -147,6 +161,7 @@ def get(url, params=None):
|
||||||
params.setdefault(key, val)
|
params.setdefault(key, val)
|
||||||
|
|
||||||
common.log.debug('Requesting %s with %s', url, params)
|
common.log.debug('Requesting %s with %s', url, params)
|
||||||
|
ratelimit.limit()
|
||||||
response = session.get(url, params=params)
|
response = session.get(url, params=params)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
response = response.json()
|
response = response.json()
|
||||||
|
|
Loading…
Reference in a new issue