From 7ca49b0adba402326fe03edc449b04ee033674bb Mon Sep 17 00:00:00 2001 From: Jonathan Leroy Date: Sun, 1 Sep 2024 00:30:33 +0200 Subject: [PATCH] Fixes error getting user ID when using cookies identification --- twitter/account.py | 5 ++++- twitter/scraper.py | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/twitter/account.py b/twitter/account.py index cf3cf51..71d5441 100644 --- a/twitter/account.py +++ b/twitter/account.py @@ -829,7 +829,10 @@ def fleetline(self, params: dict = None) -> dict: @property def id(self) -> int: """ Get User ID """ - return int(re.findall('"u=(\d+)"', self.session.cookies.get('twid'))[0]) + twid = self.session.cookies.get('twid') + if not twid: + raise Exception(f'[{RED}error{RESET}] No "twid" cookie found') + return int(re.findall(r'u%3D(\d+)' if self.session._init_with_cookies else r'"u=(\d+)"', twid)[0]) def save_cookies(self, fname: str = None): """ Save cookies to file """ diff --git a/twitter/scraper.py b/twitter/scraper.py index f35fa0f..24b4362 100644 --- a/twitter/scraper.py +++ b/twitter/scraper.py @@ -864,10 +864,13 @@ def _validate_session(self, *args, **kwargs): # validate credentials if all((email, username, password)): - return login(email, username, password, **kwargs) + session = login(email, username, password, **kwargs) + session._init_with_cookies = False + return session # invalid credentials, try validating session if session and all(session.cookies.get(c) for c in {'ct0', 'auth_token'}): + session._init_with_cookies = True return session # invalid credentials and session @@ -876,12 +879,14 @@ def _validate_session(self, *args, **kwargs): # try validating cookies dict if isinstance(cookies, dict) and all(cookies.get(c) for c in {'ct0', 'auth_token'}): _session = Client(cookies=cookies, follow_redirects=True) + _session._init_with_cookies = True _session.headers.update(get_headers(_session)) return _session # try validating cookies from file if isinstance(cookies, str): _session = Client(cookies=orjson.loads(Path(cookies).read_bytes()), follow_redirects=True) + _session._init_with_cookies = True _session.headers.update(get_headers(_session)) return _session @@ -894,7 +899,10 @@ def _validate_session(self, *args, **kwargs): @property def id(self) -> int: """ Get User ID """ - return int(re.findall('"u=(\d+)"', self.session.cookies.get('twid'))[0]) + twid = self.session.cookies.get('twid') + if not twid: + raise Exception(f'[{RED}error{RESET}] No "twid" cookie found') + return int(re.findall(r'u%3D(\d+)' if self.session._init_with_cookies else r'"u=(\d+)"', twid)[0]) def save_cookies(self, fname: str = None): """ Save cookies to file """