使用 R 从 API 调用 HTML/XML 数据

Calling HTML/XML data from an API using R

一位朋友向我发送了一个工作示例,但不幸的是,我真的很费劲,似乎无法弄清楚如何将信息提取到数据框中然后对其进行操作。

我最初以为我可以使用 JsonLite 简单地解析它,但事实证明这比预期的要棘手。有人可以帮我吗?将不胜感激!如果没有人愿意为我编写代码,我将非常感谢有人告诉我 link 的实际含义!

提供的URL是:smarkets.herokuapp.com/bets/{betID}

我试过id 123,响应结构好像不复杂:

library(jsonlite)
library(httr)

#convert response into string
my_url <- "http://smarkets.herokuapp.com/bets/123"
response <- GET(my_url)
text <- content(response,as = "text")

# string to list
my_list <- fromJSON(text) 

#list to dataframe
mydf <- data.frame(t(sapply(my_list,c)))

示例结果:

> mydf
id user_id   amount percentage_odds                      timestamp result
1 123     421 5.729698              16 2018-06-12T15:49:13.245956399Z  FALSE

循环获取所有信息:

library(jsonlite)
library(httr)
library(glue)

#convert response into string
loop_items <- 1:1000

all_df <- data.frame()
for( i in 1 : 1000){
    ua <- user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36")
    my_url <- glue("http://smarkets.herokuapp.com/bets/{i}",
                   i = i)
    response <- GET(my_url,ua)
    text <- content(response,as = "text")
    # string to list
    my_list <- fromJSON(text) 
    #list to dataframe
    mydf <- data.frame(t(sapply(my_list,c)))
    all_df <- rbind(all_df,mydf)
    #sleep 1 second
    Sys.sleep(1)
    cat(i," completed\n")
}