yfinrb 0.1.0 → 0.2.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +160 -5
- data/chart.png +0 -0
- data/lib/yfinrb/analysis.rb +1 -1
- data/lib/yfinrb/financials.rb +6 -4
- data/lib/yfinrb/fundamentals.rb +1 -2
- data/lib/yfinrb/holders.rb +1 -8
- data/lib/yfinrb/multi.rb +8 -8
- data/lib/yfinrb/price_history.rb +22 -14
- data/lib/yfinrb/price_technical.rb +579 -0
- data/lib/yfinrb/quote.rb +4 -3
- data/lib/yfinrb/ticker.rb +11 -12
- data/lib/yfinrb/tickers.rb +1 -3
- data/lib/yfinrb/utils.rb +26 -31
- data/lib/yfinrb/version.rb +2 -4
- data/lib/yfinrb/yf_connection.rb +15 -11
- data/lib/yfinrb/yfinance_exception.rb +1 -2
- data/lib/yfinrb.rb +18 -12
- data/yfinrb-0.2.13.gem +0 -0
- metadata +20 -3
data/lib/yfinrb/utils.rb
CHANGED
@@ -1,34 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
# https://github.com/ranaroussi/yfinance
|
5
|
-
#
|
6
|
-
# Copyright 2017-2019 Ran Aroussi
|
7
|
-
#
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
-
# you may not use this file except in compliance with the License.
|
10
|
-
# You may obtain a copy of the License at
|
11
|
-
#
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
-
#
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
#
|
20
|
-
|
21
|
-
#!/usr/bin/env ruby
|
22
|
-
# frozen_string_literal: true
|
23
|
-
|
24
|
-
require 'date'
|
25
|
-
require 'logger'
|
26
|
-
require 'net/http'
|
27
|
-
require 'json'
|
28
|
-
require 'time'
|
29
|
-
require 'uri'
|
30
|
-
|
31
|
-
class Yfin
|
1
|
+
require 'polars-df'
|
2
|
+
|
3
|
+
class Yfinrb
|
32
4
|
class Utils
|
33
5
|
BASE_URL = 'https://query1.finance.yahoo.com'
|
34
6
|
|
@@ -290,13 +262,36 @@ class Yfin
|
|
290
262
|
case interval
|
291
263
|
when '1mo'
|
292
264
|
1.month
|
265
|
+
when '2mo'
|
266
|
+
2.months
|
293
267
|
when '3mo'
|
294
268
|
3.months
|
269
|
+
when '6mo'
|
270
|
+
6.months
|
271
|
+
when '9mo'
|
272
|
+
9.months
|
273
|
+
when '12mo'
|
274
|
+
1.year
|
295
275
|
when '1y'
|
296
276
|
1.year
|
277
|
+
when '2y'
|
278
|
+
2.year
|
279
|
+
when '3y'
|
280
|
+
3.year
|
281
|
+
when '4y'
|
282
|
+
4.year
|
283
|
+
when '5y'
|
284
|
+
5.year
|
297
285
|
when '1wk'
|
298
286
|
1.week
|
287
|
+
when '2wk'
|
288
|
+
2.week
|
289
|
+
when '3wk'
|
290
|
+
3.week
|
291
|
+
when '4wk'
|
292
|
+
4.week
|
299
293
|
else
|
294
|
+
Rails.logger.warn { "#{__FILE__}:#{__LINE__} #{interval} not a recognized interval" }
|
300
295
|
interval
|
301
296
|
end
|
302
297
|
end
|
data/lib/yfinrb/version.rb
CHANGED
data/lib/yfinrb/yf_connection.rb
CHANGED
@@ -3,8 +3,10 @@
|
|
3
3
|
require 'thread'
|
4
4
|
require 'date'
|
5
5
|
require 'nokogiri'
|
6
|
+
require 'zache'
|
7
|
+
require 'httparty'
|
6
8
|
|
7
|
-
class
|
9
|
+
class Yfinrb
|
8
10
|
module YfConnection
|
9
11
|
extend ActiveSupport::Concern
|
10
12
|
# extend HTTParty
|
@@ -23,7 +25,7 @@ class Yfin
|
|
23
25
|
def yfconn_initialize
|
24
26
|
# Rails.logger.info { "#{__FILE__}:#{__LINE__} here"}
|
25
27
|
begin
|
26
|
-
@@zache = Zache.new
|
28
|
+
@@zache = ::Zache.new
|
27
29
|
@@session_is_caching = true
|
28
30
|
rescue NoMethodError
|
29
31
|
# Not caching
|
@@ -33,7 +35,7 @@ class Yfin
|
|
33
35
|
@@crumb = nil
|
34
36
|
@@cookie = nil
|
35
37
|
@@cookie_strategy = 'basic'
|
36
|
-
@@cookie_lock = Mutex.new()
|
38
|
+
@@cookie_lock = ::Mutex.new()
|
37
39
|
end
|
38
40
|
|
39
41
|
|
@@ -54,9 +56,9 @@ class Yfin
|
|
54
56
|
}
|
55
57
|
|
56
58
|
proxy = _get_proxy
|
57
|
-
HTTParty.http_proxy(addr = proxy.split(':').first, port = proxy.split(':').second.split('/').first) unless proxy.nil?
|
59
|
+
::HTTParty.http_proxy(addr = proxy.split(':').first, port = proxy.split(':').second.split('/').first) unless proxy.nil?
|
58
60
|
|
59
|
-
cookie_hash = HTTParty::CookieHash.new
|
61
|
+
cookie_hash = ::HTTParty::CookieHash.new
|
60
62
|
cookie_hash.add_cookies(@@cookie)
|
61
63
|
options = { headers: headers.dup.merge(@@user_agent_headers).merge({ 'cookie' => cookie_hash.to_cookie_string, 'crumb' => crumb })} #, debug_output: STDOUT }
|
62
64
|
|
@@ -64,7 +66,9 @@ class Yfin
|
|
64
66
|
joiner = ('?'.in?(request_args[:url]) ? '&' : '?')
|
65
67
|
u += (joiner + CGI.unescape(request_args[:params].to_query)) unless request_args[:params].empty?
|
66
68
|
|
67
|
-
|
69
|
+
# Rails.logger.info { "#{__FILE__}:#{__LINE__} u=#{u}, options = #{options.inspect}" }
|
70
|
+
response = ::HTTParty.get(u, options)
|
71
|
+
# Rails.logger.info { "#{__FILE__}:#{__LINE__} response=#{response.inspect}" }
|
68
72
|
|
69
73
|
return response
|
70
74
|
end
|
@@ -169,13 +173,13 @@ class Yfin
|
|
169
173
|
return @@crumb unless @@crumb.nil?
|
170
174
|
return nil if (cookie = _get_cookie_basic()).nil?
|
171
175
|
|
172
|
-
cookie_hash = HTTParty::CookieHash.new
|
176
|
+
cookie_hash = ::HTTParty::CookieHash.new
|
173
177
|
cookie_hash.add_cookies(cookie)
|
174
178
|
options = {headers: @@user_agent_headers.dup.merge(
|
175
179
|
{ 'cookie' => cookie_hash.to_cookie_string }
|
176
180
|
)} #, debug_output: STDOUT }
|
177
181
|
|
178
|
-
crumb_response = HTTParty.get('https://query1.finance.yahoo.com/v1/test/getcrumb', options)
|
182
|
+
crumb_response = ::HTTParty.get('https://query1.finance.yahoo.com/v1/test/getcrumb', options)
|
179
183
|
@@crumb = crumb_response.parsed_response
|
180
184
|
|
181
185
|
return (@@crumb.nil? || '<html>'.in?(@@crumb)) ? nil : @@crumb
|
@@ -195,17 +199,17 @@ class Yfin
|
|
195
199
|
get_args[:expire_after] = @expire_after if @session_is_caching
|
196
200
|
response = @session.get(**get_args)
|
197
201
|
|
198
|
-
soup = Nokogiri::HTML(response.content, 'html.parser')
|
202
|
+
soup = ::Nokogiri::HTML(response.content, 'html.parser')
|
199
203
|
csrfTokenInput = soup.find('input', attrs: {'name': 'csrfToken'})
|
200
204
|
|
201
205
|
# puts 'Failed to find "csrfToken" in response'
|
202
206
|
return false if csrfTokenInput.nil?
|
203
207
|
|
204
208
|
csrfToken = csrfTokenInput['value']
|
205
|
-
puts "csrfToken = #{csrfToken}"
|
209
|
+
# puts "csrfToken = #{csrfToken}"
|
206
210
|
sessionIdInput = soup.find('input', attrs: {'name': 'sessionId'})
|
207
211
|
sessionId = sessionIdInput['value']
|
208
|
-
puts "sessionId='#{sessionId}"
|
212
|
+
# puts "sessionId='#{sessionId}"
|
209
213
|
|
210
214
|
originalDoneUrl = 'https://finance.yahoo.com/'
|
211
215
|
namespace = 'yahoo'
|
data/lib/yfinrb.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
|
+
class Yfinrb
|
2
|
+
end
|
3
|
+
|
1
4
|
# frozen_string_literal: true
|
2
5
|
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
6
|
-
require_relative '
|
7
|
-
require_relative '
|
8
|
-
require_relative '
|
9
|
-
require_relative '
|
10
|
-
require_relative '
|
11
|
-
require_relative '
|
6
|
+
require_relative 'yfinrb/version'
|
7
|
+
require_relative 'yfinrb/utils'
|
8
|
+
require_relative 'yfinrb/yfinance_exception'
|
9
|
+
require_relative 'yfinrb/yf_connection'
|
10
|
+
require_relative 'yfinrb/price_technical'
|
11
|
+
require_relative 'yfinrb/price_history'
|
12
|
+
require_relative 'yfinrb/quote'
|
13
|
+
require_relative 'yfinrb/analysis'
|
14
|
+
require_relative 'yfinrb/fundamentals'
|
15
|
+
require_relative 'yfinrb/financials'
|
16
|
+
require_relative 'yfinrb/holders'
|
17
|
+
require_relative 'yfinrb/ticker'
|
12
18
|
require_relative "yfinrb/version"
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
class Yfinrb
|
21
|
+
|
22
|
+
extend Yfinrb::PriceTechnical
|
17
23
|
end
|
data/yfinrb-0.2.13.gem
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yfinrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bill McKinnon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo-data
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: tulirb
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Download market data from Yahoo! Finance's API
|
70
84
|
email:
|
71
85
|
- bill@bmck.org
|
@@ -80,6 +94,7 @@ files:
|
|
80
94
|
- LICENSE.txt
|
81
95
|
- README.md
|
82
96
|
- Rakefile
|
97
|
+
- chart.png
|
83
98
|
- lib/yfinrb.rb
|
84
99
|
- lib/yfinrb/analysis.rb
|
85
100
|
- lib/yfinrb/financials.rb
|
@@ -87,6 +102,7 @@ files:
|
|
87
102
|
- lib/yfinrb/holders.rb
|
88
103
|
- lib/yfinrb/multi.rb
|
89
104
|
- lib/yfinrb/price_history.rb
|
105
|
+
- lib/yfinrb/price_technical.rb
|
90
106
|
- lib/yfinrb/quote.rb
|
91
107
|
- lib/yfinrb/ticker.rb
|
92
108
|
- lib/yfinrb/tickers.rb
|
@@ -95,6 +111,7 @@ files:
|
|
95
111
|
- lib/yfinrb/yf_connection.rb
|
96
112
|
- lib/yfinrb/yfinance_exception.rb
|
97
113
|
- sig/yfinrb.rbs
|
114
|
+
- yfinrb-0.2.13.gem
|
98
115
|
homepage: https://www.github.com/bmck/yfinrb
|
99
116
|
licenses:
|
100
117
|
- MIT
|
@@ -117,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
134
|
- !ruby/object:Gem::Version
|
118
135
|
version: '0'
|
119
136
|
requirements: []
|
120
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.2.33
|
121
138
|
signing_key:
|
122
139
|
specification_version: 4
|
123
140
|
summary: A shameless port of python's yfinance module to ruby
|