avantage 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +60 -0
- data/lib/avantage.rb +103 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b636721c2bffd6f0c193f31a9a92a3ece3dd818cde4e4d095fba8a1c28f8c543
|
4
|
+
data.tar.gz: bddfec80486d6f303de470a28f4fd27579999d324b9051e5fe06e6e632abf070
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b55eb347c6ae28226358d1606e59bb1e1f6bfe0c75e0a136bbb68d08bd2e86770b6d9e665e19673d60fd1bac1e2e847760a88dd52af322ee7cef2f3d8c150cd7
|
7
|
+
data.tar.gz: 7722bab312b6c954160691007aaa2b5c5a3657923c60fbd19525230f2cd5c8ccef49e2bfce4084ae9de61903f492fc404d76bafefa3b019acfe5ade597947088
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,66 @@ A Ruby library to query the [Alpha Vantage API](https://www.alphavantage.co/docu
|
|
8
8
|
|
9
9
|
## usage
|
10
10
|
|
11
|
+
The first step is to instantiate a client:
|
12
|
+
```ruby
|
13
|
+
require 'avantage'
|
14
|
+
|
15
|
+
client = Avantage::Client.new('6SAMPLEWO0KLUG55')
|
16
|
+
# or more something like
|
17
|
+
client = Avantage::Client.new(File.read('.api.key').strip)
|
18
|
+
```
|
19
|
+
|
20
|
+
Functions may be called directly:
|
21
|
+
```ruby
|
22
|
+
require 'pp'
|
23
|
+
|
24
|
+
pp client.get(:global_quote, symbol: 'GOOG')
|
25
|
+
#
|
26
|
+
# ==>
|
27
|
+
#
|
28
|
+
# {"Global Quote"=>
|
29
|
+
# {"01. symbol"=>"GOOG",
|
30
|
+
# "02. open"=>"1109.6900",
|
31
|
+
# "03. high"=>"1116.3900",
|
32
|
+
# "04. low"=>"1098.9995",
|
33
|
+
# "05. price"=>"1103.6000",
|
34
|
+
# "06. volume"=>"1386684",
|
35
|
+
# "07. latest trading day"=>"2019-06-18",
|
36
|
+
# "08. previous close"=>"1092.5000",
|
37
|
+
# "09. change"=>"11.1000",
|
38
|
+
# "10. change percent"=>"1.0160%"}}
|
39
|
+
```
|
40
|
+
|
41
|
+
GLOBAL_QUOTE, SYMBOL_SEARCH, CURRENCY_EXCHANGE_RATE, and SECTOR can be called directly:
|
42
|
+
```ruby
|
43
|
+
client.global_quote('GOOG')
|
44
|
+
client.global_quote(symbol: 'GOOG')
|
45
|
+
client.global_quote(symbol: 'GOOG', datatype: 'csv')
|
46
|
+
client.quote('GOOG')
|
47
|
+
# ...
|
48
|
+
|
49
|
+
client.symbol_search(keywords: 'IBM')
|
50
|
+
client.symbol_search('IBM')
|
51
|
+
client.search(keywords: 'IBM')
|
52
|
+
client.search('IBM')
|
53
|
+
client.search(keywords: 'IBM', datatype: 'csv')
|
54
|
+
# ...
|
55
|
+
|
56
|
+
client.currency_exchange_rate('USD', 'JPY')
|
57
|
+
client.exchange_rate('USD', 'JPY')
|
58
|
+
client.exchange_rate(from: 'USD', to: 'JPY')
|
59
|
+
client.exchange_rate(from_currency: 'USD', to_currency: 'JPY')
|
60
|
+
client.forex(from: 'USD', to: 'JPY')
|
61
|
+
client.forex('USD', 'JPY')
|
62
|
+
client.forex(from: 'USD', to: 'JPY', datatype: 'csv')
|
63
|
+
# ...
|
64
|
+
|
65
|
+
client.sectors
|
66
|
+
client.sector
|
67
|
+
client.sectors(datatype: 'csv')
|
68
|
+
# ...
|
69
|
+
```
|
70
|
+
|
11
71
|
|
12
72
|
## license
|
13
73
|
|
data/lib/avantage.rb
CHANGED
@@ -1,8 +1,109 @@
|
|
1
1
|
|
2
|
+
require 'json'
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
|
2
6
|
module Avantage
|
3
7
|
|
4
|
-
VERSION = '0.0
|
8
|
+
VERSION = '0.1.0'
|
9
|
+
|
10
|
+
USER_AGENT = "avantage #{VERSION} - https://github.com/jmettraux/avantage"
|
11
|
+
API_ROOT_URI = 'https://www.alphavantage.co/query?'
|
12
|
+
|
13
|
+
class Client
|
14
|
+
|
15
|
+
def initialize(api_key)
|
16
|
+
|
17
|
+
@api_key = api_key
|
18
|
+
end
|
19
|
+
|
20
|
+
def global_quote(symbol)
|
21
|
+
|
22
|
+
os = symbol.is_a?(Hash) ? symbol : { symbol: symbol }
|
23
|
+
|
24
|
+
get('GLOBAL_QUOTE', os)
|
25
|
+
end
|
26
|
+
alias quote global_quote
|
27
|
+
|
28
|
+
def symbol_search(keywords)
|
29
|
+
|
30
|
+
os = keywords.is_a?(Hash) ? keywords : { keywords: keywords }
|
31
|
+
|
32
|
+
get('SYMBOL_SEARCH', os)
|
33
|
+
end
|
34
|
+
alias search symbol_search
|
35
|
+
|
36
|
+
def sector(os={})
|
37
|
+
|
38
|
+
get('SECTOR', os)
|
39
|
+
end
|
40
|
+
alias sectors sector
|
41
|
+
|
42
|
+
def currency_exchange_rate(from, to=nil)
|
43
|
+
|
44
|
+
os =
|
45
|
+
if from.is_a?(Hash)
|
46
|
+
from.inject({}) { |k, v|
|
47
|
+
if k == :from
|
48
|
+
h[:from_currency] = v
|
49
|
+
elsif k == :to
|
50
|
+
h[:to_currency] = v
|
51
|
+
else
|
52
|
+
h[k] = v
|
53
|
+
end
|
54
|
+
h }
|
55
|
+
else
|
56
|
+
{ from_currency: from, to_currency: to }
|
57
|
+
end
|
58
|
+
|
59
|
+
get('CURRENCY_EXCHANGE_RATE', os)
|
60
|
+
end
|
61
|
+
alias exchange_rate currency_exchange_rate
|
62
|
+
alias forex currency_exchange_rate
|
63
|
+
|
64
|
+
def get(function, parameters)
|
65
|
+
|
66
|
+
func = function.to_s.upcase
|
67
|
+
|
68
|
+
params = parameters.merge(function: func, apikey: @api_key)
|
69
|
+
params[:datatype] = 'json' if params.delete(:json)
|
70
|
+
params[:datatype] = 'csv' if params.delete(:csv)
|
71
|
+
|
72
|
+
uri = API_ROOT_URI + URI.encode_www_form(params)
|
73
|
+
|
74
|
+
req = Net::HTTP::Get.new(uri)
|
75
|
+
req.instance_eval { @header.clear }
|
76
|
+
def req.set_header(k, v); @header[k] = [ v ]; end
|
77
|
+
|
78
|
+
req.set_header('User-Agent', USER_AGENT)
|
79
|
+
|
80
|
+
u = URI(uri)
|
81
|
+
|
82
|
+
t0 = monow
|
83
|
+
|
84
|
+
t = Net::HTTP.new(u.host, u.port)
|
85
|
+
t.use_ssl = (u.scheme == 'https')
|
86
|
+
#t.set_debug_output($stdout)
|
87
|
+
|
88
|
+
res = t.request(req)
|
89
|
+
|
90
|
+
r = res.body
|
91
|
+
if res.content_type.match(/\Aapplication\/json\b/)
|
92
|
+
r = JSON.parse(r)
|
93
|
+
end
|
94
|
+
|
95
|
+
class << r; attr_accessor :_response, :_client, :_elapsed; end
|
96
|
+
#
|
97
|
+
r._response = res
|
98
|
+
r._client = self
|
99
|
+
r._elapsed = monow - t0
|
100
|
+
|
101
|
+
r
|
102
|
+
end
|
103
|
+
|
104
|
+
protected
|
5
105
|
|
6
|
-
|
106
|
+
def monow; Process.clock_gettime(Process::CLOCK_MONOTONIC); end
|
107
|
+
end
|
7
108
|
end
|
8
109
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avantage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|