summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.py4
-rw-r--r--crawler.py21
2 files changed, 18 insertions, 7 deletions
diff --git a/api.py b/api.py
index 89573ce..45eb5ba 100644
--- a/api.py
+++ b/api.py
@@ -256,7 +256,7 @@ class Apigrabber(object):
for region in self.regions:
await self.request_update(region)
- for _ in range(5):
+ for _ in range(1):
# supports scaling :]
asyncio.ensure_future(self.crawl_region(region))
@@ -288,4 +288,4 @@ logging.basicConfig(level=logging.DEBUG)
loop = asyncio.get_event_loop()
loop.run_until_complete(startup())
loop.run_forever()
- \ No newline at end of file
+
diff --git a/crawler.py b/crawler.py
index b68ec22..b188a86 100644
--- a/crawler.py
+++ b/crawler.py
@@ -33,11 +33,18 @@ class Crawler(object):
"Content-Encoding": "gzip"
}
try:
- async with session.get(self._apiurl + path, headers=headers,
- params=params) as response:
- assert response.status == 200
- return await response.json()
- except (aiohttp.errors.ClientResponseError, RuntimeError):
+ while True:
+ async with session.get(self._apiurl + path, headers=headers,
+ params=params) as response:
+ if response.status == 429:
+ logging.warning("hit by rate limit, retrying")
+ await asyncio.sleep(10)
+ continue
+ assert response.status == 200
+ return await response.json()
+ except (aiohttp.errors.ClientResponseError,
+ RuntimeError,
+ aiohttp.errors.ContentEncodingError):
logging.warning("error connecting to API, retrying")
return await self._req(session, path, params)
@@ -81,6 +88,10 @@ class Crawler(object):
data += res["data"] + res["included"]
+ if len(res["data"]) < 50:
+ # asked for 50, got less -> exhausted
+ break
+
if not forever:
break # stop after one iteration