yahoofinance Ruby API の戻り値の問題
概要
配列と文字列の結合は知っていますが、この問題は非常に特定のものです。 私が取り組んでいるAPI:
私が欲しいのは、配列内のすべての hq.close 値です。例えば:
[
{'GOOG' => [744.75,751.48,744.56,744.09,757.84]},
{'MSFT' => {value1,value2, .....}}
]
上記のハッシュ配列を取得できない理由は、 hq.close の印刷用の個別の値を設定しますが、取得方法がわかりません すべての hq.close を 1 つの配列にまとめる
以下のコードに基づいて、私の出力は行で区切られています:(しかし、私はそれを上記の形式にしたい)
GOOG -> 744.75
GOOG -> 751.48
GOOG -> 744.56
GOOG -> 744.09
GOOG -> 757.84
MSFT -> 29.2
MSFT -> 28.95
MSFT -> 28.98
MSFT -> 29.28
MSFT -> 29.78
++++++++++++++++++++++++++ コード:
require 'yahoofinance'
#Stock symbols
user_input = ['GOOG','MSFT']
user_input.each do|symb|
YahooFinance::get_HistoricalQuotes( symb,
Date.parse('2012-10-06'),
Date.today()) do |hq|
puts "#{symb} -> #{hq.close}"
end
end
解決策
各値を注入してハッシュを構築できます。
require 'yahoofinance'
company_symbols = ['GOOG','MSFT']
start_date = Date.parse('2012-10-06')
stop_date = Date.today()
company_symbols.inject({}) do |memo, value|
memo[value] ||= []
YahooFinance.get_HistoricalQuotes(value, start_date, stop_date) do |hq|
memo[value] << hq.close
end
memo
end
# => {"GOOG"=>[744.75, 751.48, 744.56, 744.09, 757.84], "MSFT"=>[29.2, 28.95, 28.98, 29.28, 29.78]}