QuarantineLiveStreams 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +34 -0
- data/QuarantineLiveStreams-0.1.0.gem +0 -0
- data/QuarantineLiveStreams.gemspec +2 -5
- data/bin/QLS +7 -1
- data/lib/QuarantineLiveStreams.rb +8 -4
- data/lib/QuarantineLiveStreams/cli.rb +96 -114
- data/lib/QuarantineLiveStreams/event.rb +58 -17
- data/lib/QuarantineLiveStreams/scraper.rb +7 -3
- data/lib/QuarantineLiveStreams/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33d57f4e47a08abbf378b6dd31797782838331a3ffd4f904940ff01653e58e71
|
4
|
+
data.tar.gz: 026420e64659a371ae774b77e0ae89fee52475f60bffa6f9c82cfed8c51c6719
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 644beb588f1d92eb2545da2f2968457f1c55964f65e96e39fe9a43085d5d7ac0a6631a22151d7c4529ae6845b14b9bb47304dcbed38da513e0fc71327cbb30d7
|
7
|
+
data.tar.gz: f932baa4d132bce79c7792ff4ecd6a9d2bdd0527db19eb5250fd1bc0bfbf3dedd9a0deb5b91f34950db8817016cb1e79bfdad43545c1bccb0d3da82ed1bbc7ad
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
QuarantineLiveStreams (0.1.1)
|
5
|
+
colorize (~> 0.8.1)
|
6
|
+
nokogiri
|
7
|
+
uri
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
coderay (1.1.2)
|
13
|
+
colorize (0.8.1)
|
14
|
+
method_source (1.0.0)
|
15
|
+
mini_portile2 (2.4.0)
|
16
|
+
nokogiri (1.10.9)
|
17
|
+
mini_portile2 (~> 2.4.0)
|
18
|
+
pry (0.13.1)
|
19
|
+
coderay (~> 1.1)
|
20
|
+
method_source (~> 1.0)
|
21
|
+
rake (13.0.1)
|
22
|
+
uri (0.10.0)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
QuarantineLiveStreams!
|
29
|
+
bundler (~> 2.0)
|
30
|
+
pry
|
31
|
+
rake (~> 13.0)
|
32
|
+
|
33
|
+
BUNDLED WITH
|
34
|
+
2.1.4
|
Binary file
|
@@ -12,19 +12,16 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.license = "MIT"
|
13
13
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
14
|
|
15
|
-
#spec.metadata["allowed_push_host"] = spec.homepage
|
16
|
-
|
17
15
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
16
|
spec.metadata["source_code_uri"] = "https://github.com/mattenbar/QLS"
|
19
|
-
#spec.metadata["changelog_uri"] = "https://github.com/mattenbar/QLS.git"
|
20
17
|
|
21
18
|
# Specify which files should be added to the gem when it is released.
|
22
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
20
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
21
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
22
|
end
|
26
|
-
spec.bindir = "
|
27
|
-
spec.executables =
|
23
|
+
spec.bindir = "bin"
|
24
|
+
spec.executables = ["QLS"]
|
28
25
|
spec.require_paths = ["lib"]
|
29
26
|
|
30
27
|
spec.add_development_dependency "bundler", "~> 2.0"
|
data/bin/QLS
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
|
+
# Have bundler/setup run so that that setup script, which loads dependencies, can run.
|
4
|
+
# Once done, you can require your gem from source itself.
|
5
|
+
# You can actually just require the gem, it will know to look lin lib QuarantineLiveStreams
|
6
|
+
# require_relative "../lib/QuarantineLiveStreams"
|
7
|
+
require "bundler/setup"
|
8
|
+
require 'QuarantineLiveStreams'
|
3
9
|
|
4
10
|
QuarantineLiveStreams::CLI.new.call
|
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'pry'
|
4
|
+
require 'colorize'
|
5
|
+
|
1
6
|
require_relative "./QuarantineLiveStreams/version"
|
2
7
|
require_relative "./QuarantineLiveStreams/cli"
|
3
8
|
require_relative "./QuarantineLiveStreams/scraper"
|
4
9
|
require_relative "./QuarantineLiveStreams/event"
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require 'colorize'
|
10
|
+
|
11
|
+
module QuarantineLiveStreams
|
12
|
+
end
|
@@ -19,147 +19,129 @@ class QuarantineLiveStreams::CLI
|
|
19
19
|
|
20
20
|
case input
|
21
21
|
when "all"
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
all
|
23
|
+
when "dates"
|
24
|
+
dates
|
25
|
+
when "genres"
|
26
|
+
genres
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def all
|
32
|
+
puts ""
|
33
|
+
puts "Enter the number of the event you would like to see,"
|
34
|
+
puts "or 0 to go back to menu"
|
35
|
+
QuarantineLiveStreams::Event.display_all_event_names
|
36
|
+
puts ""
|
37
|
+
puts "Enter the number of the event you would like to see,"
|
38
|
+
puts "or 0 to go back to menu"
|
39
|
+
puts ""
|
40
|
+
all_input = gets.strip.to_i
|
31
41
|
|
32
|
-
|
42
|
+
if all_input > 0 && all_input <= QuarantineLiveStreams::Event.all.length
|
33
43
|
|
34
|
-
|
44
|
+
current_event = QuarantineLiveStreams::Event.all[all_input - 1]
|
35
45
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
puts ""
|
47
|
+
puts "Live Stream: #{current_event.name}"
|
48
|
+
puts "Genre: #{current_event.genre}"
|
49
|
+
puts "Date: #{current_event.date}"
|
50
|
+
puts "Time: #{current_event.time} ET."
|
51
|
+
puts "Link: #{current_event.link.colorize(:green)}"
|
52
|
+
puts ""
|
53
|
+
end
|
54
|
+
end
|
44
55
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
56
|
+
def dates
|
57
|
+
puts ""
|
58
|
+
QuarantineLiveStreams::Event.display_all_dates #shows all dates
|
59
|
+
puts ""
|
60
|
+
puts "Please enter the number for the date to see events for that date,"
|
61
|
+
puts "or 0 to go back to main menu"
|
62
|
+
puts ""
|
63
|
+
date_input = gets.strip.to_i #gets what date we want from user
|
64
|
+
puts ""
|
54
65
|
|
55
66
|
|
56
|
-
|
67
|
+
current_date = QuarantineLiveStreams::Event.all_dates_array[date_input - 1]
|
57
68
|
|
58
|
-
|
69
|
+
QuarantineLiveStreams::Event.display_by_date(QuarantineLiveStreams::Event.all_dates_array.index(current_date)) #searching by string name
|
59
70
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
71
|
+
if date_input > 0 && date_input <= QuarantineLiveStreams::Event.all_dates_array.length
|
72
|
+
@events_by_date = QuarantineLiveStreams::Event.all.each_with_index do |event_obj, index|
|
73
|
+
if event_obj.date == current_date
|
74
|
+
puts "#{index + 1}. #{event_obj.name}"
|
75
|
+
event_obj
|
66
76
|
end
|
77
|
+
end
|
67
78
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
79
|
+
puts ""
|
80
|
+
puts "Please enter the number of the event you would like more info about,"
|
81
|
+
puts "or 0 to return to main menu"
|
82
|
+
puts ""
|
83
|
+
event_input = gets.strip.to_i
|
84
|
+
puts ""
|
74
85
|
|
75
86
|
|
76
|
-
|
87
|
+
if event_input > 0 && event_input <= QuarantineLiveStreams::Event.all.length
|
77
88
|
@current_event = QuarantineLiveStreams::Event.all[event_input - 1]
|
78
89
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
90
|
+
puts "Live Stream: #{@current_event.name}"
|
91
|
+
puts "Genre: #{@current_event.genre}"
|
92
|
+
puts "Date: #{@current_event.date}"
|
93
|
+
puts "Time: #{@current_event.time} ET."
|
94
|
+
puts "Link: #{@current_event.link.colorize(:green)}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
86
98
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
QuarantineLiveStreams::Event.find_by_genre(@all_genres_array.index(current_genre))
|
99
|
+
def genres
|
100
|
+
puts ""
|
101
|
+
QuarantineLiveStreams::Event.display_all_genres
|
102
|
+
puts ""
|
103
|
+
puts "please enter the number of the genre you would like to see events for,"
|
104
|
+
puts "or 0 to go back to main menu"
|
105
|
+
puts ""
|
106
|
+
genre_input = gets.strip.to_i
|
107
|
+
puts ""
|
108
|
+
|
109
|
+
current_genre = QuarantineLiveStreams::Event.all_genres_array[genre_input - 1]
|
110
|
+
QuarantineLiveStreams::Event.find_by_genre(QuarantineLiveStreams::Event.all_genres_array.index(current_genre))
|
100
111
|
|
101
112
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
end
|
113
|
+
if genre_input > 0 && genre_input <= QuarantineLiveStreams::Event.all_genres_array.length
|
114
|
+
@events_by_genre = QuarantineLiveStreams::Event.all.each_with_index do |event_obj, index|
|
115
|
+
if event_obj.genre == current_genre
|
116
|
+
puts "#{index + 1}. #{event_obj.name}"
|
117
|
+
event_obj
|
108
118
|
end
|
119
|
+
end
|
109
120
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
121
|
+
puts ""
|
122
|
+
puts "Please enter the number of the event you would like more info about"
|
123
|
+
puts "or 0 to go back to main menu"
|
124
|
+
puts ""
|
125
|
+
event_input = gets.strip.to_i
|
126
|
+
puts ""
|
127
|
+
|
128
|
+
if event_input > 0 && event_input <= QuarantineLiveStreams::Event.all.length
|
129
|
+
current_event = QuarantineLiveStreams::Event.all[event_input - 1]
|
119
130
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|
131
|
+
puts "Live Stream: #{current_event.name}"
|
132
|
+
puts "Genre: #{current_event.genre}"
|
133
|
+
puts "Date: #{current_event.date}"
|
134
|
+
puts "Time: #{current_event.time} ET."
|
135
|
+
puts "Link: #{current_event.link.colorize(:green)}"
|
127
136
|
end
|
128
|
-
end
|
137
|
+
end
|
129
138
|
end
|
130
139
|
|
131
140
|
def make_events
|
141
|
+
# Let's talk about memoization
|
132
142
|
QuarantineLiveStreams::Event.create_from_collection
|
133
143
|
end
|
134
144
|
|
135
|
-
def display_all_event_names
|
136
|
-
QuarantineLiveStreams::Event.all.each_with_index do |event_obj, index|
|
137
|
-
puts "#{index + 1}. #{event_obj.name}"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def display_all_dates
|
142
|
-
@all_dates_array = QuarantineLiveStreams::Event.all.map do |event_obj|
|
143
|
-
event_obj.date
|
144
|
-
end
|
145
|
-
|
146
|
-
@all_dates_array = @all_dates_array.uniq
|
147
|
-
@all_dates_array.each_with_index do |date, index|
|
148
|
-
puts "#{index + 1}. #{date}"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def display_all_genres
|
153
|
-
@all_genres_array = QuarantineLiveStreams::Event.all.map do |event_obj|
|
154
|
-
event_obj.genre
|
155
|
-
end
|
156
|
-
|
157
|
-
@all_genres_array = @all_genres_array.uniq
|
158
|
-
@all_genres_array.each_with_index do |genre, index|
|
159
|
-
puts "#{index + 1}. #{genre}"
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
145
|
def welcome
|
164
146
|
puts ""
|
165
147
|
puts "|******************************|".colorize(:light_blue)
|
@@ -2,7 +2,9 @@ class QuarantineLiveStreams::Event
|
|
2
2
|
attr_accessor :date, :genre, :name, :time, :link
|
3
3
|
|
4
4
|
@@all = []
|
5
|
-
|
5
|
+
@@events_by_genre = []
|
6
|
+
@@events_by_date = []
|
7
|
+
@@all_dates_array = []
|
6
8
|
|
7
9
|
def initialize(event_hash)
|
8
10
|
@date = event_hash[:date]
|
@@ -12,8 +14,10 @@ class QuarantineLiveStreams::Event
|
|
12
14
|
@link = event_hash[:link]
|
13
15
|
@@all << self
|
14
16
|
end
|
15
|
-
|
16
|
-
def self.create_from_collection(events_array =
|
17
|
+
|
18
|
+
def self.create_from_collection(events_array = nil)
|
19
|
+
# Nicer way to allow for an argument with a default that's complex.
|
20
|
+
events_array ||= QuarantineLiveStreams::Scraper.scrape_npr
|
17
21
|
events_array.each do |event_hash|
|
18
22
|
self.new(event_hash)
|
19
23
|
end
|
@@ -24,26 +28,63 @@ class QuarantineLiveStreams::Event
|
|
24
28
|
end
|
25
29
|
|
26
30
|
def self.find_by_genre(genre)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
@@events_by_genre = QuarantineLiveStreams::Event.all.map{|e| e.genre == genre}
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.display_by_date(date)
|
35
|
+
@@events_by_date = QuarantineLiveStreams::Event.all.map {|e| e.date == date}
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.display_all_dates
|
39
|
+
self.create_dates_array
|
40
|
+
self.print_dates
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.create_dates_array
|
44
|
+
@@all_dates_array = QuarantineLiveStreams::Event.all.map do |event_obj|
|
45
|
+
event_obj.date
|
46
|
+
end
|
47
|
+
|
48
|
+
@@all_dates_array = @@all_dates_array.uniq
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.print_dates
|
52
|
+
@@all_dates_array.each_with_index do |date, index|
|
53
|
+
puts "#{index + 1}. #{date}"
|
32
54
|
end
|
33
|
-
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.display_all_event_names
|
58
|
+
# This sounds like it should be part of the Event class...
|
59
|
+
self.all.each_with_index do |event_obj, index|
|
34
60
|
puts "#{index + 1}. #{event_obj.name}"
|
35
61
|
end
|
36
62
|
end
|
37
63
|
|
38
|
-
def self.
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
64
|
+
def self.all_dates_array
|
65
|
+
@@all_dates_array
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.display_all_genres
|
69
|
+
self.create_genres_array
|
70
|
+
self.print_genres
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.print_genres
|
74
|
+
@@all_genres_array.each_with_index do |genre, index|
|
75
|
+
puts "#{index + 1}. #{genre}"
|
44
76
|
end
|
45
|
-
|
46
|
-
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.create_genres_array
|
80
|
+
@@all_genres_array = QuarantineLiveStreams::Event.all.map do |event_obj|
|
81
|
+
event_obj.genre
|
47
82
|
end
|
83
|
+
|
84
|
+
@@all_genres_array = @@all_genres_array.uniq
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.all_genres_array
|
88
|
+
@@all_genres_array
|
48
89
|
end
|
49
90
|
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
class QuarantineLiveStreams::Scraper
|
2
|
-
@events_array = []
|
2
|
+
@events_array = [] # Not sure if you need these class instance variables.
|
3
|
+
# Let's go over them.
|
3
4
|
|
4
|
-
def self.
|
5
|
+
def self.scrape_npr
|
5
6
|
url = "https://www.npr.org/2020/03/17/816504058/a-list-of-live-virtual-concerts-to-watch-during-the-coronavirus-shutdown"
|
6
7
|
doc = Nokogiri::HTML(open(url))
|
7
8
|
content = doc.css(".storytext")
|
8
9
|
found = false
|
9
10
|
date = "test"
|
10
11
|
genre = "test"
|
12
|
+
# This is pretty messy but scraping always is but this could probably be
|
13
|
+
# cleaned up a ton if I looked at the page.
|
11
14
|
content.children.each do |el|
|
12
15
|
if (el.name == 'h3')
|
13
16
|
found = true
|
@@ -27,7 +30,8 @@ class QuarantineLiveStreams::Scraper
|
|
27
30
|
time = el.text.gsub(/.*?(?=Time)/im, "")
|
28
31
|
event_hash[:time] = time = time.slice(0..(time.index('. ETL')))
|
29
32
|
if event_hash[:link] = el.css('a').attr('href')
|
30
|
-
|
33
|
+
# INDENT
|
34
|
+
event_hash[:link] = el.css('a').attr('href').value
|
31
35
|
end
|
32
36
|
@events_array << event_hash
|
33
37
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: QuarantineLiveStreams
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mattenbar
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2020-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
@@ -98,7 +98,8 @@ description: Scrapes upcoming events that are being live streamed and then retur
|
|
98
98
|
the date time and link ot the event
|
99
99
|
email:
|
100
100
|
- matthew.enbar@gmail.com
|
101
|
-
executables:
|
101
|
+
executables:
|
102
|
+
- QLS
|
102
103
|
extensions: []
|
103
104
|
extra_rdoc_files: []
|
104
105
|
files:
|
@@ -106,8 +107,10 @@ files:
|
|
106
107
|
- ".gitignore"
|
107
108
|
- CODE_OF_CONDUCT.md
|
108
109
|
- Gemfile
|
110
|
+
- Gemfile.lock
|
109
111
|
- LICENSE.txt
|
110
112
|
- NOTES.md
|
113
|
+
- QuarantineLiveStreams-0.1.0.gem
|
111
114
|
- QuarantineLiveStreams.gemspec
|
112
115
|
- README.md
|
113
116
|
- Rakefile
|