new_movies_cinemark 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 +7 -0
- data/bin/new_movies +4 -0
- data/lib/new_movies/CLI.rb +99 -0
- data/lib/new_movies/cinemark_scraper.rb +28 -0
- data/lib/new_movies/movie.rb +34 -0
- data/lib/new_movies/version.rb +3 -0
- metadata +121 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 7490622f0da386066ef74d6360b997e72e807138
|
|
4
|
+
data.tar.gz: b6f2b0c0a8551b42d20b67eee2d9e6ed65e3335f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7a362cdd0a30d0ad4b3ae60a45f6e087ddde189ee1efc2b3e89b1b08b082680d1d9768e15f90ba6ba1bb007c29e4381f1e000fd8baa7d3676f1d73c41a770c26
|
|
7
|
+
data.tar.gz: 8352aa16ef9ea2256a9d58cdaafa992a3e296eef148b3ccb2e511e1c216908f86fe51df5824bf028b22200396254303321bbc88a564daf9ba039f3596e2cb323
|
data/bin/new_movies
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
class NewMovies::CLI
|
|
2
|
+
|
|
3
|
+
WIDTH = 70
|
|
4
|
+
|
|
5
|
+
def center(string, c = "-")
|
|
6
|
+
string = " #{string} " if string != ""
|
|
7
|
+
until string.length >= WIDTH
|
|
8
|
+
string.prepend(c)
|
|
9
|
+
string << (c)
|
|
10
|
+
end
|
|
11
|
+
string.prepend("\n")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def wrap(s)
|
|
16
|
+
s.gsub(/(.{1,#{WIDTH}})(\s+|\Z)/, "\\1\n ")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call
|
|
20
|
+
get_movies
|
|
21
|
+
main_menu
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def get_movies
|
|
25
|
+
NewMovies::Movie.create_movie_list(NewMovies::Scraper.scrape_coming_soon_movies)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def list_new_movies
|
|
30
|
+
puts center("MOVIES COMING SOON TO CINEMARK THEATRES")
|
|
31
|
+
puts " "
|
|
32
|
+
NewMovies::Movie.all.each_with_index do |movie, index|
|
|
33
|
+
puts " #{index+1}. #{movie.title}" if index.to_i < 9
|
|
34
|
+
puts " #{index+1}. #{movie.title}" if index.to_i > 9
|
|
35
|
+
end
|
|
36
|
+
puts center("END OF LIST")
|
|
37
|
+
puts " "
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def menu
|
|
41
|
+
print "Please select a number: "
|
|
42
|
+
input = gets.strip.downcase
|
|
43
|
+
if input == "exit"
|
|
44
|
+
goodbye
|
|
45
|
+
elsif input.to_i > 0 && input.to_i <= NewMovies::Movie.all.length
|
|
46
|
+
movie_details(input)
|
|
47
|
+
menu_restart
|
|
48
|
+
elsif input == "list"
|
|
49
|
+
menu
|
|
50
|
+
else
|
|
51
|
+
puts "Invalid entry, please select a valid number"
|
|
52
|
+
menu
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def main_menu
|
|
57
|
+
list_new_movies
|
|
58
|
+
input = nil
|
|
59
|
+
puts "What movie do you want more details about?"
|
|
60
|
+
menu
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def menu_restart
|
|
64
|
+
puts " "
|
|
65
|
+
puts "Enter 'list' to view the movies again or enter 'exit'."
|
|
66
|
+
input = gets.strip.downcase
|
|
67
|
+
if input == "exit"
|
|
68
|
+
goodbye
|
|
69
|
+
elsif input == "list"
|
|
70
|
+
main_menu
|
|
71
|
+
else
|
|
72
|
+
menu_restart
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def movie_details(input)
|
|
78
|
+
details = NewMovies::Movie.find_movie_by_index(input)
|
|
79
|
+
puts center("#{details.title.upcase}")
|
|
80
|
+
puts " "
|
|
81
|
+
puts " URL: #{details.url}" if details.url
|
|
82
|
+
puts " Runtime: #{details.runtime}" if details.runtime
|
|
83
|
+
puts " Rating: #{details.rating}" if details.rating != ""
|
|
84
|
+
puts " Genre: #{details.genre}" if details.genre
|
|
85
|
+
puts " Release Date: #{details.release_date}" if details.release_date
|
|
86
|
+
puts " Director: #{details.director}" if details.director
|
|
87
|
+
puts wrap(" Cast: #{details.cast}") if details.cast
|
|
88
|
+
puts wrap("\n Synopsis: #{details.synopsis}") if details.synopsis
|
|
89
|
+
puts " Movie Site: #{details.movie_site}" if details.movie_site
|
|
90
|
+
puts center("END OF DETAILS")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def goodbye
|
|
95
|
+
puts "See you next time!"
|
|
96
|
+
exit
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class NewMovies::Scraper
|
|
2
|
+
|
|
3
|
+
def self.scrape_coming_soon_movies
|
|
4
|
+
doc = Nokogiri::HTML(open("https://www.cinemark.com/movies/coming-soon"))
|
|
5
|
+
movie_collection = []
|
|
6
|
+
doc.css("div.card .title").collect do |new_movie|
|
|
7
|
+
movie_collection << {:title => new_movie.inner_text,
|
|
8
|
+
:url => "https://www.cinemark.com#{new_movie.attribute("href").value}"}
|
|
9
|
+
end
|
|
10
|
+
movie_collection
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.scrape_movie_details(movie)
|
|
14
|
+
doc = Nokogiri::HTML(open("#{movie.url}"))
|
|
15
|
+
attribute_values ={}
|
|
16
|
+
attributes = {"Release Dates" => "release_date", "Rating" => "rating", "Runtime" => "runtime", "Genre" => "genre", "Cast" => "cast", "Director" => "director", "Synopsis" => "synopsis"}
|
|
17
|
+
attributes.each do |attribute, v|
|
|
18
|
+
if doc.xpath("//h3[contains(text(), '#{attribute}')]").text.include?("#{attribute}")
|
|
19
|
+
attribute_values[[attributes[attribute]].join.to_sym] = doc.xpath("//h3[contains(text(), '#{attribute}')]/following-sibling::p")[0].text.strip
|
|
20
|
+
end
|
|
21
|
+
if doc.xpath("//h3[contains(text(), 'Official Site')]").text.strip.include?("Official Site")
|
|
22
|
+
attribute_values["movie_site"] = doc.css("p.trunc").text.strip
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
attribute_values
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'open-uri'
|
|
2
|
+
class NewMovies::Movie
|
|
3
|
+
attr_accessor :title, :url, :runtime, :genre, :release_date, :cast, :director, :movie_site, :synopsis, :rating, :index
|
|
4
|
+
|
|
5
|
+
@@all = []
|
|
6
|
+
|
|
7
|
+
def initialize(movie_list_hash)
|
|
8
|
+
movie_list_hash.each{|key, value| self.send(("#{key}="), value)}
|
|
9
|
+
@@all << self
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def attribute_assignment(movies_hash_attributes)
|
|
13
|
+
#binding.pry
|
|
14
|
+
movies_hash_attributes.each{|key, value| self.send(("#{key}="), value)}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.create_movie_list(movie_array)
|
|
18
|
+
movie_array.each do |movie|
|
|
19
|
+
NewMovies::Movie.new(movie)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.all
|
|
24
|
+
@@all
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.find_movie_by_index(index)
|
|
28
|
+
NewMovies::Movie.all[index.to_i - 1].attribute_assignment(NewMovies::Scraper.scrape_movie_details(NewMovies::Movie.all[index.to_i - 1]))
|
|
29
|
+
NewMovies::Movie.all[index.to_i - 1]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: new_movies_cinemark
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Oskar Mikolajczyk
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-11-06 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rspec
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: nokogiri
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: pry
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: bundler
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '1.15'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '1.15'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rake
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '10.0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '10.0'
|
|
83
|
+
description: Scrapes cinemark website for the movies and events that are coming to
|
|
84
|
+
cinemark theatres soon
|
|
85
|
+
email:
|
|
86
|
+
- omikolaj1@gmail.com
|
|
87
|
+
executables:
|
|
88
|
+
- new_movies
|
|
89
|
+
extensions: []
|
|
90
|
+
extra_rdoc_files: []
|
|
91
|
+
files:
|
|
92
|
+
- bin/new_movies
|
|
93
|
+
- lib/new_movies/CLI.rb
|
|
94
|
+
- lib/new_movies/cinemark_scraper.rb
|
|
95
|
+
- lib/new_movies/movie.rb
|
|
96
|
+
- lib/new_movies/version.rb
|
|
97
|
+
homepage: https://github.com/omikolaj/cinemark-cli-app
|
|
98
|
+
licenses:
|
|
99
|
+
- MIT
|
|
100
|
+
metadata: {}
|
|
101
|
+
post_install_message:
|
|
102
|
+
rdoc_options: []
|
|
103
|
+
require_paths:
|
|
104
|
+
- lib
|
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
|
+
requirements:
|
|
112
|
+
- - ">="
|
|
113
|
+
- !ruby/object:Gem::Version
|
|
114
|
+
version: '0'
|
|
115
|
+
requirements: []
|
|
116
|
+
rubyforge_project:
|
|
117
|
+
rubygems_version: 2.6.7
|
|
118
|
+
signing_key:
|
|
119
|
+
specification_version: 4
|
|
120
|
+
summary: Scrapes movies that are coming to theatres soon
|
|
121
|
+
test_files: []
|