class RateLimitedClient:
def __init__(self, api_key, requests_per_hour=1000):
self.api_key = api_key
self.requests_per_hour = requests_per_hour
self.request_times = []
def _wait_if_needed(self):
now = time.time()
hour_ago = now - 3600
# Remove old requests
self.request_times = [t for t in self.request_times if t > hour_ago]
# Check if at limit
if len(self.request_times) >= self.requests_per_hour:
sleep_time = self.request_times[0] + 3600 - now
if sleep_time > 0:
time.sleep(sleep_time)
def request(self, method, url, **kwargs):
self._wait_if_needed()
self.request_times.append(time.time())
return requests.request(method, url, **kwargs)