tushare的团队已经封装了R接口:通过R语言调取tushare数据。
但我在我的R环境中没能安装上,索兴自己照猫画虎写了一个:
query <- function(api_name, token, params = list(), ts_api = "http://api.tushare.pro/"){ post_data <- list(api_name = api_name, token = token, params = params) r <- httr::POST(ts_api, body = post_data, encode = 'json') # post json content <- httr::content(r, "parsed", "application/json") code <- content[['code']] if (code == 0){ # retrieve data successfully when code equals 0 with(content[['data']], { # combine 'items' with 'fields' to create a data.frame df <- data.table::rbindlist(items) if(length(df) > 0){ names(df) <- unlist(fields) } else { # create an empty data.frame when no items df <- data.frame(matrix(ncol = length(fields), nrow = 0)) names(df) <- fields } list(code=code, data=df)}) } else{ # failed to retrieve data list(code=code, msg=content[['msg']]) }}
以上代码是用httr访问tushare的restful通用接口,获取并组织数据为数据框。接着是简单封装的获取股票基信息的函数:
stock_basic <- function(token=token) { query(api_name = "stock_basic", token = token) }
获取日股票日交易数据的函数:
daily <- function(token=token, ts_code=NULL, trade_date=NULL, start_date=NULL, end_date=NULL) { params <- list(ts_code=ts_code, trade_date=trade_date, start_date=start_date, end_date=end_date) query(api_name = "daily", token = token, params = params)}
用例:
token <- 'XXXXXXXX'# 获取所有股票的日k数据res1 <- daily(token = token, trade_date = "20190103")df1 <- res1[['data']]# 获取一支股票一个时间段的日k数据res2 <- daily(token = token, ts_code = '600000.SH')df2 <- res2[['data']]# 获取股票的基本信息res3 <- stock_basic(token=token)df3 <- res3[['data']]
httr用起来非常方便,tushare.pro的接口亦不遑多让,十分感谢tushare的Jimmy老师及团队,为我们提供这么好的数据,这么优雅的接口。