def new_tweet_from_json(self, data): """ Converts a json string to a tweet instance. Args: data: json string containing twitter data Returns: twitter.models.status instance """ tweet = Status.NewFromJsonDict(data) if 'urls' in data: tweet.urls = [Url.NewFromJsonDict(u) for u in data['urls']] else: tweet.urls = [] if 'user_mentions' in data: tweet.user_mentions = [ User.NewFromJsonDict(u) for u in data['user_mentions'] ] else: tweet.user_mentions = [] if 'hashtags' in data: tweet.hashtags = [ Hashtag.NewFromJsonDict(h) for h in data['hashtags'] ] else: tweet.hashtags = [] return tweet
def convert_dicts_in_status_to_obj(status: Status) -> Status: """Update each attribute of status with Twitter object""" keys_to_update = ["urls", "user", "user_mentions", "quoted_status"] for key in keys_to_update: if key == "urls": status.urls = [Url(**url) for url in status.__getattribute__(key)] elif key == "user": status.user = User(**status.__getattribute__(key)) elif key == "user_mentions": status.user_mentions = [ User(**user) for user in status.__getattribute__(key) ] elif key == "quoted_status": status.quoted_status = (convert_dicts_in_status_to_obj( status=Status(**status.__getattribute__(key))) if status.__getattribute__(key) else None) return status
def NewFromJsonDict(data): """Create a new instance based on a JSON dict. Args: data: A JSON dict, as converted from the JSON in the twitter API Returns: A twitter.Status instance """ if 'user' in data: from twitter import User # Have to do the import here to prevent cyclic imports in the __init__.py # file user = User.NewFromJsonDict(data['user']) else: user = None if 'retweeted_status' in data: retweeted_status = Status.NewFromJsonDict(data['retweeted_status']) else: retweeted_status = None if 'current_user_retweet' in data: current_user_retweet = data['current_user_retweet']['id'] else: current_user_retweet = None urls = None user_mentions = None hashtags = None media = None if 'entities' in data: if 'urls' in data['entities']: urls = [ Url.NewFromJsonDict(u) for u in data['entities']['urls'] ] if 'user_mentions' in data['entities']: from twitter import User user_mentions = [ User.NewFromJsonDict(u) for u in data['entities']['user_mentions'] ] if 'hashtags' in data['entities']: hashtags = [ Hashtag.NewFromJsonDict(h) for h in data['entities']['hashtags'] ] if 'media' in data['entities']: media = data['entities']['media'] else: media = [] # the new extended entities if 'extended_entities' in data: if 'media' in data['extended_entities']: media = [m for m in data['extended_entities']['media']] return Status( created_at=data.get('created_at', None), favorited=data.get('favorited', None), favorite_count=data.get('favorite_count', None), id=data.get('id', None), text=data.get('text', None), location=data.get('location', None), lang=data.get('lang', None), in_reply_to_screen_name=data.get('in_reply_to_screen_name', None), in_reply_to_user_id=data.get('in_reply_to_user_id', None), in_reply_to_status_id=data.get('in_reply_to_status_id', None), truncated=data.get('truncated', None), retweeted=data.get('retweeted', None), source=data.get('source', None), user=user, urls=urls, user_mentions=user_mentions, hashtags=hashtags, media=media, geo=data.get('geo', None), place=data.get('place', None), coordinates=data.get('coordinates', None), contributors=data.get('contributors', None), retweeted_status=retweeted_status, current_user_retweet=current_user_retweet, retweet_count=data.get('retweet_count', None), possibly_sensitive=data.get('possibly_sensitive', None), scopes=data.get('scopes', None), withheld_copyright=data.get('withheld_copyright', None), withheld_in_countries=data.get('withheld_in_countries', None), withheld_scope=data.get('withheld_scope', None))