yfinance 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/yfinance.rb +9 -4
- data/test/yfinance_test.rb +25 -11
- 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: ec8af8ce71dfa3e2005b7dc2463e9fed6bd74d0b
|
4
|
+
data.tar.gz: 6a7a22cf66e59f1a1bcc021f318a64d4287a480d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b644597c8b49388e83fa5b6bef8d1d288717da78972325cca955af5d702c0e6df7dadbb711547414674131bb5929bf15570a714490550ef28a155c7d862cb271
|
7
|
+
data.tar.gz: 7fae35e0492dc94a19fc0be530046377c4d9190a53a9a939623a2d7e22d55a628a22e7ce4cf6735b317defb65a9c20f5cde517a3aeb397f1d3b9bcc393d7d59a
|
data/lib/yfinance.rb
CHANGED
@@ -5,6 +5,8 @@ require 'json'
|
|
5
5
|
|
6
6
|
class Yfinance
|
7
7
|
|
8
|
+
attr_reader :error_message
|
9
|
+
|
8
10
|
class YahooFinanceException < Exception
|
9
11
|
end
|
10
12
|
|
@@ -110,6 +112,7 @@ class Yfinance
|
|
110
112
|
def initialize(max_concurrency: 20, memoize: false)
|
111
113
|
@hydra = Typhoeus::Hydra.new(max_concurrency: max_concurrency)
|
112
114
|
Typhoeus::Config.memoize = memoize
|
115
|
+
@error_message = "Symbol not found"
|
113
116
|
end
|
114
117
|
|
115
118
|
def run
|
@@ -144,8 +147,9 @@ class Yfinance
|
|
144
147
|
|
145
148
|
def quotes(symbols_array, columns_array = [:symbol, :last_trade_price, :last_trade_date, :change, :previous_close], options = {})
|
146
149
|
options[:raw] ||= true
|
147
|
-
ret = []
|
150
|
+
ret = Hash[symbols_array.each_slice(1).to_a]
|
148
151
|
symb_str = symbols_array.join("+")
|
152
|
+
columns_array.unshift(:symbol)
|
149
153
|
columns = "#{columns_array.map {|col| COLUMNS[col] }.join('')}"
|
150
154
|
url = "http://download.finance.yahoo.com/d/quotes.csv?s=#{URI.escape(symb_str)}&f=#{columns}"
|
151
155
|
request = Typhoeus::Request.new(url, method: :get)
|
@@ -153,12 +157,13 @@ class Yfinance
|
|
153
157
|
begin
|
154
158
|
result = CSV.parse(response.body, headers: columns_array)
|
155
159
|
result.each do |row|
|
156
|
-
|
160
|
+
h = row.to_hash
|
161
|
+
ret[h[:symbol]] = h
|
162
|
+
return ret
|
157
163
|
end
|
158
164
|
rescue
|
159
|
-
|
165
|
+
return {error: @error_message}
|
160
166
|
end
|
161
|
-
return ret
|
162
167
|
end
|
163
168
|
@hydra.queue(request)
|
164
169
|
@hydra.run
|
data/test/yfinance_test.rb
CHANGED
@@ -3,37 +3,51 @@ require 'test_helper.rb'
|
|
3
3
|
class YfinanceTest < Minitest::Test
|
4
4
|
def test_it_receives_quotes_for_valid_symbols
|
5
5
|
yf = Yfinance.new
|
6
|
-
res = yf.quotes(["AAPL"
|
6
|
+
res = yf.quotes(["AAPL"])
|
7
7
|
refute_empty res
|
8
8
|
end
|
9
9
|
|
10
|
+
def test_it_returns_a_hash
|
11
|
+
yf = Yfinance.new
|
12
|
+
res = yf.quotes(["MSFT", "TEP.L"])
|
13
|
+
assert res.kind_of?(Hash), "It does NOT return a hash"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_it_always_adds_the_symbol_to_the_resulting_hash
|
17
|
+
yf = Yfinance.new
|
18
|
+
res = yf.quotes(["TWTR", "BARC.L"], [:last_trade_date, :close])
|
19
|
+
assert_equal res["TWTR"][:symbol], "TWTR"
|
20
|
+
end
|
21
|
+
|
10
22
|
def test_it_work_for_an_invalid_symbol
|
11
23
|
yf = Yfinance.new
|
12
24
|
res = yf.quotes(["TWTR", "MADASDFASD", "AAPL"])
|
13
25
|
assert_equal res.length, 3
|
14
26
|
end
|
15
|
-
|
27
|
+
#
|
16
28
|
def test_it_works_requesting_all_data_for_valid_symbols
|
17
29
|
yf = Yfinance.new
|
18
30
|
res = yf.quotes_all_info(["MSFT", "TWTR", "TEP.L"])
|
19
|
-
|
31
|
+
# p res
|
32
|
+
assert_equal res.length, 3
|
33
|
+
assert_equal "MSFT", res["MSFT"][:symbol]
|
20
34
|
end
|
21
|
-
|
35
|
+
#
|
22
36
|
def test_it_works_requesting_all_data_for_one_invalid_symbol
|
23
37
|
yf = Yfinance.new
|
24
|
-
res = yf.quotes_all_info(["
|
25
|
-
assert_equal res[:
|
38
|
+
res = yf.quotes_all_info(["asdf"])
|
39
|
+
assert_equal yf.error_message, res[:error]
|
26
40
|
end
|
27
41
|
|
28
|
-
def
|
42
|
+
def test_it_returns_an_error_for_a_mix_of_valid_and_invalid__symbols
|
29
43
|
yf = Yfinance.new
|
30
|
-
res = yf.quotes_all_info(["AAPL", "
|
31
|
-
assert_equal res[:
|
44
|
+
res = yf.quotes_all_info(["AAPL", "bcxza", "MSFT"])
|
45
|
+
assert_equal yf.error_message, res[:error]
|
32
46
|
end
|
33
|
-
|
47
|
+
#
|
34
48
|
def test_historical_data_works
|
35
49
|
yf = Yfinance.new
|
36
|
-
res = Proc.new { |resp|
|
50
|
+
res = Proc.new { |resp| assert resp["MSFT"].kind_of?(Array)}
|
37
51
|
yf.add_historical_data_query(['MSFT'], '2013-01-01', Date.today, {period: :daily}, &res)
|
38
52
|
yf.run
|
39
53
|
end
|
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.10"
|
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.10
|
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-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|