2015-11-24 3 views
6

У меня есть функция, чтобы очистить все сообщения в субблоке биткойн между 2014-11-01 и 2015-10-31.Как очистить все сообщения subreddit за заданный период времени

Однако я могу извлечь только 990 сообщений, которые возвращаются только до 25 октября. Я не понимаю, что происходит. Я включил Sys.sleep из 15 секунд между каждым экстрактом после ссылки на https://github.com/reddit/reddit/wiki/API, но безрезультатно.

Кроме того, я экспериментировал со скребками из другого subreddit (fitness), но также возвращал около 900 сообщений.

require(jsonlite) 
require(dplyr) 

getAllPosts <- function() { 
    url <- "https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&limit=100" 
    extract <- fromJSON(url) 
    posts <- extract$data$children$data %>% dplyr::select(name, author, num_comments, created_utc, 
              title, selftext) 
    after <- posts[nrow(posts),1] 
    url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100") 
    extract.next <- fromJSON(url.next) 
    posts.next <- extract.next$data$children$data 

    # execute while loop as long as there are any rows in the data frame 
    while (!is.null(nrow(posts.next))) { 
     posts.next <- posts.next %>% dplyr::select(name, author, num_comments, created_utc, 
            title, selftext) 
     posts <- rbind(posts, posts.next) 
     after <- posts[nrow(posts),1] 
     url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100") 
     Sys.sleep(15) 
     extract <- fromJSON(url.next) 
     posts.next <- extract$data$children$data 
    } 
    posts$created_utc <- as.POSIXct(posts$created_utc, origin="1970-01-01") 
    return(posts) 
} 

posts <- getAllPosts() 

Есть ли у reddit какой-то предел, который я нажимаю?

ответ

4

Да, все объявления reddit (сообщения, комментарии и т. Д.) Ограничены 1000 наименованиями; они по сути являются просто кэшированными списками, а не запросами, по соображениям производительности.

Чтобы обойти это, вам нужно сделать несколько умных поисков based on timestamps.

+1

Если я пишу функцию, у которой есть цикл, в котором каждая итерация захватывает данные за 4 дня, будет ли это обходить ограничения Reddit? Другими словами, смогу ли я запустить эту функцию и получить сообщения за весь год? –

+1

Зависит от того, считаете ли вы, что в эти 4 дня будет 1000 сообщений. Вероятно, было бы проще сортировать по новинкам и использовать метку времени последнего сообщения, к которому вы можете получить доступ. – Pokechu22