Я работаю над заданием, где я получаю несколько цен на акции из Интернета, используя систему цен на акции Yahoo. К сожалению, API Yahoo, который я должен использовать, возвращает файл .csv файл, который, по-видимому, содержит строку для каждого дня торговли акциями, что составляет не менее 5 тысяч строк для акций, с которыми я работаю, и более 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
…но это очень медленно.
Вся задержка происходит из-за получения файла или из-за того, как я с ним справляюсь?
io.read
читает весь файл?Есть ли способ загрузить только первые пару строк из CSV-файла Yahoo?
Если ответы на вопросы 1 и 2 не делают этот вопрос неактуальным, есть ли лучший способ его обработки, который не требует просмотра всего файла (при условии, что это то, что делает
io.read
)?
open("http://...") { |io| puts File.read(io.path) }
выводит содержимое загруженной веб-страницы. Таким образом, методopen
загружает весь файл еще до того, как он попадет в ваш блок. К сожалению, я не знаю, как частично загрузить файл (раньше в этом не было необходимости), поэтому я не могу ответить на 2 или 3, однако я почти уверен, что вы не сможете использоватьopen
для этого. - person David Miani   schedule 16.07.2012