yquotes 0.1.5 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/yquotes/version.rb +1 -1
- data/lib/yquotes/yahoo.rb +41 -25
- data/yquotes.gemspec +2 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b08f86c5ff3fee6eee461f42329c84d35493c66
|
4
|
+
data.tar.gz: a7e15f17170b6fe991613dd67c31f659d3e4be9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe8b9bd2d89823dc2a88f122f478e799e82510b752bc745a54fc2fcb95943eb1ffea4219c9ea737eb56c85ce70796cb379ffd391976f1b1feea4d415a3322632
|
7
|
+
data.tar.gz: 2697dcda93eb2c7f43798c72865b794239a3b8db3480541692d29d38a4cd1ead669b9864317e4891aacb4e006597ff6ed9d76085dac53e3bebba2ac5b8d09c39
|
data/README.md
CHANGED
data/lib/yquotes/version.rb
CHANGED
data/lib/yquotes/yahoo.rb
CHANGED
@@ -1,18 +1,39 @@
|
|
1
1
|
require 'open-uri'
|
2
2
|
require 'csv'
|
3
3
|
require 'date'
|
4
|
+
require 'nokogiri'
|
4
5
|
|
5
6
|
|
6
7
|
module YQuotes
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
COOKIE_URL = 'https://finance.yahoo.com/quote/AAPL/history?p=AAPL'
|
10
|
+
CRUMB_PATTERN = /\"CrumbStore\":{\"crumb\":\"(?<crumb>[^"]+)/
|
11
|
+
QUOTE_ENDPOINT = "https://query1.finance.yahoo.com/v7/finance/download/%{symbol}?"
|
12
|
+
|
10
13
|
class Yahoo
|
11
14
|
|
15
|
+
# Get cookie and crumb
|
16
|
+
def initialize
|
17
|
+
|
18
|
+
# get cookie
|
19
|
+
page = open(COOKIE_URL)
|
20
|
+
@cookie = page.meta['set-cookie'].split('; ', 2).first
|
21
|
+
|
22
|
+
# get crumb
|
23
|
+
scripts = Nokogiri::HTML(page).css('script')
|
24
|
+
scripts.each do |s|
|
25
|
+
if s.text.include? 'CrumbStore'
|
26
|
+
pattern = s.text.match(CRUMB_PATTERN)
|
27
|
+
@crumb = pattern['crumb']
|
28
|
+
break
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
12
33
|
# fetch_csv: fetch historical quotes in csv format
|
13
34
|
def fetch_csv(ticker, start_date=nil, end_date=nil, period='d')
|
14
|
-
url =
|
15
|
-
connection = open(url)
|
35
|
+
url = build_url(ticker, start_date, end_date, period)
|
36
|
+
connection = open(url, 'Cookie' => @cookie)
|
16
37
|
data = CSV.parse(connection.read, :converters => :numeric)
|
17
38
|
raise "Yahoo.fetch_csv unable to fetch data" unless data.is_a? Array
|
18
39
|
return data
|
@@ -22,43 +43,38 @@ module YQuotes
|
|
22
43
|
alias_method :get_data, :fetch_csv
|
23
44
|
|
24
45
|
private
|
46
|
+
|
25
47
|
# build_params: build parameters for get query
|
26
|
-
def
|
48
|
+
def build_url(ticker, start_date=nil, end_date=nil, period='d')
|
49
|
+
|
50
|
+
url = QUOTE_ENDPOINT
|
51
|
+
url = url %{:symbol => URI.escape(ticker).upcase}
|
27
52
|
|
28
53
|
params = {
|
29
|
-
:
|
54
|
+
:crumb => URI.escape(@crumb),
|
55
|
+
:events => 'history',
|
56
|
+
:interval => '1d'
|
30
57
|
}
|
31
58
|
|
32
59
|
# sanitize date
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
if start_date
|
37
|
-
params[:a] = start_date.month - 1
|
38
|
-
params[:b] = start_date.day
|
39
|
-
params[:c] = start_date.year
|
40
|
-
end
|
41
|
-
|
42
|
-
if end_date
|
43
|
-
params[:d] = end_date.month - 1
|
44
|
-
params[:e] = end_date.day
|
45
|
-
params[:f] = end_date.year
|
46
|
-
end
|
60
|
+
params[:period1] = get_date(start_date).to_i unless start_date.nil?
|
61
|
+
params[:period2] = get_date(end_date).to_i unless end_date.nil?
|
47
62
|
|
48
|
-
params[:
|
63
|
+
params[:interval] = "1d" if period == "d"
|
64
|
+
params[:interval] = "1mo" if period == "m"
|
49
65
|
|
50
|
-
"#{params.map { |k,v| "#{k}=#{v}" }.join("&")}"
|
66
|
+
url + "#{params.map { |k,v| "#{k}=#{v}" }.join("&")}"
|
51
67
|
end
|
52
68
|
|
53
69
|
# get_date: get date from String
|
54
70
|
def get_date(d)
|
55
|
-
return nil
|
56
|
-
return d if d.is_a? Date
|
71
|
+
return nil if d.nil?
|
72
|
+
return d.to_time if d.is_a? Date
|
57
73
|
|
58
74
|
if d.is_a? String
|
59
75
|
|
60
76
|
begin
|
61
|
-
dt = Date.parse(d)
|
77
|
+
dt = Date.parse(d).to_time
|
62
78
|
rescue Exception => e
|
63
79
|
raise "invalid param #{d} - date should be in yyyy-mm-dd format"
|
64
80
|
end
|
data/yquotes.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yquotes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- P Choudhary
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.1.5
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.7.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.7.2
|
69
83
|
description:
|
70
84
|
email:
|
71
85
|
- pankaj17n@outlook.com
|
@@ -106,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
120
|
version: '0'
|
107
121
|
requirements: []
|
108
122
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.6.8
|
110
124
|
signing_key:
|
111
125
|
specification_version: 4
|
112
126
|
summary: Get historical quotes from Yahoo Finance
|