我在金融数据的quantmod和tinyquant中都得到了相同的错误。有没有人知道这是不是可以重现的?这是一个谷歌金融服务器的问题吗?下面的函数对我来说都不起作用,我不确定是我还是服务器。
tq_get("AAPL", get= "financials")
[1] NA
Warning message:
x = 'AAPL', get = 'financials': Error in thead[x]:thead[x + 1]: NA/NaN
argument
和:
getFin("AAPL")
Error in thead[x]:thead[x + 1] : NA/NaN argument
有人能帮帮忙吗?
发布于 2018-03-24 02:23:38
是的,我在过去的几天里也遇到了同样的问题。我认为这可能与谷歌财经的变化有关。这个网站现在不同了,url也不一样了。
发布于 2018-03-24 23:10:27
试试这个:
library(jsonlite)
library(httr)
transpose_df <- function(df_list){
df_list$maxAge <- NULL
myColnames <- df_list$endDate$fmt
df_list$endDate <- NULL
mydf <- data.frame(row.names = colnames(df_list))
for (i in 1:length(df_list)) {
for (j in 1:4) {
tryCatch(
{
mydf[i,j] <- df_list[j,i]$raw
},
error = function(cond){
mydf[i,j] <- NA
}
)
}
}
colnames(mydf) <- myColnames
return(mydf)
}
scrapy_stocks <- function(stock){
for (i in 1:length(stock)) {
tryCatch(
{
url <- paste0('https://query1.finance.yahoo.com/v10/finance/quoteSummary/',stock[i],'?formatted=true&lang=en-US®ion=US&modules=incomeStatementHistory%2CcashflowStatementHistory%2CbalanceSheetHistory&corsDomain=finance.yahoo.com')
a <- GET(url)
a <- content(a, as="text")
df <- fromJSON(a, simplifyDataFrame = TRUE)
df_is <- df$quoteSummary$result$incomeStatementHistory$incomeStatementHistory[[1]]
df_is <- transpose_df(df_is)
df_bs <- df$quoteSummary$result$balanceSheetHistory$balanceSheetStatements[[1]]
df_bs <- transpose_df(df_bs)
df_cs <- df$quoteSummary$result$cashflowStatementHistory$cashflowStatements[[1]]
df_cs <- transpose_df(df_cs)
assign(paste0(stock[i],'.f'),value = list(IS = df_is,BS = df_bs,CF = df_cs),envir = parent.frame())
},
error = function(cond){
message(stock[i], "Give error ",cond)
}
)
}
}
scrapy_stocks(c('PETR4.SA','VALE3.SA'))
您可以将其称为scrapy_stocks(c("AAPL","GOOGL"))
,并以AAPL.f$IS
、AAPL.f$BS
或AAPL.f$CF
的形式访问其数据。
我使用R已经有一段时间了,所以可能有一种更好的方法来做这件事,特别是转置Dataframe,但我认为它是有效的。我希望它能帮助一些人。
在网址中,如果你使用balanceSheetHistory
,你可以得到年值,如果你使用balanceSheetHistoryQuarterly
,你也可以得到季度数字。人们可以很容易地为此调整函数。
https://stackoverflow.com/questions/49452906
复制相似问题