2015-11-24 5 views
6

Ich habe eine Funktion, um die Beiträge alle im Bitcoin subreddit kratzen zwischen 2014.11.01 und 2015.10.31.Wie alle subreddit Beiträge in einem bestimmten Zeitraum kratzen

Allerdings bin ich nur in der Lage über 990 Beiträge zu extrahieren, die bis Oktober wieder nur gehen 25. Ich verstehe nicht, was los ist. Ich habe ein Sys.sleep von 15 Sekunden zwischen jedem Extrakt nach Bezug auf https://github.com/reddit/reddit/wiki/API, vergeblich.

Auch ich experimentierte von einem anderen subreddit (Fitness) mit Schaben, aber es auch wieder rund 900 Beiträge.

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

Hat Reddit irgendeine Art von Grenze, die ich treffe?

Antwort

4

Ja, alle reddit Anzeigen (Beiträge, Kommentare, etc.) werden bei 1000 Artikeln mit einer Kappe bedeckt; Sie sind im Grunde nur zwischengespeicherte Listen, anstatt Abfragen, aus Gründen der Leistung.

Um dies zu umgehen, müssen Sie einige clevere based on timestamps Suche zu tun.

+1

Wenn ich eine Funktion schreibe, die eine Schleife hat, in der jede Iteration Daten von 4 Tagen erfasst, werden die Einschränkungen von Reddit umgangen? Mit anderen Worten, kann ich diese Funktion ausführen und die Beiträge für das ganze Jahr erhalten? –

+1

Hängt davon ab, ob es wahrscheinlich ist, dass es in diesen 4 Tagen 1000 Beiträge gibt. Es wäre wahrscheinlich einfacher, nach neu zu sortieren und den Zeitstempel des letzten Posts zu verwenden, auf den Sie zugreifen können. – Pokechu22