From 2196bdf3e81cb10c17905ebf8f5464d70df8758d Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Fri, 13 Jan 2023 04:09:00 +0000 Subject: [PATCH] Extract vibe --- snscrape/modules/twitter.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/snscrape/modules/twitter.py b/snscrape/modules/twitter.py index c3e78f7..1d99068 100644 --- a/snscrape/modules/twitter.py +++ b/snscrape/modules/twitter.py @@ -85,6 +85,7 @@ class Tweet(snscrape.base.Item): cashtags: typing.Optional[typing.List[str]] = None card: typing.Optional['Card'] = None viewCount: typing.Optional[int] = None + vibe: typing.Optional['Vibe'] = None username = snscrape.base._DeprecatedProperty('username', lambda self: self.user.username, 'user.username') outlinks = snscrape.base._DeprecatedProperty('outlinks', lambda self: [x.url for x in self.links] if self.links else [], 'links (url attribute)') @@ -451,6 +452,13 @@ class UnifiedCardSwipeableLayoutSlide: componentKey: UnifiedCardComponentKey +@dataclasses.dataclass +class Vibe: + text: str + imageUrl: str + imageDescription: str + + @dataclasses.dataclass class TweetRef(snscrape.base.Item): '''A reference to a tweet for which no proper Tweet object could be produced from the data returned by Twitter''' @@ -1299,6 +1307,13 @@ class _TwitterAPIScraper(snscrape.base.Scraper): _logger.warning(f'Unsupported card type on tweet {tweetId}: {cardName!r}') + def _make_vibe(self, vibe): + return Vibe( + text = vibe['text'], + imageUrl = vibe['imgUrl'], + imageDescription = vibe['imgDescription'], + ) + def _tweet_to_tweet(self, tweet, obj): user = self._user_to_user(obj['globalObjects']['users'][tweet['user_id_str']]) kwargs = {} @@ -1310,6 +1325,8 @@ class _TwitterAPIScraper(snscrape.base.Scraper): kwargs['card'] = self._make_card(tweet['card'], _TwitterAPIType.V2, self._get_tweet_id(tweet)) if 'ext_views' in tweet and 'count' in tweet['ext_views']: kwargs['viewCount'] = int(tweet['ext_views']['count']) + if 'vibe' in tweet.get('ext', {}): + kwargs['vibe'] = self._make_vibe(tweet['ext']['vibe']['r']['ok']) return self._make_tweet(tweet, user, **kwargs) def _graphql_timeline_tweet_item_result_to_tweet(self, result): @@ -1342,6 +1359,8 @@ class _TwitterAPIScraper(snscrape.base.Scraper): kwargs['card'] = self._make_card(result['card'], _TwitterAPIType.GRAPHQL, self._get_tweet_id(tweet)) if 'views' in result and 'count' in result['views']: kwargs['viewCount'] = int(result['views']['count']) + if 'vibe' in result: + kwargs['vibe'] = self._make_vibe(result['vibe']) return self._make_tweet(tweet, user, **kwargs) def _graphql_timeline_instructions_to_tweets(self, instructions, includeConversationThreads = False):