多个数据财务API

时间:2014-05-13 17:49:47

标签: ruby-on-rails ruby yahoo-api

我正在构建一个Rails应用程序,我想下载历史财务数据。我找到了这个我可以使用的URL:

Yahoo Finance API - historical

但我没有找到任何方法同时下载多个财务数据。我发现的唯一的事情是下载多个引号,如下所示:

Yahoo Finance API - quotes

有没有办法同时下载多个历史数据?

(我问的原因是因为我想将数据上传到SQLite数据库并在我的应用程序中使用它。当然我可以单独下载数据,按库存,但这将非常繁琐。

现在,我在internet上找到了这个Ruby脚本:

require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'sqlite3'

START_DATE=['01','01','2014']
END_DATE=['01','05','2014']

YURL="http://ichart.finance.yahoo.com/table.csv?a=#{START_DATE[0]}&b=#{START_DATE[1]}&c=#{START_DATE[2]}&d=#{END_DATE[0]}&e=#{END_DATE[1]}&f=#{END_DATE[2]}&g=d&ignore=.csv&s="
DBNAME = "data-hold/sp500-data.sqlite"
DB = SQLite3::Database.new( DBNAME )


SUBDIR = 'data-hold/yahoo-data'
Dir.mkdir(SUBDIR) unless File.exists?SUBDIR

DB.execute("SELECT DISTINCT ticker_symbol from companies").each do |sym|
  fname = "#{SUBDIR}/#{sym}.csv"
  unless File.exists?fname
    puts fname
    d = open("#{YURL}#{sym}")
    File.open(fname, 'w') do |ofile|
      ofile.write(d.read)
      sleep(1.5 + rand)
    end
  end  
end

但是当我运行它时,Rails会抛出一个错误:

错误的URI(不是URI?):

所以我的问题基本上是:解决问题的最佳方法是什么?)

2 个答案:

答案 0 :(得分:3)

大多数财务数据提供商将历史下载限制为每个API调用一个自动收报机。你可以想象,在同一个JSON输出中拉出多个时间序列会让人感到困惑,并且会给服务器带来沉重的负担。

github上有一个Intrinio's API的Ruby包装器,you can see it here,可以更容易地获取历史时间序列数据。

这将拉动Apple的价格历史:

curl "https://api.intrinio.com/prices?ticker=AAPL" -u "APIusername:APIpassword"

这将从尺寸上拉出当前价格,最多150个股票:

curl "https://api.intrinio.com/data_point?ticker=AAPL,MSFT,T,XOM&item=last_price" -u "APIusername:APIpassword"

当然,您需要在curl中交换自己的API密钥,但使用github包装将使其变得简单。 API用户名和密码是免费的。

答案 1 :(得分:0)

雅虎历史数据不支持一次下载多个符号。每个URL每个符号都是唯一的。

由于雅虎的限制,我不建议使用多个线程进行下载。