0

我正在使用包rtweet来搜索包含关键字列表的所有推文(请参见下面的示例代码)。我想从这些推文中提取有关它们是否包含媒体(即照片或视频)的信息,对于那些确实包含媒体的信息,请提取它。

所有这些都应该使用以下代码来工作:

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

第 2 步 - 过滤掉所有转推,只保留那些带有 media_url 而不是 NA 的转推(即带有图像的结果):

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

第 3 步 - 下载媒体。

一旦我有了这个数据集,我就会使用函数download.file().


问题:大多数(但不是全部!!)包含媒体的推文在步骤 2 中被过滤掉,因为从search_30day()函数获得的 media_url 列是NA. 关于为什么包含媒体的推文不显示其 media_url 的任何想法?感谢您的任何反馈!

更新:我正在使用 twitter 开发人员“沙盒”帐户(免费)进行此操作。也许某些功能(例如提取 media_url)仅适用于付费帐户?但是,我确实看到NA了一小部分推文的非 media_url ......

4

3 回答 3

2

查看 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)
于 2020-02-07T13:21:23.917 回答
1

您的代码似乎正在运行。您可以使用一行代码来验证这一点,以确保搜索包含媒体的 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正在返回,那么这是需要向 Github 页面报告的包的问题。我可能误解了您的问题,所以如果是这种情况,请发表评论。NAmedia_url

同样重要的是要知道您可能会看到包含媒体的推文,但这只是因为它包含在他们转发的内容中 - 您的代码当前会过滤掉这些推文(filter(is_retweet == F))。但是,提供缺少推文的示例rwteet会有所帮助-您可以使用该帖子id,以便我们也可以看到它。

于 2020-02-07T14:33:13.013 回答
0

我将尝试澄清下面的问题。我想从 Twitter 中删除所有关于风暴 Gloria 对地中海海草Posidonia oceanicaCymodocea 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 条具有媒体的独特推文的 tibble。但是,如果我想从这些推文中下载图像,我需要它们的 url。所以我做了以下事情:

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

它返回一个只有 3 条带有 media_url 的推文的小标题!为什么只有 3 个,如果我知道有 24 个?

例如,我在 2020-01-30 17:52:30 发布的推文,从 Twitter 正确拉出并存储在 tibble 中tweets_with_media,显然应该有一个非 NA media_url 列......

带有媒体但在 media_url 列中带有 NA 的推文示例

但是,正如您可以使用这段代码检查的那样,情况并非如此。

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

这条推文的 media_url 列是NA. 这是为什么?

于 2020-02-10T11:15:27.023 回答