eodhd.rb 0.13.4
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|