Mam kilka plików ndjson zawierających dane z Twittera. Natknąłem się na problem polegający na tym, że w przypadku retweetów właściwość „text” słowników obejmuje tylko pierwsze 140 znaków. Chciałbym wydobyć cały tweet.

Biorąc jeden z tweetów i uruchamiając następujący kod:

data.get('includes')['tweets']

Dostaję następujący wynik.

[{'attachments': {'media_keys': [‘’1234”]},
  'author_id': “1234”,
  'conversation_id': “1234”,
  'created_at': '2021-02-10T14:27:19.000Z',
  'entities': {'annotations': [{'end': 111,
     'normalized_text': 'Scotland',
     'probability': 0.9519,
     'start': 104,
     'type': 'Place'}],
   'hashtags': [{'end': 50, 'start': 35, 'tag': 'ChineseNewYear'}],
   'urls': [{'display_url': 'pic.twitter.com/1234’,
     'end': 221,
     'expanded_url': ‘urlwuhuu,
     'start': 198,
     'url': “another one”}]},
  'id': “1234”,
  'lang': 'en',
  'possibly_sensitive': False,
  'public_metrics': {'like_count': 7,
   'quote_count': 0,
   'reply_count': 6,
   'retweet_count': 3},
  'reply_settings': 'everyone',
  'source': 'Twitter Web App',
  'text': “FULL TWEET THAT I WANT TO GET”}]

Problem w tym, że mam teraz listę, a nie słownik. Aby uzyskać tweet (na końcu listy) nie mogę użyć funkcji .get ani indeksu za pomocą ciągu.

Jaki jest najlepszy sposób, aby to zrobić?

1
Laura Paulsen 5 styczeń 2022, 14:56

1 odpowiedź

Najlepsza odpowiedź

Co powiesz na użycie zrozumienia listy, na przykład:

tweets_list = data.get('includes')['tweets']
tweet_texts  = [ tweet['text'] for tweet in tweets_list ] # gets the texts of all tweets, as a list
text = tweet_texts[0] # get “FULL TWEET THAT I WANT TO GET” from your example
1
voiarn 5 styczeń 2022, 15:03