見出し画像

R言語:{rtweet}で収集した人気ツイートから画像を一括ダウンロードする

rtweetパッケージで取得したツイートのデータから、画像を一気にDLします。
特定の話題に関する画像、流行の画像を一気に集めたい時に便利です。

# libraryの読み込み
require("rtweet")
require("tidyverse")
# token
twitter_token <- create_token(app = "****", # 自分で設定したappの名前
                             consumer_key = "****", # Consumer Keyを入力
                             consumer_secret = "****", # Consumer Secretを入力
                             access_token = "****",
                             access_secret = "****")

# todayに今日の日付と時刻を取得
today <- Sys.Date()
now <- Sys.time()
ti <- format(now, "%H%M%S")

# search_tweet
x = "レシピ" # search_word
# type= "mixed", include_rts = TRUEでよくリツイートされる人気ツイートを収集します。
rt <- search_tweets(x, n = 18000, retryonratelimit = FALSE, type= "mixed", include_rts = TRUE)  # リツイートを含む

# YYYY-MM-DD-HHMMSS_pics というフォルダを作り作業フォルダをそこへ移動
dir.create(paste(today, "-", ti, "_", x, "pics", sep = ""), showWarnings = F, recursive = T)
setwd(paste0(today, "-", ti, "_", x, "pics/", sep = ""))

# 画像DL用関数の定義
dl_url <- function(dat){
    download.file(dat, destfile = basename(dat), mode ="wb")
    Sys.sleep(0.5)
    }

# 画像のあるツイートを重複を除きRT順に並べる
rt2 <- rt %>% 
    filter(!is.na(media_url)) %>% 
    arrange(desc(favorite_count)) %>% 
    distinct(status_id, .keep_all = TRUE) %>% 
    distinct(ext_media_url, .keep_all=TRUE) %>% 
    arrange(desc(retweet_count)) %>% 
    unnest(ext_media_url) %>% 
    slice(1:100) # ダウンロードしたい画像数を入力
 
# DL! 
rt2$ext_media_url %>% walk(dl_url)

# 作業フォルダをhomeに戻す
setwd(Sys.getenv("HOME")) 

結果

画像1

Good!


おまけ

webshot2で一気にツイートのスクショを撮ることもできます。
魚拓のように使えるかもしれません。

library(webshot2)
for (i in 1:length(rt2$status_url)) {
    webshot2::webshot(rt2$status_url[i], paste0(x, "_", "screenshot.png", sep=""), zoom=1, vwidth = 850, vheight = 1300, delay=0.6)
    Sys.sleep(1)
}