如何快速从远程URL的长CSV的前几行中获取字符串



我正在执行一项任务,使用雅虎的股票价格系统从网上检索几个股票价格。不幸的是,我需要使用的雅虎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

……但它真的很慢。

  1. 所有的延迟是因为拿到文件,还是因为我处理文件的方式?io.read是否正在读取整个文件?

  2. 有没有办法只下载雅虎CSV文件的前几行?

  3. 如果问题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

最新更新