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

Ruby 如何从远程URL的长CSV的前几行之一快速获取字符串?,ruby,csv,open-uri,Ruby,Csv,Open Uri,我正在做一个作业,我使用雅虎的股票价格系统从网上检索几个股票价格。不幸的是,I'm required to use返回一个.csv文件,该文件显然在股票交易的每一天都包含一行代码,对于我正在处理的股票,至少有5000行代码,而对于某些股票,则超过10000行代码() 不过,我只关心第二行的当前价格 我目前正在这样做: require 'open-uri' def get_ticker_price(stock) open("http://ichart.finance.yahoo.com/ta

我正在做一个作业,我使用雅虎的股票价格系统从网上检索几个股票价格。不幸的是,I'm required to use返回一个.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})

    api说明如下:

    这听起来很可疑:open命令的工作方式似乎是首先将下载的网页保存到一个临时文件,然后将该临时文件IO对象传递给给定的块。Ie
    open(“http://...“{io | put File.read(io.path)}
    输出下载网页的内容。因此,
    open
    方法会在文件到达您的块之前下载整个文件。不幸的是,我不知道如何部分下载一个文件(以前从来没有必要这样做),因此我无法回答2或3,但是我非常确定您将无法使用
    open
    来完成此操作。如果您使用报价服务,您可以通过在查询字符串中指定最后交易日期来减少文件大小。示例:如果您可以使用其他服务,请在此处提供更多信息:事实上,我发现您正在使用的服务有一个更好的参考。下面是一个获取今天数据的示例:谢谢,蒂姆!这解决了我的问题,但我将推迟一两天接受它,看看是否有其他人能想出一种Ruby方法来做这件事,因为从技术上讲,这是我要问的问题。:)您的问题的第一条评论链接到另一个SO问题,该问题的答案在哪里。@LarsHaugseth:该问题的两个答案都涉及低级套接字操作,正如其中一个答案的作者所指出的,这并不是解决问题的真正的Ruby方法。因为这个问题已经问了3年了,所以我认为现在是否有更干净的解决方案(稍后的几个Ruby版本)值得等待一段时间。看起来运行服务的服务器不支持“Range”HTTP请求头,所以使用纯HTTP库可能不太走运。