From b7cb270b6e52abd7f31a3162b478f1b8fca5f595 Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Sun, 15 Jan 2023 12:31:28 +0000 Subject: [PATCH] Fix crash on empty user objects --- snscrape/modules/twitter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/snscrape/modules/twitter.py b/snscrape/modules/twitter.py index 1c41b07..56a49d7 100644 --- a/snscrape/modules/twitter.py +++ b/snscrape/modules/twitter.py @@ -1022,6 +1022,9 @@ class _TwitterAPIScraper(snscrape.base.Scraper): userRefs[userId] = self._user_to_user(o) elif apiType is _TwitterAPIType.GRAPHQL: for o in card['legacy'].get('user_refs_results', []): + if 'result' not in o: + _logger.warning(f'Empty user ref object in card on tweet {tweetId}') + continue o = o['result'] if o['__typename'] == 'UserUnavailable': _logger.warning(f'Unavailable user in card on tweet {tweetId}') @@ -1579,7 +1582,8 @@ class TwitterUserScraper(TwitterSearchScraper): endpoint = 'https://twitter.com/i/api/graphql/I5nvpI91ljifos1Y3Lltyg/UserByRestId' variables = {fieldName: str(self._user), 'withSafetyModeUserFields': True, 'withSuperFollowsUserFields': True} obj = self._get_api_data(endpoint, _TwitterAPIType.GRAPHQL, params = {'variables': variables}) - if not obj['data'] or obj['data']['user']['result']['__typename'] == 'UserUnavailable': + if not obj['data'] or 'result' not in obj['data']['user'] or obj['data']['user']['result']['__typename'] == 'UserUnavailable': + _logger.warning('Empty response or unavailable user') return None user = obj['data']['user']['result'] rawDescription = user['legacy']['description']