eodhd.rb 0.13.4
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 +7 -0
- data/Gemfile +3 -0
- data/README.md +73 -0
- data/eodhd.rb.gemspec +26 -0
- data/lib/Eodhd/Client.rb +85 -0
- data/lib/Eodhd/EodBulkLastDay.rb +54 -0
- data/lib/Eodhd/EodData.rb +54 -0
- data/lib/Eodhd/Exchange.rb +48 -0
- data/lib/Eodhd/ExchangeSymbol.rb +48 -0
- data/lib/Hash/x_www_form_urlencode.rb +7 -0
- data/lib/Thoran/Hash/XWwwFormUrlencode/x_www_form_urlencode.rb +26 -0
- data/lib/Thoran/String/UrlEncode/url_encode.rb +26 -0
- data/lib/eodhd.rb +60 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7c96a54dc7124036098037626b7356f343bb1f43d647b1c17c16b4e9e11cd6c6
|
4
|
+
data.tar.gz: 71c645d8e47a50971d44b1742e727ebe1497d312fd0ccf4af504aa796147964a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b20d4cddf4eee55eb6c99600e54618ab9fb236c2a0b00a593f838eaace88d0d7278994c1ad8019ff7db5b53525aff16b1a9b20c820a5e40ae371e14b2c097ec7
|
7
|
+
data.tar.gz: fcabde4719ecd553972d3fedaa29652435e0007813c4cb538b0065f199c427e4a4ba7e38774c22c8c9edc1a4245b3816e9daca404ab4f5f1476d1fa227dad7fe
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# eodhd.rb
|
2
|
+
|
3
|
+
## Description
|
4
|
+
|
5
|
+
Access the eodhd.com API with Ruby.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
```ruby
|
11
|
+
gem 'eodhd.rb'
|
12
|
+
```
|
13
|
+
And then execute:
|
14
|
+
```bash
|
15
|
+
$ bundle
|
16
|
+
```
|
17
|
+
Or install it yourself as:
|
18
|
+
```bash
|
19
|
+
$ gem install eodhd.rb
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
### Setup
|
25
|
+
```ruby
|
26
|
+
api_token = 'api_token'
|
27
|
+
eodhd_api ||= Eodhd.new(api_token: api_token)
|
28
|
+
```
|
29
|
+
|
30
|
+
### List of Exchanges
|
31
|
+
```ruby
|
32
|
+
eodhd_api.exchanges
|
33
|
+
```
|
34
|
+
|
35
|
+
### List of Exchange Symbols
|
36
|
+
```ruby
|
37
|
+
exchange = eodhd_api.exchanges.first
|
38
|
+
|
39
|
+
eod_api.exchange_symbols(exchange: exchange)
|
40
|
+
# OR
|
41
|
+
eod_api.exchange_symbols(exchange_code: exchange.code)
|
42
|
+
```
|
43
|
+
|
44
|
+
### Retrieve EOD Data For One Symbol
|
45
|
+
```ruby
|
46
|
+
exchange = eodhd_api.exchanges.first
|
47
|
+
exchange_symbol = eod_api.exchange_symbols(exchange: exchange).first
|
48
|
+
|
49
|
+
eod_api.eod_data(exchange: exchange, exchange_symbol: exchange_symbol)
|
50
|
+
# OR
|
51
|
+
eod_api.eod_data(exchange_code: exchange.code, exchange_symbol: exchange_symbol)
|
52
|
+
# OR
|
53
|
+
eod_api.eod_data(exchange: exchange, symbol: exchange_symbol.code)
|
54
|
+
# OR
|
55
|
+
eod_api.eod_data(exchange_code: exchange.code, symbol: exchange_symbol.code)
|
56
|
+
```
|
57
|
+
|
58
|
+
### Retrieve EOD Data For Multiple Symbols For One Date
|
59
|
+
```ruby
|
60
|
+
exchange = eodhd_api.exchanges.first
|
61
|
+
|
62
|
+
eod_api.eod_bulk_last_day(exchange: exchange, date: Date.today)
|
63
|
+
# OR
|
64
|
+
eod_api.eod_bulk_last_day(exchange_code: exchange.code, date: Date.today)
|
65
|
+
```
|
66
|
+
|
67
|
+
## Contributing
|
68
|
+
|
69
|
+
1. Fork it ( https://github.com/thoran/eodhd.rb/fork )
|
70
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
71
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
72
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
73
|
+
5. Create a new pull request
|
data/eodhd.rb.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'eodhd.rb'
|
3
|
+
|
4
|
+
spec.version = '0.13.4'
|
5
|
+
spec.date = '2024-10-09'
|
6
|
+
|
7
|
+
spec.summary = "Access the eodhd.com API with Ruby."
|
8
|
+
spec.description = "Access the eodhd.com API with Ruby."
|
9
|
+
|
10
|
+
spec.author = 'thoran'
|
11
|
+
spec.email = 'code@thoran.com'
|
12
|
+
spec.homepage = 'http://github.com/thoran/eodhd.rb'
|
13
|
+
spec.license = 'Ruby'
|
14
|
+
|
15
|
+
spec.required_ruby_version = '>= 2.5'
|
16
|
+
|
17
|
+
spec.add_dependency('http.rb')
|
18
|
+
spec.files = [
|
19
|
+
'eodhd.rb.gemspec',
|
20
|
+
'Gemfile',
|
21
|
+
Dir['lib/**/*.rb'],
|
22
|
+
'README.md',
|
23
|
+
Dir['test/**/*.rb']
|
24
|
+
].flatten
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
end
|
data/lib/Eodhd/Client.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# Eodhd/Client.rb
|
2
|
+
# Eodhd::Client
|
3
|
+
|
4
|
+
require 'Hash/x_www_form_urlencode'
|
5
|
+
gem 'http.rb'
|
6
|
+
require 'http.rb'
|
7
|
+
require 'json'
|
8
|
+
require 'logger'
|
9
|
+
|
10
|
+
class Eodhd
|
11
|
+
class Client
|
12
|
+
|
13
|
+
API_HOST = 'eodhd.com'
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def log_filename
|
17
|
+
File.expand_path('~/log/eodhd/log.txt')
|
18
|
+
end
|
19
|
+
|
20
|
+
def log_file
|
21
|
+
File.open(log_filename, File::WRONLY | File::APPEND | File::CREAT)
|
22
|
+
end
|
23
|
+
|
24
|
+
def logger
|
25
|
+
@logger ||= Logger.new(log_file, 'daily')
|
26
|
+
end
|
27
|
+
end # class << self
|
28
|
+
|
29
|
+
# This endpoint always returns json regardless of what fmt is specified.
|
30
|
+
def exchanges_list
|
31
|
+
path = "/api/exchanges-list"
|
32
|
+
do_request(request_string: request_string(path))
|
33
|
+
end
|
34
|
+
|
35
|
+
def exchange_symbol_list(exchange_code:)
|
36
|
+
path = "/api/exchange-symbol-list/#{exchange_code}"
|
37
|
+
do_request(request_string: request_string(path))
|
38
|
+
end
|
39
|
+
|
40
|
+
def eod_data(exchange_id:, symbol:, period:, from: nil, to: nil)
|
41
|
+
path = "/api/eod/#{symbol}.#{exchange_id}"
|
42
|
+
args = {period: period}
|
43
|
+
args.merge!(from: from) if from
|
44
|
+
args.merge!(to: to) if to
|
45
|
+
do_request(request_string: request_string(path), args: args)
|
46
|
+
end
|
47
|
+
|
48
|
+
def eod_bulk_last_day(exchange_id:, date:)
|
49
|
+
path = "/api/eod-bulk-last-day/#{exchange_id}"
|
50
|
+
args = {date: date}
|
51
|
+
do_request(request_string: request_string(path), args: args)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def initialize(api_token:)
|
57
|
+
@api_token = api_token
|
58
|
+
end
|
59
|
+
|
60
|
+
def request_string(path)
|
61
|
+
"https://#{API_HOST}#{path}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def log_args?(args)
|
65
|
+
!args.values.all?(&:nil?)
|
66
|
+
end
|
67
|
+
|
68
|
+
def log(request_string:, args:)
|
69
|
+
log_string = "GET #{request_string}"
|
70
|
+
if log_args?(args)
|
71
|
+
log_string << "?#{args.x_www_form_urlencode}"
|
72
|
+
end
|
73
|
+
self.class.logger.info(log_string)
|
74
|
+
end
|
75
|
+
|
76
|
+
def do_request(request_string:, args: {})
|
77
|
+
log(request_string: request_string, args: args)
|
78
|
+
api_token = args[:api_token] || @api_token
|
79
|
+
fmt = args[:fmt] || 'json'
|
80
|
+
args.merge!(api_token: api_token, fmt: fmt)
|
81
|
+
response = HTTP.get(request_string, args)
|
82
|
+
JSON.parse(response.body)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Eodhd/EodBulkLastDay.rb
|
2
|
+
# Eodhd::EodBulkLastDay
|
3
|
+
|
4
|
+
class Eodhd
|
5
|
+
class EodBulkLastDay
|
6
|
+
class << self
|
7
|
+
def all(client: nil, api_token: nil, exchange_code:, date:)
|
8
|
+
load(client: client, api_token: api_token, exchange_code: exchange_code, date:)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def load(client: nil, api_token: nil, exchange_code:, date:)
|
14
|
+
client ||= Client.new(api_token: api_token)
|
15
|
+
client.eod_bulk_last_day(exchange_id: exchange_code, date: date).collect do |eod_bulk_last_day|
|
16
|
+
self.new(
|
17
|
+
code: eod_bulk_last_day['code'],
|
18
|
+
exchange_short_name: eod_bulk_last_day['exchange_short_name'],
|
19
|
+
date: eod_bulk_last_day['date'],
|
20
|
+
open: eod_bulk_last_day['open'],
|
21
|
+
high: eod_bulk_last_day['high'],
|
22
|
+
low: eod_bulk_last_day['low'],
|
23
|
+
close: eod_bulk_last_day['close'],
|
24
|
+
adjusted_close: eod_bulk_last_day['adjusted_close'],
|
25
|
+
volume: eod_bulk_last_day['volume']
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end # class << self
|
30
|
+
|
31
|
+
attr_reader\
|
32
|
+
:code,
|
33
|
+
:exchange_short_name,
|
34
|
+
:date,
|
35
|
+
:open,
|
36
|
+
:high,
|
37
|
+
:low,
|
38
|
+
:close,
|
39
|
+
:adjusted_close,
|
40
|
+
:volume
|
41
|
+
|
42
|
+
def initialize(code:, exchange_short_name:, date:, open:, high:, low:, close:, adjusted_close:, volume:)
|
43
|
+
@code = code
|
44
|
+
@exchange_short_name = exchange_short_name
|
45
|
+
@date = date
|
46
|
+
@open = open
|
47
|
+
@high = high
|
48
|
+
@low = low
|
49
|
+
@close = close
|
50
|
+
@adjusted_close = adjusted_close
|
51
|
+
@volume = volume
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Eodhd/EodData.rb
|
2
|
+
# Eodhd::EodData
|
3
|
+
|
4
|
+
class Eodhd
|
5
|
+
class EodData
|
6
|
+
class << self
|
7
|
+
def all(client: nil, api_token: nil, exchange_code:, symbol:, period: 'd', from: nil, to: nil)
|
8
|
+
load(client: client, api_token: api_token, exchange_code: exchange_code, symbol: symbol, period: period, from: from, to: to)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def load(client: nil, api_token: nil, exchange_code:, symbol:, period:, from:, to:)
|
14
|
+
client ||= Client.new(api_token: api_token)
|
15
|
+
client.eod_data(exchange_id: exchange_code, symbol: symbol, period: period, from: from, to: to).collect do |eod_data|
|
16
|
+
self.new(
|
17
|
+
exchange_code: eod_data['exchange_code'],
|
18
|
+
symbol: eod_data['symbol'],
|
19
|
+
date: eod_data['date'],
|
20
|
+
open: eod_data['open'],
|
21
|
+
high: eod_data['high'],
|
22
|
+
low: eod_data['low'],
|
23
|
+
close: eod_data['close'],
|
24
|
+
adjusted_close: eod_data['adjusted_close'],
|
25
|
+
volume: eod_data['volume']
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end # class << self
|
30
|
+
|
31
|
+
attr_reader\
|
32
|
+
:exchange_code,
|
33
|
+
:symbol,
|
34
|
+
:date,
|
35
|
+
:open,
|
36
|
+
:high,
|
37
|
+
:low,
|
38
|
+
:close,
|
39
|
+
:adjusted_close,
|
40
|
+
:volume
|
41
|
+
|
42
|
+
def initialize(exchange_code:, symbol:, date:, open:, high:, low:, close:, adjusted_close:, volume:)
|
43
|
+
@exchange_code = exchange_code
|
44
|
+
@symbol = symbol
|
45
|
+
@date = date
|
46
|
+
@open = open
|
47
|
+
@high = high
|
48
|
+
@low = low
|
49
|
+
@close = close
|
50
|
+
@adjusted_close = adjusted_close
|
51
|
+
@volume = volume
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Eodhd/Exchange.rb
|
2
|
+
# Eodhd::Exchange
|
3
|
+
|
4
|
+
class Eodhd
|
5
|
+
class Exchange
|
6
|
+
class << self
|
7
|
+
def all(client: nil, api_token: nil)
|
8
|
+
load(client: client, api_token: api_token)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def load(client: nil, api_token: nil)
|
14
|
+
client ||= Client.new(api_token: api_token)
|
15
|
+
client.exchanges_list.collect do |exchange|
|
16
|
+
self.new(
|
17
|
+
name: exchange['Name'],
|
18
|
+
code: exchange['Code'],
|
19
|
+
operating_mic: exchange['OperatingMIC'],
|
20
|
+
country: exchange['Country'],
|
21
|
+
currency: exchange['Currency'],
|
22
|
+
country_iso2: exchange['CountryISO2'],
|
23
|
+
country_iso3: exchange['CountryISO3']
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end # class << self
|
28
|
+
|
29
|
+
attr_reader\
|
30
|
+
:name,
|
31
|
+
:code,
|
32
|
+
:operating_mic,
|
33
|
+
:country,
|
34
|
+
:currency,
|
35
|
+
:country_iso2,
|
36
|
+
:country_iso3
|
37
|
+
|
38
|
+
def initialize(name:, code:, operating_mic:, country:, currency:, country_iso2:, country_iso3:)
|
39
|
+
@name = name
|
40
|
+
@code = code
|
41
|
+
@operating_mic = operating_mic
|
42
|
+
@country = country
|
43
|
+
@currency = currency
|
44
|
+
@country_iso2 = country_iso2
|
45
|
+
@country_iso3 = country_iso3
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Eodhd/ExchangeSymbol.rb
|
2
|
+
# Eodhd::ExchangeSymbol
|
3
|
+
|
4
|
+
class Eodhd
|
5
|
+
class ExchangeSymbol
|
6
|
+
class << self
|
7
|
+
def all(client: nil, api_token: nil, exchange_code: nil)
|
8
|
+
load(client: client, api_token: api_token, exchange_code: exchange_code)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def load(client: nil, api_token: nil, exchange_code: nil)
|
14
|
+
client ||= Client.new(api_token: api_token)
|
15
|
+
client.exchange_symbol_list(exchange_code: exchange_code).collect do |symbol|
|
16
|
+
self.new(
|
17
|
+
code: symbol['Code'],
|
18
|
+
name: symbol['Name'],
|
19
|
+
country: symbol['Country'],
|
20
|
+
exchange: symbol['Exchange'],
|
21
|
+
currency: symbol['Currency'],
|
22
|
+
type: symbol['Type'],
|
23
|
+
isin: symbol['Isin']
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end # class << self
|
28
|
+
|
29
|
+
attr_reader\
|
30
|
+
:code,
|
31
|
+
:name,
|
32
|
+
:country,
|
33
|
+
:exchange,
|
34
|
+
:currency,
|
35
|
+
:type,
|
36
|
+
:isin
|
37
|
+
|
38
|
+
def initialize(code:, name:, country:, exchange:, currency:, type:, isin:)
|
39
|
+
@code = code
|
40
|
+
@name = name
|
41
|
+
@country = country
|
42
|
+
@exchange = exchange
|
43
|
+
@currency = currency
|
44
|
+
@type = type
|
45
|
+
@isin = isin
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Thoran/Hash/XWwwFormUrlEncode/x_www_form_urlencode.rb
|
2
|
+
# Thoran::Hash::XWwwFormUrlEncode#x_www_form_urlencode
|
3
|
+
|
4
|
+
# 20241009
|
5
|
+
# 0.2.0
|
6
|
+
|
7
|
+
# Changes since 0.1:
|
8
|
+
# -/0: (The class name and the snake case name are consistent now.)
|
9
|
+
# 1. /XWWWFormUrlEncode/XWwwFormUrlEncode/
|
10
|
+
|
11
|
+
require 'Thoran/String/UrlEncode/url_encode'
|
12
|
+
|
13
|
+
module Thoran
|
14
|
+
module Hash
|
15
|
+
module XWwwFormUrlEncode
|
16
|
+
|
17
|
+
def x_www_form_url_encode(joiner = '&')
|
18
|
+
inject([]){|a,e| a << "#{e.first.to_s.url_encode}=#{e.last.to_s.url_encode}" unless e.last.nil?; a}.join(joiner)
|
19
|
+
end
|
20
|
+
alias_method :x_www_form_urlencode, :x_www_form_url_encode
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Hash.send(:include, Thoran::Hash::XWwwFormUrlEncode)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Thoran/String/UrlEncode/url_encode.rb
|
2
|
+
# Thoran::String::UrlEncode#url_encode
|
3
|
+
|
4
|
+
# 20160505
|
5
|
+
# 0.3.0
|
6
|
+
|
7
|
+
# Acknowledgements: I've simply ripped off and refashioned the code from the CGI module!...
|
8
|
+
|
9
|
+
# Changes since 0.2:
|
10
|
+
# 1. + Thoran namespace.
|
11
|
+
|
12
|
+
module Thoran
|
13
|
+
module String
|
14
|
+
module UrlEncode
|
15
|
+
|
16
|
+
def url_encode
|
17
|
+
self.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
|
18
|
+
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
19
|
+
end.tr(' ', '+')
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
String.send(:include, Thoran::String::UrlEncode)
|
data/lib/eodhd.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# Eodhd.rb
|
2
|
+
# Eodhd
|
3
|
+
|
4
|
+
# 20241009
|
5
|
+
# 0.13.4
|
6
|
+
|
7
|
+
# Changes since 0.12:
|
8
|
+
# -/0: Add logging.
|
9
|
+
# 1. + require 'logger'
|
10
|
+
# 2. + Eodhd::Client.log_filename
|
11
|
+
# 3. + Eodhd::Client.log_file
|
12
|
+
# 4. + Eodhd::Client.logger
|
13
|
+
# 5. + Eodhd::Client#log
|
14
|
+
# 6. ~ Eodhd::Client#do_request: Call log().
|
15
|
+
# 0/1: Add args to the log string.
|
16
|
+
# 7. ~ Eodhd::Client#do_request: Add the args to the log string.
|
17
|
+
# 1/2: Log '?' and args only if args are present.
|
18
|
+
# 8. ~ Eodhd::Client#log: Construct the log string in the method, constructing a log string with arguments if present.
|
19
|
+
# 9. ~ Eodhd::Client#do_request: Call the new interface for log().
|
20
|
+
# 2/3: Fix logging '?' for when args values are nil.
|
21
|
+
# 10. + Eod::Client#log_args? Only need to check for whether the values are nil, since this will still work for empty args also.
|
22
|
+
# 11. ~ Eod::Client#log: Use log_args?
|
23
|
+
# 3/4: + eod.rb.gemspec, + additional necessary library files
|
24
|
+
# 12. + eod.rb.gemspec
|
25
|
+
# 13. ~ Gemfile: Use gemspec.
|
26
|
+
# 14. + lib/Hash/x_www_form_urlencode.rb
|
27
|
+
# 15. + lib/Thoran/Hash/XWwwFormUrlEncode/x_www_form_url_encode.rb
|
28
|
+
# 16. + lib/Thoran/String/UrlEncode/url_encode.rb
|
29
|
+
|
30
|
+
require_relative 'Eodhd/Client'
|
31
|
+
require_relative 'Eodhd/EodBulkLastDay'
|
32
|
+
require_relative 'Eodhd/EodData'
|
33
|
+
require_relative 'Eodhd/Exchange'
|
34
|
+
require_relative 'Eodhd/ExchangeSymbol'
|
35
|
+
|
36
|
+
class Eodhd
|
37
|
+
def initialize(api_token:)
|
38
|
+
@api_token = api_token
|
39
|
+
end
|
40
|
+
|
41
|
+
def exchanges
|
42
|
+
Eodhd::Exchange.all(api_token: @api_token)
|
43
|
+
end
|
44
|
+
|
45
|
+
def exchange_symbols(exchange: nil, exchange_code: nil)
|
46
|
+
exchange_code ||= exchange.code
|
47
|
+
Eodhd::ExchangeSymbol.all(api_token: @api_token, exchange_code: exchange_code)
|
48
|
+
end
|
49
|
+
|
50
|
+
def eod_data(exchange: nil, exchange_code: nil, exchange_symbol: nil, symbol: nil, period: nil, from: nil, to: nil)
|
51
|
+
exchange_code ||= exchange.code
|
52
|
+
symbol ||= exchange_symbol.code
|
53
|
+
Eodhd::EodData.all(api_token: @api_token, exchange_code: exchange_code, symbol: symbol, period: period, from: from, to: to)
|
54
|
+
end
|
55
|
+
|
56
|
+
def eod_bulk_last_day(exchange: nil, exchange_code: nil, date:)
|
57
|
+
exchange_code ||= exchange.code
|
58
|
+
Eodhd::EodBulkLastDay.all(api_token: @api_token, exchange_code: exchange_code, date: date)
|
59
|
+
end
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eodhd.rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.13.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- thoran
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-10-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: http.rb
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Access the eodhd.com API with Ruby.
|
28
|
+
email: code@thoran.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- Gemfile
|
34
|
+
- README.md
|
35
|
+
- eodhd.rb.gemspec
|
36
|
+
- lib/Eodhd/Client.rb
|
37
|
+
- lib/Eodhd/EodBulkLastDay.rb
|
38
|
+
- lib/Eodhd/EodData.rb
|
39
|
+
- lib/Eodhd/Exchange.rb
|
40
|
+
- lib/Eodhd/ExchangeSymbol.rb
|
41
|
+
- lib/Hash/x_www_form_urlencode.rb
|
42
|
+
- lib/Thoran/Hash/XWwwFormUrlencode/x_www_form_urlencode.rb
|
43
|
+
- lib/Thoran/String/UrlEncode/url_encode.rb
|
44
|
+
- lib/eodhd.rb
|
45
|
+
homepage: http://github.com/thoran/eodhd.rb
|
46
|
+
licenses:
|
47
|
+
- Ruby
|
48
|
+
metadata: {}
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '2.5'
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
requirements: []
|
64
|
+
rubygems_version: 3.5.21
|
65
|
+
signing_key:
|
66
|
+
specification_version: 4
|
67
|
+
summary: Access the eodhd.com API with Ruby.
|
68
|
+
test_files: []
|