Как проверить наличие расширенного права в твиповском ответе или нет - PullRequest
0 голосов
/ 19 марта 2019

Я могу получить разные параметры твита из твита.

    keyword = tweepy.Cursor(api.search, val,tweet_mode='extended',lang='en').items(2)
    tweetdone = 0
    all_tweet = []
    for tweet in keyword:
        tweet_record = {} 
        tweet_record['tweet.text'] = tweet.full_text
        tweet_record['tweet.user.name'] = tweet.user.name
        tweet_record['tweet.user.location'] = tweet.user.location
        tweet_record['tweet.user.verified'] = tweet.user.verified
        tweet_record['tweet.lang'] = tweet.lang
        tweet_record['tweet.created_at'] = tweet.created_at
        tweet_record['tweet.user'] = tweet.user
        tweet_record['tweet.retweet_count'] = tweet.retweet_count
        tweet_record['tweet.favorite_count'] = tweet.favorite_count

Моя проблема в том.Я хочу разобрать media объекты из твита.Но extended_entities, в котором присутствует медиа-URL, доступен не во всех твитах.поэтому, если я попытаюсь извлечь его следующим образом

tweet_record['media_url'] = tweet.extended_entities.media_url

Это дает ошибку, потому что расширенные сущности могут отсутствовать в нескольких твитах.

Как правильно решить эту проблему и извлечь медиаконтент?

1 Ответ

0 голосов
/ 20 марта 2019

У вас есть несколько вариантов здесь, вы можете проверить, существует ли ключ, или использовать некоторые попытки / исключения.

Проверьте, существует ли ключ:

Вы можете сделать это, потому что tweepy возвращает объект состояния, который действует аналогично файлу json или словарю python, и, таким образом, у вас по существу есть пара ключ: значение. Вы должны быть в состоянии использовать (исходя из кода выше)

if 'extended_entities' in tweet:
    tweet_record['media_url'] = tweet.extended_entities.media_url

конечно, возможно и обратное

if 'extended_entities' not in tweet:
    #whatever you want to do

Это может привести к проблемам, но что, если extended_entities существует, но по какой-то причине media_url нет? А что, если вы хотите получить еще больше из этого (не для объекта статуса, но, эй, я просто пытаюсь доказать здесь будущее!) Вам придется делать длинные или многократные операторы if, который не будет выглядеть лучше

if 'extended_entities' in tweet:
    if 'media_url' in tweet['extended_entities']
        #etc

так что может быть проще просто бросить его в попытке, кроме ...

try:
    tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
    #etc

это означает, что программа не выдаст ошибку, если определенные элементы не найдены. AttributeError предназначен для доступа к неверному атрибуту объекта. Вы, конечно, можете изменить порядок для удобства чтения. Имейте в виду, однако, что при этом это pythonic , это может быть немного трудно читать, если использовать слишком часто, по моему мнению.

Я упоминал этот вопрос , когда искал вещи для этого ответа. Дает хорошие идеи для такого рода вещей, если вам нужна дополнительная помощь.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...