我正在执行一项任务,使用雅虎的股票价格系统从网上检索几个股票价格。不幸的是,我需要使用的雅虎API返回一个.csv文件,该文件显然包含股票交易的每一天的一行,这对于我正在处理的股票来说至少有5000行,对于其中一些股票来说超过10000行(例如)。
不过,我只关心当前的价格,它在第二行。
我目前正在做这个:
require 'open-uri'
def get_ticker_price(stock)
open("http://ichart.finance.yahoo.com/table.csv?s=#{stock}") do |io|
io.read.split(',')[10].to_f
end
end
……但它真的很慢。
所有的延迟是因为拿到文件,还是因为我处理文件的方式?
io.read
是否正在读取整个文件?有没有办法只下载雅虎CSV文件的前几行?
如果问题1&2不要让这个变得无关紧要,有没有更好的方法来处理它,而不需要查看整个文件(假设
io.read
就是这么做的)?
您可以使用查询字符串参数,通过使用日期范围参数将数据减少到当前日期。
2012年7月13日MO的示例:(开始/结束月份开始时没有零索引,{00-11})。
http://ichart.finance.yahoo.com/table.csv?s=MO&a=06&b=13&c=2012&d=6&e=13&f=2012&g=d
此处的api说明:http://etraderzone.com/free-scripts/47-historical-quotes-yahoo.html