Я написал код для анализа JSON твита. Я хочу использовать медиа-контент и немедиа-контент отдельно. Проблема в том, что медиа-контент присутствует только в нескольких твитах, и я не понимаю, как разделить медиа-контент и немедиа-контент.
for tweet in tweets:
#pdb.set_trace()
#if tweet.entities.media:
twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url })
Этот код работает, но теперь я не понимаю, как разбирать те твиты, которые содержат медиа
Я пробовал вот так,
for tweet in tweets:
#pdb.set_trace()
if tweet.entities.media:
twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url })
но это дает ошибку
'dict' object has no attribute 'media'
Это правильно, потому что все твиты не содержат атрибут мультимедиа.
Может кто-нибудь, пожалуйста, помогите мне написать здесь логику. Чтобы я мог получать доступ к медиа-твитам и не медиа-твитам по отдельности?
Ответ JSON выглядит так:
Примечание: пришлось вставить за пределами SO из-за ограничений размера и сокращения URL-адресов, которые являются частью объекта JSON.






Вы можете использовать hasattr, например:
for tweet in tweets:
#pdb.set_trace()
if hasattr(status.entities, 'media'):
#if tweet.entities.media:
twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url })
Это вернет False, если атрибут media отсутствует.