Top_Movies_Of 0.2.0
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/top_movies_of +5 -0
- data/lib/Top_Movies_Of/cli.rb +48 -0
- data/lib/Top_Movies_Of/movie.rb +31 -0
- data/lib/Top_Movies_Of/scraper.rb +76 -0
- data/lib/Top_Movies_Of/version.rb +3 -0
- data/lib/Top_Movies_Of.rb +4 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 39f150f93fa964738d8c9a86151148bac4d73299865b195110e3a637a8cda96e
|
4
|
+
data.tar.gz: aa83e0be8126dc36685812b888942ef1a29794b53a17d7fd6316fca4b2a65661
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 76294aec15e793c8e142a432e4c8912610253fb612d287f4459bd0e36bf8239b1619d5655981c7056d1165847be49cd7fd76206130786cdfd31d8e6a3546900e
|
7
|
+
data.tar.gz: d007f896ea3d61e02d34c290bd1a5ec5e94423d14416002ebba35e6a68c1d0cb4b9d0bef2905c2f37c144c1bb93c3ac2cf314dfd8f42a89e2426128bb82ecdd4
|
data/bin/top_movies_of
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
class TopMoviesOf::CLI
|
3
|
+
|
4
|
+
def call
|
5
|
+
puts "Hello, welcome to Top Movies Of!"
|
6
|
+
puts "What year would you like to see the Top Movies Of?"
|
7
|
+
@year = gets.strip.to_i
|
8
|
+
#make scraper method in order to get Movie objects returned to this class
|
9
|
+
start
|
10
|
+
end
|
11
|
+
|
12
|
+
def start(answer = nil)
|
13
|
+
@answer = "y"
|
14
|
+
while @answer.downcase == "y"
|
15
|
+
#need to validate to make sure there are enough movies - what to do if the year doesn't have 30 top movies?
|
16
|
+
show_movies
|
17
|
+
puts "Which movie would you like to see more information on?"
|
18
|
+
@single_mov = gets.strip.to_i
|
19
|
+
#method to show movie
|
20
|
+
show_single_movie(@single_mov)
|
21
|
+
puts "Would you like to see more ranked movies? Type 'Y' for yes, or any other letter for no."
|
22
|
+
@answer = gets.strip.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def show_movies
|
27
|
+
@new_scraper = TopMoviesOf::Scraper.new
|
28
|
+
@new_scraper.make_movies(@year)
|
29
|
+
#Movie method to find movies based on input
|
30
|
+
TopMoviesOf::Movie.all.each do |movie|
|
31
|
+
puts ""
|
32
|
+
puts "#{movie.ranking}.#{movie.name}"
|
33
|
+
puts "-----------------------------------"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def show_single_movie(input)
|
38
|
+
movie = @new_scraper.add_attributes(input)
|
39
|
+
puts ""
|
40
|
+
puts "Movie you selected: #{movie.name}"
|
41
|
+
puts ""
|
42
|
+
puts "Score: #{movie.score}"
|
43
|
+
puts ""
|
44
|
+
puts "Summary: #{movie.summary}"
|
45
|
+
puts ""
|
46
|
+
puts "-------------------------"
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class TopMoviesOf::Movie
|
2
|
+
|
3
|
+
@@all = []
|
4
|
+
|
5
|
+
attr_accessor :name, :score, :ranking, :summary
|
6
|
+
|
7
|
+
def initialize(ranking = nil, name = nil, score = nil, summary = nil)
|
8
|
+
@ranking = ranking
|
9
|
+
@name = name
|
10
|
+
@score = score
|
11
|
+
@summary = summary
|
12
|
+
@@all <<self
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all
|
16
|
+
@@all
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.find_movie(input)
|
20
|
+
self.all.each do |movie|
|
21
|
+
if movie.ranking == input
|
22
|
+
@name = movie.name
|
23
|
+
return movie
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'nikkou'
|
4
|
+
|
5
|
+
class TopMoviesOf::Scraper
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_page(year)
|
11
|
+
@doc = Nokogiri::HTML(open("https://www.rottentomatoes.com/top/bestofrt/?year=#{year}"))
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_movie_title #gets an array of top movie titles
|
15
|
+
get_title = get_page(@year).css("td .articleLink")
|
16
|
+
array = []
|
17
|
+
get_title.each do |title|
|
18
|
+
array << title.text.lstrip
|
19
|
+
end
|
20
|
+
return array
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_single_movie_page(name) #scrape specific movie page
|
24
|
+
if url=get_page(@year).search('td').text_includes("#{name}").first
|
25
|
+
attributes = url.search("a")
|
26
|
+
url_name = attributes.first.values.first
|
27
|
+
Nokogiri::HTML(open("https://www.rottentomatoes.com#{url_name}"))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_movie_score(name)
|
32
|
+
if get_single_movie_page(name) != nil
|
33
|
+
page = get_single_movie_page(name)
|
34
|
+
@score = page.css("#all-critics-numbers .superPageFontColor").first.text
|
35
|
+
return @score
|
36
|
+
else
|
37
|
+
puts "#{name} #{page}"
|
38
|
+
puts "Sorry, I cannot pull up information about this movie"
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_movie_summary(name)
|
44
|
+
if get_single_movie_page(name) != nil
|
45
|
+
page = get_single_movie_page(name)
|
46
|
+
@summary = page.css("#movieSynopsis").text.lstrip
|
47
|
+
return @summary
|
48
|
+
else
|
49
|
+
puts "#{name} #{page}"
|
50
|
+
puts "Sorry, I cannot pull up information about this movie"
|
51
|
+
return nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def make_movies(year) #makes movie objects from array of movie titles
|
56
|
+
@year = year
|
57
|
+
x = 1
|
58
|
+
while x <= get_movie_title.length
|
59
|
+
get_movie_title[0..49].each do |movie|
|
60
|
+
format_movie = movie.split(" (")
|
61
|
+
new_mov = TopMoviesOf::Movie.new(ranking = x,name = format_movie[0])
|
62
|
+
x+=1
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_attributes(input) #adds score and summary for a single movie that is chosen
|
68
|
+
movie = TopMoviesOf::Movie.find_movie(input)
|
69
|
+
summary = get_movie_summary(movie.name)
|
70
|
+
score = get_movie_score(movie.name)
|
71
|
+
movie.summary = summary
|
72
|
+
movie.score = score
|
73
|
+
return movie
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Top_Movies_Of
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "'Parv Kumar'"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
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: nokogiri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: X
|
84
|
+
email:
|
85
|
+
- "'parvathikumar92@gmail.com'"
|
86
|
+
executables:
|
87
|
+
- top_movies_of
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- bin/top_movies_of
|
92
|
+
- lib/Top_Movies_Of.rb
|
93
|
+
- lib/Top_Movies_Of/cli.rb
|
94
|
+
- lib/Top_Movies_Of/movie.rb
|
95
|
+
- lib/Top_Movies_Of/scraper.rb
|
96
|
+
- lib/Top_Movies_Of/version.rb
|
97
|
+
homepage: http://rubygems.org/gems/top-movies-of
|
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.7.3
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Find Top Movies
|
121
|
+
test_files: []
|