yfinance 1.0.10 → 1.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yfinance.rb +12 -5
- data/test/yfinance_test.rb +9 -7
- data/yfinance.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 246dc6eddd72d55071b137e94a5adc17850be66c
|
4
|
+
data.tar.gz: 13f32b0307fa2bdfd2404c9e2db65bb15afd01d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7e3ed3d417f8b921f8d71945533d73d31b0d6b02d4ced8b5ef24856d5cb147dbfcba4cc662627b3aaa9ffa6023931730dc998be97f44b8b9b9c02ffb450aa28
|
7
|
+
data.tar.gz: 367305c56a9a76add28e559bcfe0dc4869b3e0dea91501bd9ab43afeb3591cbb7d9b6e5317004ab13b48b2be1923f3d7b2e3b69ad507ff059ca37d944ba90cf4
|
data/lib/yfinance.rb
CHANGED
@@ -101,6 +101,9 @@ class Yfinance
|
|
101
101
|
:stock_exchange => "x",
|
102
102
|
:dividend_yield => "y"
|
103
103
|
}
|
104
|
+
|
105
|
+
# these options do not mess up the CSV parser by including ',' in the data fields
|
106
|
+
SAVE_OPTIONS = [:symbol, :name, :average_daily_volume, :dividend_per_share, :earnings_per_share, :eps_estimate_current_year, :eps_estimate_next_year, :eps_estimate_next_quarter, :low_52_weeks, :high_52_weeks, :market_capitalization, :ebitda, :moving_average_50_day, :moving_average_200_day, :ex_dividend_date, :peg_ratio, :price_eps_estimate_current_year, :shares_owned, :volume, :stock_exchange, :dividend_yield, :change, :previous_close, :last_trade_trade]
|
104
107
|
|
105
108
|
HISTORICAL_MODES = {
|
106
109
|
:daily => "d",
|
@@ -126,7 +129,7 @@ class Yfinance
|
|
126
129
|
options[:raw] ||= true
|
127
130
|
options[:period] ||= :daily
|
128
131
|
symbols_array.each do |symbol|
|
129
|
-
symbol = symbol.rstrip
|
132
|
+
symbol = symbol.rstrip.upcase
|
130
133
|
url = "http://ichart.finance.yahoo.com/table.csv?s=#{URI.escape(symbol)}&d=#{end_date.month-1}&e=#{end_date.day}&f=#{end_date.year}&g=#{HISTORICAL_MODES[options[:period]]}&a=#{start_date.month-1}&b=#{start_date.day}&c=#{start_date.year}&ignore=.csv"
|
131
134
|
@hydra.queue(make_request(url, symbol, options, callback))
|
132
135
|
end
|
@@ -147,6 +150,7 @@ class Yfinance
|
|
147
150
|
|
148
151
|
def quotes(symbols_array, columns_array = [:symbol, :last_trade_price, :last_trade_date, :change, :previous_close], options = {})
|
149
152
|
options[:raw] ||= true
|
153
|
+
symbols_array = symbols_array.map(&:upcase)
|
150
154
|
ret = Hash[symbols_array.each_slice(1).to_a]
|
151
155
|
symb_str = symbols_array.join("+")
|
152
156
|
columns_array.unshift(:symbol)
|
@@ -158,9 +162,13 @@ class Yfinance
|
|
158
162
|
result = CSV.parse(response.body, headers: columns_array)
|
159
163
|
result.each do |row|
|
160
164
|
h = row.to_hash
|
161
|
-
|
162
|
-
|
165
|
+
if h[:name] == h[:symbol]
|
166
|
+
ret[h[:symbol]] = nil
|
167
|
+
else
|
168
|
+
ret[h[:symbol]] = h
|
169
|
+
end
|
163
170
|
end
|
171
|
+
return ret
|
164
172
|
rescue
|
165
173
|
return {error: @error_message}
|
166
174
|
end
|
@@ -170,8 +178,7 @@ class Yfinance
|
|
170
178
|
end
|
171
179
|
|
172
180
|
def quotes_all_info(symbols_array)
|
173
|
-
|
174
|
-
quotes(symbols_array, columns_array)
|
181
|
+
quotes(symbols_array, SAVE_OPTIONS)
|
175
182
|
end
|
176
183
|
|
177
184
|
private
|
data/test/yfinance_test.rb
CHANGED
@@ -21,28 +21,30 @@ class YfinanceTest < Minitest::Test
|
|
21
21
|
|
22
22
|
def test_it_work_for_an_invalid_symbol
|
23
23
|
yf = Yfinance.new
|
24
|
-
res = yf.
|
24
|
+
res = yf.quotes_all_info(["TWTR", "MADASDFASD", "AAPL"])
|
25
25
|
assert_equal res.length, 3
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def test_it_works_requesting_all_data_for_valid_symbols
|
29
29
|
yf = Yfinance.new
|
30
30
|
res = yf.quotes_all_info(["MSFT", "TWTR", "TEP.L"])
|
31
|
-
|
32
|
-
assert_equal res.length, 3
|
31
|
+
assert_equal 3, res.length
|
33
32
|
assert_equal "MSFT", res["MSFT"][:symbol]
|
33
|
+
assert_equal "TWTR", res["TWTR"][:symbol]
|
34
|
+
assert_equal "TEP.L", res["TEP.L"][:symbol]
|
34
35
|
end
|
35
|
-
|
36
|
+
|
36
37
|
def test_it_works_requesting_all_data_for_one_invalid_symbol
|
37
38
|
yf = Yfinance.new
|
38
39
|
res = yf.quotes_all_info(["asdf"])
|
39
|
-
|
40
|
+
assert_nil res["ASDF"]
|
40
41
|
end
|
41
42
|
|
42
43
|
def test_it_returns_an_error_for_a_mix_of_valid_and_invalid__symbols
|
43
44
|
yf = Yfinance.new
|
44
45
|
res = yf.quotes_all_info(["AAPL", "bcxza", "MSFT"])
|
45
|
-
assert_equal
|
46
|
+
assert_equal 3, res.length
|
47
|
+
assert_nil res["BCXZA"]
|
46
48
|
end
|
47
49
|
#
|
48
50
|
def test_historical_data_works
|
data/yfinance.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'yfinance'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "yfinance"
|
8
|
-
spec.version = "1.0.
|
8
|
+
spec.version = "1.0.11"
|
9
9
|
spec.authors = ["Alexander Potrykus"]
|
10
10
|
spec.email = ["alexander@risklog.io"]
|
11
11
|
spec.summary = %q{Fetches Yahoo! Finance data using parallel HTTP requests.}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yfinance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Potrykus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|