curlPerform()
またはからデータを取得しようとすると、JSON 文字列の文字サイズ制限のように見えますgetURL()
。これは再現不可能なコード [1] ですが、問題を明らかにするはずです。
# Note that .base.url is the basic url for the API, q is a query, user
# is specified, etc.
session = getCurlHandle()
curl.opts <- list(userpwd = paste(user, ":", key, sep = ""),
httpheader = "Content-Type: application/json")
request <- paste(.base.url, q, sep = "")
txt <- getURL(url = request, curl = session, .opts = curl.opts,
write = basicTextGatherer())
また
r = dynCurlReader()
curlPerform(url = request, writefunction = r$update, curl = session,
.opts = curl.opts)
私の推測では、またはテキスト ハンドラー オブジェクトのupdate
またはvalue
関数が大きな文字列に問題を抱えていると思います。この例では、約 2 MB の切り捨てられた文字列が返されます。上記のコードは、2 MB 未満のクエリで問題なく動作します。basicTextGather
dynCurlReader
r$value()
コマンドラインから (または R で使用して) 以下を簡単に実行できますがsystem()
、その後の分析を R で行っている場合、ディスクへの書き込みは無駄に思える ことに注意してください。
curl -v --header "Content-Type: application/json" --user username:register:passwd https://base.url.for.api/getdata/select+*+from+sometable > stream.json
ここstream.json
で、約 14MB の json 文字列です。どちらかを使用して文字列を R に読み込むことができます
con <- file(paste(.project.path, "data/stream.json", sep = ""), "r")
string <- readLines(con)
または直接リストする
tmp <- fromJSON(file = paste(.project.path, "data/stream.json", sep = ""))
どんな考えでも大歓迎です。
ライアン
[1] - 再現可能なコードを提供できなくて申し訳ありませんが、私は政府のファイアウォールを扱っています。