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

我正在完成一项任务,我使用雅虎的股票价格系统从网上检索几个股票价格。 不幸的是,我需要使用的Yahoo API会返回一个.csv文件,该文件显然包含每天交易股票的行数,对于我正在使用的股票至少有5000行,超过10行其中一些线路( 例如 )。

我只关心当前的价格,这是在第二行。

我目前正在这样做:

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. 有没有办法从Yahoo 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