From 1c550fdc51d16ec15c39edb346c28d5f07a2a425 Mon Sep 17 00:00:00 2001 From: schneefux Date: Sat, 25 Feb 2017 13:43:39 +0100 Subject: add VAINSOCIAL_APIKEY env variable --- crawler.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'crawler.py') diff --git a/crawler.py b/crawler.py index 7ceda92..b68ec22 100644 --- a/crawler.py +++ b/crawler.py @@ -4,15 +4,14 @@ import asyncio import logging import aiohttp -TOKEN = "aaa.bbb.ccc" APIURL = "https://api.dc01.gamelockerapp.com/" class Crawler(object): - def __init__(self): + def __init__(self, token): """Sets constants.""" self._apiurl = APIURL - self._token = TOKEN + self._token = token self._pagelimit = 50 async def _req(self, session, path, params=None): -- cgit v1.3.1 From e1b0c99706fc7c0d1b95f4e047b9ac37539a59cb Mon Sep 17 00:00:00 2001 From: schneefux Date: Sat, 25 Feb 2017 13:44:19 +0100 Subject: respect rate limits --- api.py | 4 ++-- crawler.py | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'crawler.py') 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 -- cgit v1.3.1 From fa0258a4ef2a0d4c4b06be5f3de8fbb9d6f3df87 Mon Sep 17 00:00:00 2001 From: schneefux Date: Sat, 25 Feb 2017 13:44:33 +0100 Subject: use gzip for API requests --- crawler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crawler.py') diff --git a/crawler.py b/crawler.py index b188a86..0146586 100644 --- a/crawler.py +++ b/crawler.py @@ -30,7 +30,7 @@ class Crawler(object): "Authorization": "Bearer " + self._token, "X-TITLE-ID": "semc-vainglory", "Accept": "application/vnd.api+json", - "Content-Encoding": "gzip" + "Accept-Encoding": "gzip" } try: while True: -- cgit v1.3.1