Получить медиа из твитов, используя rtweet - PullRequest
0 голосов
/ 07 февраля 2020

Я использую пакет rtweet для поиска во всех твитах, содержащих список ключевых слов (см. Пример кода ниже). Из этих твитов я хотел бы извлечь информацию о том, включали ли они мультимедиа (ie. Фото или видео) или нет, а для тех, которые включали мультимедиа, извлечь его.

Все это должно работать с использованием следующий код:

Step1 - Поиск твитов:

seagrasstweet30day <- search_30day(q = '(posidonia OR poseidonia OR #posidonia OR cymodocea OR cymo OR seagrass) (Gloria OR #Gloria OR temporal OR storm OR llevantada)',
                                   n = 500,
                                   env_name = "research")

Step2 - Отфильтруйте все ретвиты и оставьте только те, у которых media_url не NA (т.е. с изображениями , в результате):

tweets_images <- seagrasstweet30day %>% 
  filter(is_retweet == F) %>% 
  filter(!is.na(media_url)) %>% 
  select(media_url) %>% 
  unnest()

Шаг 3 - загрузка носителя.

Как только у меня будет этот набор данных, я буду использовать функцию download.file() .


ПРОБЛЕМА: Большинство (но не все !!) твитов, содержащих медиа, отфильтровываются на шаге 2, поскольку их столбец media_url, полученный из функции search_30day() NA. Любые идеи о том, почему твиты, содержащие медиа, не показывают свои media_url? Спасибо за любые отзывы!

Обновление: Я делаю это с помощью учетной записи твиттера «песочница» (это бесплатно). Может быть, некоторые функции, например извлечение media_url, доступны только для платных аккаунтов? Тем не менее, я вижу non-NA media_url для небольшого набора твитов ...

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

глядя на пакет rtweet, похоже, что вы можете предварительно фильтровать твиты на основе наличия изображений, добавляя этот фильтр в запрос (q)

, вот несколько примеров:

Tweet attributes:
• is:retweet ~~ only retweets
• has:mentions ~~ uses mention(s)
• has:hashtags ~~ uses hashtags(s)
• has:media ~~ includes media(s)
• has:videos ~~ includes video(s)
• has:images ~~ includes image(s)
• has:links ~~ includes URL(s)
1 голос
/ 07 февраля 2020

Ваш код работает. Вы можете проверить это с помощью строки кода, которая гарантирует, что твиты, возвращаемые при поиске API, которые содержали медиа, совпадают с числами твитов, содержащихся в вашем объекте tweets_images. Я делаю это в приведенном ниже коде (последняя строка).

seagrasstweet30day <- search_tweets(q = '(Gloria OR #Gloria OR temporal OR storm OR llevantada) has:media',
                                   n = 100,
                                   env_name = "research")

tweets_images <- seagrasstweet30day %>% 
  filter(is_retweet == F) %>% 
  filter(!is.na(media_url)) %>% 
  select(media_url) %>% 
  unnest()

# verify works correctly - should be TRUE
nrow(tweets_images) == sum(!is.na(seagrasstweet30day$media_url))

Если вы думаете, что есть твиты, которые rtweet возвращает NA в поле media_url, когда твит на самом деле содержит медиа, то проблема с пакетом, о котором нужно сообщить на странице Github. Возможно, я неправильно понял вашу проблему, поэтому, пожалуйста, прокомментируйте, если это так.

Также важно знать, что вы можете видеть твиты с мультимедиа, но только потому, что они содержатся в том, что они ретвитнули - ваш код отфильтровывает эти твиты (filter(is_retweet == F)). Хотя пример твита, который отсутствует rwteet, поможет - вы можете использовать пост id, чтобы мы тоже могли его увидеть.

0 голосов
/ 10 февраля 2020

Я постараюсь прояснить проблему ниже. Я хочу выложить из Твиттера все твиты, рассказывающие о влиянии шторма Глория на средиземноморских морских трав Posidonia oceanica или Cymodocea nodosa . Поскольку я хочу только твиты с изображениями последствий урагана, я добавляю к запросу тег has:media.

seagrasstweet30day_media_only <- search_30day(q = 'has:media(posidonia OR poseidonia OR #posidonia OR cymodocea OR cymo OR seagrass) (Gloria OR #Gloria OR temporal OR storm OR llevantada)',
                                    n = 5000,
                                    env_name = "research")

В результате получается 460 твитов. Однако некоторые из этих твитов на самом деле могут быть ретвитами, поэтому я отфильтрую их.

tweets_with_media <- seagrasstweet30day_media_only %>% 
  filter(is_retweet == F)

И это возвращает толпу с 24 уникальными твитами, которые имеют медиа. Однако, если я хочу загрузить изображения из этих твитов, мне нужен их URL. Поэтому я делаю следующее:

tweets_with_media_url <- seagrasstweet30day_media_only %>% 
  filter(is_retweet == F) %>%
  filter(!is.na(media_url))

, который возвращает сообщение только с тремя твитами с media_url! Почему только 3, если я знаю, что их 24?

Например, твит, который я опубликовал в 2020-01-30 17:52:30, который правильно извлечен из Twitter и хранится в таблице tweets_with_media, очевидно, должен быть столбец media_url, отличный от NA ...

Example of a tweet with media but with NA in media_url column

Но, как вы можете проверить, используя этот фрагмент код, это не тот случай.

tweets_with_media %>% 
  filter(screen_name == "jordifpages", status_id == "1222940664029229057") %>% 
  select(screen_name, created_at, media_url) %>% 
  unnest(cols = media_url)

Этот столбец media_url этого твита равен NA. Почему это так?

...