Ruby 如何从远程URL的长CSV的前几行之一快速获取字符串?
我正在做一个作业,我使用雅虎的股票价格系统从网上检索几个股票价格。不幸的是,I'm required to use返回一个.csv文件,该文件显然在股票交易的每一天都包含一行代码,对于我正在处理的股票,至少有5000行代码,而对于某些股票,则超过10000行代码() 不过,我只关心第二行的当前价格 我目前正在这样做: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
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
正在读取整个文件吗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库可能不太走运。