2015-11-24 2 views
6

私は2014-11-01と2015-10-31の間のBitcoinサブレディト内のすべての投稿を掻き集める機能を持っています。与えられた期間内のすべてのサブ転記投稿を掻きする方法

しかし、私は10月25日までしか戻っていない約990の投稿を抽出することができます。何が起こっているのか分かりません。私は、https://github.com/reddit/reddit/wiki/APIを参照した後に各抽出物の間に15秒のSys.sleepを含めて、役に立たなかった。

また、別のサブディレクトリ(フィットネス)から削り取って実験しましたが、約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年全体の投稿を得ることができますか? –

+1

その4日間に1,000件の投稿がある可能性が高いかどうかによって異なります。おそらく、新しいもので並べ替えて、アクセスできる最後の投稿のタイムスタンプを使うほうが簡単でしょう。 – Pokechu22

関連する問題