json 了解tweepy的状态对象

wkyowqbh  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(165)

我一直在使用tweepy streaming API,我注意到一件事。status对象的响应不是纯粹的JSON,它还包含一些额外的信息。我的问题是:
如果我需要一条tweet的文本内容,我必须执行status.text,它位于**_json字典/ json对象**内。但是,如果我需要媒体,或者完整的文本,我必须执行status.entities['media'][0]['media_url_https']status.extended_tweet['full_text'],尽管entitiesextended_tweet都位于_json对象的另一个字典内。
为什么我们必须使用dot (.) notation来访问_json中的外部字典,而使用[] notation来访问内部字典中的值?

我理解[]表示法,但点表示法是什么意思?
状态对象

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')

Stackoverflow的答案here建议使用status.extended_tweet.full_text,但在我使用status.extended_tweet['full_text']之前它不起作用

8qgya5xd

8qgya5xd1#

主要的区别是Tweepy有一些预定义的对象(Status、User),但经常使用字典(随着数据模型的发展,它可能会更加灵活)。
例如,status.userUser对象

print(type(status.user))  # <class 'tweepy.models.User'>
print(status.user.screen_name) # beppecatanese

extended_tweet(如果存在)包含一个属性字典,例如

print(type(status.extended_tweet)) # <class 'dict'>

entities是各种对象(hashtag.media、URL等)的数组,同样 Package 在字典中

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

相关问题