From 78c307780b9c79ec86f3b49da4fcdb2cdf3f2680 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Thu, 27 Jun 2019 00:34:36 +0200 Subject: [PATCH] Clean up a few utility functions --- fbchat/_graphql.py | 2 +- fbchat/_util.py | 29 +++++++++++------------------ 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/fbchat/_graphql.py b/fbchat/_graphql.py index 72ba3c1..508d914 100644 --- a/fbchat/_graphql.py +++ b/fbchat/_graphql.py @@ -38,7 +38,7 @@ def graphql_queries_to_json(*queries): def graphql_response_to_json(content): - content = _util.strip_to_json(content) # Usually only needed in some error cases + content = _util.strip_json_cruft(content) # Usually only needed in some error cases try: j = json.loads(content, cls=ConcatJSONDecoder) except Exception: diff --git a/fbchat/_util.py b/fbchat/_util.py index 47c8e41..b672082 100644 --- a/fbchat/_util.py +++ b/fbchat/_util.py @@ -47,14 +47,12 @@ USER_AGENTS = [ ] -facebookEncoding = "UTF-8" - - def now(): return int(time() * 1000) -def strip_to_json(text): +def strip_json_cruft(text): + """Removes `for(;;);` (and other cruft) that preceeds JSON responses.""" try: return text[text.index("{") :] except ValueError: @@ -66,15 +64,14 @@ def get_decoded_r(r): def get_decoded(content): - return content.decode(facebookEncoding) + return content.decode("utf-8") def parse_json(content): - return json.loads(content) - - -def get_json(r): - return json.loads(strip_to_json(get_decoded_r(r))) + try: + return json.loads(content) + except ValueError: + raise FBchatFacebookError("Error while parsing JSON: {!r}".format(content)) def digitToChar(digit): @@ -155,11 +152,8 @@ def check_request(r, as_json=True): raise FBchatFacebookError("Error when sending request: Got empty response") if as_json: - content = strip_to_json(content) - try: - j = json.loads(content) - except ValueError: - raise FBchatFacebookError("Error while parsing JSON: {!r}".format(content)) + content = strip_json_cruft(content) + j = parse_json(content) check_json(j) log.debug(j) return j @@ -173,9 +167,8 @@ def get_jsmods_require(j, index): return j["jsmods"]["require"][0][index][0] except (KeyError, IndexError) as e: log.warning( - "Error when getting jsmods_require: {}. Facebook might have changed protocol".format( - j - ) + "Error when getting jsmods_require: " + "{}. Facebook might have changed protocol".format(j) ) return None