understanding tweepy's status object
Question:
I’ve been working with tweepy streaming API
and I have noticed one thing. The response of a status
object is not pure JSON
it has some additional information also. Here’s my question:
If I need the text content of a tweet, I have to do status.text
which is inside the _json dictionary/ json object. But, if I need the the media, or the full text for example, I have to do status.entities['media'][0]['media_url_https']
or status.extended_tweet['full_text']
, although both entities
and extended_tweet
are inside another dictionary in the _json
object.
Why do we have to use the dot (.) notation
to access outer dictionaries in the _json
and the [] notation
to access values in inner dictionaries?
I understand the [] notation but what does the dot notation mean?
status object:
Status(_api=<tweepy.api.API object at 0x7f6851708190>, _json={'created_at': 'Mon Feb 01 10:58:31 +0000 2021',
'id': 1356195217687392256,
'id_str': '1356195217687392256',
'text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7D… ,
'display_text_range': [0, 140],
'source': '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
'truncated': True, 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None, 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 'in_reply_to_screen_name': None,
'user': {'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None, 'url': None, 'description': None, 'translator_type': 'none', 'protected': False, 'verified': False, 'followers_count': 0, 'friends_count': 0, 'listed_count': 0, 'favourites_count': 0, 'statuses_count': 29, 'created_at': 'Fri Jan 29 09:04:24 +0000 2021', 'utc_offset': None, 'time_zone': None,
'geo_enabled': False, 'lang': None, 'contributors_enabled': False,
'is_translator': False, 'profile_background_color': 'F5F8FA', 'profile_background_image_url': '', 'profile_background_image_url_https': '', 'profile_background_tile': False, 'profile_link_color': '1DA1F2', 'profile_sidebar_border_color': 'C0DEED', 'profile_sidebar_fill_color': 'DDEEF6', 'profile_text_color': '333333', 'profile_use_background_image': True, 'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'default_profile': True, 'default_profile_image': False, 'following': None, 'follow_request_sent': None, 'notifications': None}, 'geo': None, 'coordinates': None, 'place': None, 'contributors': None, 'is_quote_status': False, 'extended_tweet': {'full_text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7DMBJ3XCQN2XXXA1KA6VSCW292X86SJGHWEH3L1J2HVLV42SHPV8LCVZYY6S762GJ2MOBF3J6IH0, 'display_text_range': [0, 189], 'entities': {'hashtags': [], 'urls': [], 'user_mentions': [], 'symbols': [], 'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}, 'extended_entities': {'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg',
'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}}, 'quote_count': 0, 'reply_count': 0, 'retweet_count': 0, 'favorite_count': 0, 'entities': {'hashtags': [], 'urls': [{ 'expanded_url': 'https://twitter.com/i/web/status/1356195217687392256', 'display_url': 'twitter.com/i/web/status/1…', 'indices': [117, 140]}], 'user_mentions': [], 'symbols': []}, 'favorited': False, 'retweeted': False, 'possibly_sensitive': False, 'filter_level': 'low', 'lang': 'ht', 'timestamp_ms': '1612177111442'}, created_at=datetime.datetime(2021, 2, 1, 10, 58, 31), id=1356195217687392256, id_str='1356195217687392256', text='hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7D… , display_text_range=[0, 140], source='Twitter Web App', source_url='https://mobile.twitter.com', truncated=True, in_reply_to_status_id=None, in_reply_to_status_id_str=None, in_reply_to_user_id=None, in_reply_to_user_id_str=None, in_reply_to_screen_name=None, author=User(_api=<tweepy.api.API object at 0x7f6851708190>, _json={'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None,
'url': None,
'description': None,
'translator_type': 'none',
'protected': False, 'verified': False,
'followers_count': 0, 'friends_count': 0,
'listed_count': 0, 'favourites_count': 0,
'statuses_count': 29,
'created_at': 'Fri Jan 29 09:04:24 +0000 2021',
'utc_offset': None, 'time_zone': None,
'geo_enabled': False, 'lang': None,
'contributors_enabled': False,
'is_translator': False,
'profile_background_color': 'F5F8FA',
'profile_background_image_url': '',
'profile_background_image_url_https': '',
'profile_background_tile': False,
'profile_link_color': '1DA1F2',
'profile_sidebar_border_color': 'C0DEED',
'profile_sidebar_fill_color': 'DDEEF6',
'profile_text_color': '333333',
'profile_use_background_image': True,
'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
'default_profile': True,
'default_profile_image': False,
'following': None, 'follow_request_sent': None,
'notifications': None}, id=1355079285812453379,
id_str='1355079285812453379',
name='db1-testing',
screen_name='Db1Testing',
location=None,
url=None, description=None,
translator_type='none',
protected=False,
verified=False,
followers_count=0,
friends_count=0,
listed_count=0,
favourites_count=0,
statuses_count=29,
created_at=datetime.datetime(2021, 1, 29, 9, 4, 24),
utc_offset=None,
time_zone=None,
geo_enabled=False,
lang=None,
contributors_enabled=False,
is_translator=False,
profile_background_color='F5F8FA',
profile_background_image_url='',
profile_background_image_url_https='',
profile_background_tile=False,
profile_link_color='1DA1F2',
profile_sidebar_border_color='C0DEED',
profile_sidebar_fill_color='DDEEF6',
profile_text_color='333333',
profile_use_background_image=True, profile_image_url='http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', profile_image_url_https='https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', default_profile=True,
default_profile_image=False, following=False,
follow_request_sent=None, notifications=None),
user=User(_api=<tweepy.api.API object at 0x7f6851708190>,
_json={'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None,
'url': None, 'description': None, 'translator_type': 'none', 'protected': False, 'verified': False, 'followers_count': 0,
'friends_count': 0,
'listed_count': 0,
'favourites_count': 0,
'statuses_count': 29,
'created_at': 'Fri Jan 29 09:04:24 +0000 2021',
'utc_offset': None,
'time_zone': None,
'geo_enabled':False,
'lang': None,
'contributors_enabled': False,
'is_translator': False,
'profile_background_color': 'F5F8FA',
'profile_background_image_url': '',
'profile_background_image_url_https': '',
'profile_background_tile': False,
'profile_link_color': '1DA1F2',
'profile_sidebar_border_color': 'C0DEED',
'profile_sidebar_fill_color': 'DDEEF6',
'profile_text_color': '333333',
'profile_use_background_image': True,
'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
'default_profile': True, 'default_profile_image': False, 'following': None, 'follow_request_sent': None, 'notifications': None}, id=1355079285812453379, id_str='1355079285812453379', name='db1-testing', screen_name='Db1Testing', location=None, url=None, description=None, translator_type='none', protected=False, verified=False, followers_count=0,
friends_count=0, listed_count=0, favourites_count=0, statuses_count=29, created_at=datetime.datetime(2021, 1, 29, 9, 4, 24), utc_offset=None, time_zone=None,
geo_enabled=False, lang=None,
contributors_enabled=False,
is_translator=False,
profile_background_color='F5F8FA',
profile_background_image_url='',
profile_background_image_url_https='',
profile_background_tile=False,
profile_link_color='1DA1F2',
profile_sidebar_border_color='C0DEED',
profile_sidebar_fill_color='DDEEF6',
profile_text_color='333333',
profile_use_background_image=True, profile_image_url='http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', profile_image_url_https='https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', default_profile=True,
default_profile_image=False, following=False,
follow_request_sent=None, notifications=None), geo=None, coordinates=None, place=None, contributors=None, is_quote_status=False, extended_tweet={
'full_text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7DMBJ3XCQN2XXXA1KA6VSCW292X86SJGHWEH3L1J2HVLV42SHPV8LCVZYY6S762GJ2MOBF3J6IH0 , 'display_text_range': [0, 189],
'entities': {'hashtags': [], 'urls': [], 'user_mentions': [], 'symbols': [], 'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}, 'extended_entities': {'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}}, quote_count=0, reply_count=0, retweet_count=0, favorite_count=0,
entities={'hashtags': [], 'urls': [{'expanded_url': 'https://twitter.com/i/web/status/1356195217687392256',
'display_url': 'twitter.com/i/web/status/1…', 'indices': [117, 140]}], 'user_mentions': [],
'symbols': []}, favorited=False, retweeted=False,
possibly_sensitive=False, filter_level='low', lang='ht', timestamp_ms='1612177111442')
A Stackoverflow answer here suggests using status.extended_tweet.full_text
but it doesn’t work until I do status.extended_tweet['full_text']
Answers:
The main difference is that Tweepy has some predefined objects (Status, User) but often uses dictionaries (it is probably more flexible as the data model evolves).
The status.user
is a User object, for example
print(type(status.user)) # <class 'tweepy.models.User'>
print(status.user.screen_name) # beppecatanese
The extended_tweet
(when it exists) contains a dictionary of attributes, for example
print(type(status.extended_tweet)) # <class 'dict'>
The entities are arrays of various objects (hashtag. media, URL, etc..), again wrapped in a dictionary
print(type(tweet.entities)) # <class 'dict'>
print(tweet.entities['urls'][0]) # First url
print(type(tweet.entities['urls'][0])) # <class 'dict'>
print(tweet.entities['urls'][0]['expanded_url']) # expanded url of first url
I’ve been working with tweepy streaming API
and I have noticed one thing. The response of a status
object is not pure JSON
it has some additional information also. Here’s my question:
If I need the text content of a tweet, I have to do status.text
which is inside the _json dictionary/ json object. But, if I need the the media, or the full text for example, I have to do status.entities['media'][0]['media_url_https']
or status.extended_tweet['full_text']
, although both entities
and extended_tweet
are inside another dictionary in the _json
object.
Why do we have to use the
dot (.) notation
to access outer dictionaries in the_json
and the[] notation
to access values in inner dictionaries?
I understand the [] notation but what does the dot notation mean?
status object:
Status(_api=<tweepy.api.API object at 0x7f6851708190>, _json={'created_at': 'Mon Feb 01 10:58:31 +0000 2021',
'id': 1356195217687392256,
'id_str': '1356195217687392256',
'text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7D… ,
'display_text_range': [0, 140],
'source': '<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
'truncated': True, 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None, 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 'in_reply_to_screen_name': None,
'user': {'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None, 'url': None, 'description': None, 'translator_type': 'none', 'protected': False, 'verified': False, 'followers_count': 0, 'friends_count': 0, 'listed_count': 0, 'favourites_count': 0, 'statuses_count': 29, 'created_at': 'Fri Jan 29 09:04:24 +0000 2021', 'utc_offset': None, 'time_zone': None,
'geo_enabled': False, 'lang': None, 'contributors_enabled': False,
'is_translator': False, 'profile_background_color': 'F5F8FA', 'profile_background_image_url': '', 'profile_background_image_url_https': '', 'profile_background_tile': False, 'profile_link_color': '1DA1F2', 'profile_sidebar_border_color': 'C0DEED', 'profile_sidebar_fill_color': 'DDEEF6', 'profile_text_color': '333333', 'profile_use_background_image': True, 'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'default_profile': True, 'default_profile_image': False, 'following': None, 'follow_request_sent': None, 'notifications': None}, 'geo': None, 'coordinates': None, 'place': None, 'contributors': None, 'is_quote_status': False, 'extended_tweet': {'full_text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7DMBJ3XCQN2XXXA1KA6VSCW292X86SJGHWEH3L1J2HVLV42SHPV8LCVZYY6S762GJ2MOBF3J6IH0, 'display_text_range': [0, 189], 'entities': {'hashtags': [], 'urls': [], 'user_mentions': [], 'symbols': [], 'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}, 'extended_entities': {'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg',
'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}}, 'quote_count': 0, 'reply_count': 0, 'retweet_count': 0, 'favorite_count': 0, 'entities': {'hashtags': [], 'urls': [{ 'expanded_url': 'https://twitter.com/i/web/status/1356195217687392256', 'display_url': 'twitter.com/i/web/status/1…', 'indices': [117, 140]}], 'user_mentions': [], 'symbols': []}, 'favorited': False, 'retweeted': False, 'possibly_sensitive': False, 'filter_level': 'low', 'lang': 'ht', 'timestamp_ms': '1612177111442'}, created_at=datetime.datetime(2021, 2, 1, 10, 58, 31), id=1356195217687392256, id_str='1356195217687392256', text='hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7D… , display_text_range=[0, 140], source='Twitter Web App', source_url='https://mobile.twitter.com', truncated=True, in_reply_to_status_id=None, in_reply_to_status_id_str=None, in_reply_to_user_id=None, in_reply_to_user_id_str=None, in_reply_to_screen_name=None, author=User(_api=<tweepy.api.API object at 0x7f6851708190>, _json={'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None,
'url': None,
'description': None,
'translator_type': 'none',
'protected': False, 'verified': False,
'followers_count': 0, 'friends_count': 0,
'listed_count': 0, 'favourites_count': 0,
'statuses_count': 29,
'created_at': 'Fri Jan 29 09:04:24 +0000 2021',
'utc_offset': None, 'time_zone': None,
'geo_enabled': False, 'lang': None,
'contributors_enabled': False,
'is_translator': False,
'profile_background_color': 'F5F8FA',
'profile_background_image_url': '',
'profile_background_image_url_https': '',
'profile_background_tile': False,
'profile_link_color': '1DA1F2',
'profile_sidebar_border_color': 'C0DEED',
'profile_sidebar_fill_color': 'DDEEF6',
'profile_text_color': '333333',
'profile_use_background_image': True,
'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
'default_profile': True,
'default_profile_image': False,
'following': None, 'follow_request_sent': None,
'notifications': None}, id=1355079285812453379,
id_str='1355079285812453379',
name='db1-testing',
screen_name='Db1Testing',
location=None,
url=None, description=None,
translator_type='none',
protected=False,
verified=False,
followers_count=0,
friends_count=0,
listed_count=0,
favourites_count=0,
statuses_count=29,
created_at=datetime.datetime(2021, 1, 29, 9, 4, 24),
utc_offset=None,
time_zone=None,
geo_enabled=False,
lang=None,
contributors_enabled=False,
is_translator=False,
profile_background_color='F5F8FA',
profile_background_image_url='',
profile_background_image_url_https='',
profile_background_tile=False,
profile_link_color='1DA1F2',
profile_sidebar_border_color='C0DEED',
profile_sidebar_fill_color='DDEEF6',
profile_text_color='333333',
profile_use_background_image=True, profile_image_url='http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', profile_image_url_https='https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', default_profile=True,
default_profile_image=False, following=False,
follow_request_sent=None, notifications=None),
user=User(_api=<tweepy.api.API object at 0x7f6851708190>,
_json={'id': 1355079285812453379, 'id_str': '1355079285812453379', 'name': 'db1-testing', 'screen_name': 'Db1Testing', 'location': None,
'url': None, 'description': None, 'translator_type': 'none', 'protected': False, 'verified': False, 'followers_count': 0,
'friends_count': 0,
'listed_count': 0,
'favourites_count': 0,
'statuses_count': 29,
'created_at': 'Fri Jan 29 09:04:24 +0000 2021',
'utc_offset': None,
'time_zone': None,
'geo_enabled':False,
'lang': None,
'contributors_enabled': False,
'is_translator': False,
'profile_background_color': 'F5F8FA',
'profile_background_image_url': '',
'profile_background_image_url_https': '',
'profile_background_tile': False,
'profile_link_color': '1DA1F2',
'profile_sidebar_border_color': 'C0DEED',
'profile_sidebar_fill_color': 'DDEEF6',
'profile_text_color': '333333',
'profile_use_background_image': True,
'profile_image_url': 'http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', 'profile_image_url_https': 'https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png',
'default_profile': True, 'default_profile_image': False, 'following': None, 'follow_request_sent': None, 'notifications': None}, id=1355079285812453379, id_str='1355079285812453379', name='db1-testing', screen_name='Db1Testing', location=None, url=None, description=None, translator_type='none', protected=False, verified=False, followers_count=0,
friends_count=0, listed_count=0, favourites_count=0, statuses_count=29, created_at=datetime.datetime(2021, 1, 29, 9, 4, 24), utc_offset=None, time_zone=None,
geo_enabled=False, lang=None,
contributors_enabled=False,
is_translator=False,
profile_background_color='F5F8FA',
profile_background_image_url='',
profile_background_image_url_https='',
profile_background_tile=False,
profile_link_color='1DA1F2',
profile_sidebar_border_color='C0DEED',
profile_sidebar_fill_color='DDEEF6',
profile_text_color='333333',
profile_use_background_image=True, profile_image_url='http://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', profile_image_url_https='https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png', default_profile=True,
default_profile_image=False, following=False,
follow_request_sent=None, notifications=None), geo=None, coordinates=None, place=None, contributors=None, is_quote_status=False, extended_tweet={
'full_text': 'hiii IWD1FKPH0JEFS2PNH7KBSPXQ2EAZVORAWCE2580MWFW4N0OAFM63WI06CAZ4OYBLMPATC4VL9OAMFH86K660EXVMP53M36PN0FTU1ETKBIIP7DMBJ3XCQN2XXXA1KA6VSCW292X86SJGHWEH3L1J2HVLV42SHPV8LCVZYY6S762GJ2MOBF3J6IH0 , 'display_text_range': [0, 189],
'entities': {'hashtags': [], 'urls': [], 'user_mentions': [], 'symbols': [], 'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}, 'extended_entities': {'media': [{'id': 1356193076398731264, 'id_str': '1356193076398731264', 'indices': [190, 213], 'media_url': 'http://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', 'media_url_https': 'https://pbs.twimg.com/media/EtIqauWXMAAZsTn.jpg', , 'display_url': 'pic.twitter.com/BWiI8Lh6tW', 'expanded_url': 'https://twitter.com/Db1Testing/status/1356195217687392256/photo/1', 'type': 'photo', 'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'}, 'small': {'w': 680, 'h': 665, 'resize': 'fit'}, 'medium': {'w': 827, 'h': 809, 'resize': 'fit'}, 'large': {'w': 827, 'h': 809, 'resize': 'fit'}}}]}}, quote_count=0, reply_count=0, retweet_count=0, favorite_count=0,
entities={'hashtags': [], 'urls': [{'expanded_url': 'https://twitter.com/i/web/status/1356195217687392256',
'display_url': 'twitter.com/i/web/status/1…', 'indices': [117, 140]}], 'user_mentions': [],
'symbols': []}, favorited=False, retweeted=False,
possibly_sensitive=False, filter_level='low', lang='ht', timestamp_ms='1612177111442')
A Stackoverflow answer here suggests using status.extended_tweet.full_text
but it doesn’t work until I do status.extended_tweet['full_text']
The main difference is that Tweepy has some predefined objects (Status, User) but often uses dictionaries (it is probably more flexible as the data model evolves).
The status.user
is a User object, for example
print(type(status.user)) # <class 'tweepy.models.User'>
print(status.user.screen_name) # beppecatanese
The extended_tweet
(when it exists) contains a dictionary of attributes, for example
print(type(status.extended_tweet)) # <class 'dict'>
The entities are arrays of various objects (hashtag. media, URL, etc..), again wrapped in a dictionary
print(type(tweet.entities)) # <class 'dict'>
print(tweet.entities['urls'][0]) # First url
print(type(tweet.entities['urls'][0])) # <class 'dict'>
print(tweet.entities['urls'][0]['expanded_url']) # expanded url of first url