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 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,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/new_movies'
3
+
4
+ NewMovies::CLI.new.call
@@ -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
@@ -0,0 +1,3 @@
1
+ module NewMovies
2
+ VERSION = "0.1.1"
3
+ 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: []