rt_top_100 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/rt-top-100 +6 -0
- data/lib/rt_top_100.rb +14 -0
- data/lib/rt_top_100/cli.rb +120 -0
- data/lib/rt_top_100/movie.rb +34 -0
- data/lib/rt_top_100/scraper.rb +36 -0
- data/lib/rt_top_100/version.rb +3 -0
- metadata +121 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 513983a488a7c3b9fa1cebe2066521435bb10349
|
|
4
|
+
data.tar.gz: bb729a37f8ade68bdcb34f34c6b50e1c2836f7fe
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7a4809f40a60e348166caa9ddc62bd12516027b4bec252eb9d0acd24677b96c703772991129a04eb0e7cf361dd0d97350963dbbf82c1277a3206150991a50495
|
|
7
|
+
data.tar.gz: abb3b7b71d426f603d141d69e878db1ccdcc7e61d7dbf3685dde28db284e8d2944c5762e5ab7c9aa42457ead196d07115e0d4290ca790551192a9546d7461836
|
data/bin/rt-top-100
ADDED
data/lib/rt_top_100.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require "rt_top_100/version"
|
|
2
|
+
|
|
3
|
+
module RtTop100
|
|
4
|
+
# Your code goes here...
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require 'open-uri'
|
|
8
|
+
require 'nokogiri'
|
|
9
|
+
require 'pry'
|
|
10
|
+
|
|
11
|
+
require_relative "../lib/rt_top_100/version"
|
|
12
|
+
require_relative "../lib/rt_top_100/movie"
|
|
13
|
+
require_relative "../lib/rt_top_100/scraper"
|
|
14
|
+
require_relative "../lib/rt_top_100/cli"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
class RtTop100::CLI
|
|
2
|
+
|
|
3
|
+
def call
|
|
4
|
+
puts ""
|
|
5
|
+
puts "********* Best of Rotten Tomatoes: TOP 100 MOVIES OF ALL TIME *********"
|
|
6
|
+
puts ""
|
|
7
|
+
puts "Welcome cinephile! Which of Rotten Tomatoes' Top 100 Movies would you like to see?"
|
|
8
|
+
create_movies
|
|
9
|
+
start
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create_movies
|
|
13
|
+
RtTop100::Scraper.scrape_top_100("https://www.rottentomatoes.com/top/bestofrt/")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def start
|
|
17
|
+
puts ""
|
|
18
|
+
puts "Please select from the following options:"
|
|
19
|
+
puts "To see the top 100 movies, enter '1-25', '26-50', '51-75', or '76-100'"
|
|
20
|
+
puts "To see all the movies on the list released after a given year (starting in 1920), enter the year"
|
|
21
|
+
puts "To see the methodology behind the list, enter 'methodology'"
|
|
22
|
+
puts "To exit the program, enter 'exit'"
|
|
23
|
+
puts ""
|
|
24
|
+
input = gets.strip.downcase
|
|
25
|
+
|
|
26
|
+
display_movies(input)
|
|
27
|
+
|
|
28
|
+
puts ""
|
|
29
|
+
puts "To learn more about a specific movie, please enter the movie's rank. You can also enter 'main' to return to the main menu or 'exit' to exit the program."
|
|
30
|
+
input = gets.strip.downcase
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if input.to_i.between?(1,100)
|
|
34
|
+
selected_movie = RtTop100::Movie.all[input.to_i-1]
|
|
35
|
+
add_movie_details(selected_movie)
|
|
36
|
+
display_movie_details(selected_movie)
|
|
37
|
+
elsif input == "main"
|
|
38
|
+
start
|
|
39
|
+
elsif input == "exit"
|
|
40
|
+
exit
|
|
41
|
+
else
|
|
42
|
+
puts "I'm not quite sure what you meant."
|
|
43
|
+
start
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
puts ""
|
|
47
|
+
puts "Would you like to see more movies? Y/N"
|
|
48
|
+
puts ""
|
|
49
|
+
input = gets.strip.downcase
|
|
50
|
+
if input == "y"
|
|
51
|
+
start
|
|
52
|
+
elsif input == "n"
|
|
53
|
+
puts ""
|
|
54
|
+
puts "The End. Thank you!"
|
|
55
|
+
puts ""
|
|
56
|
+
exit
|
|
57
|
+
else
|
|
58
|
+
puts ""
|
|
59
|
+
puts "I'm not quite sure what you meant."
|
|
60
|
+
puts ""
|
|
61
|
+
start
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def display_movies(input)
|
|
66
|
+
if input == "1-25" || input == "26-50" || input == "51-75" || input == "76-100"
|
|
67
|
+
puts ""
|
|
68
|
+
puts "********* Best of Rotten Tomatoes: TOP MOVIES OF ALL TIME #{input} *********"
|
|
69
|
+
puts ""
|
|
70
|
+
list_from = input.to_i
|
|
71
|
+
RtTop100::Movie.all[list_from-1, 25].each.with_index(list_from) do | movie, rank |
|
|
72
|
+
puts "#{rank}. #{movie.title}"
|
|
73
|
+
end
|
|
74
|
+
elsif input.to_i.between?(1920, Date.today.year)
|
|
75
|
+
puts ""
|
|
76
|
+
puts "********* Best of Rotten Tomatoes: TOP MOVIES RELEASED IN OR AFTER #{input} *********"
|
|
77
|
+
puts ""
|
|
78
|
+
year = input.to_i
|
|
79
|
+
RtTop100::Movie.movies_release_after(year)
|
|
80
|
+
elsif input == "methodology"
|
|
81
|
+
puts ""
|
|
82
|
+
puts "Methodology: Each critic from Rotten Tomatoes' discrete list gets one vote, weighted equally. A movie must have 40 or more rated reviews to be considered. The 'Adjusted Score' comes from a weighted formula (Bayesian) that we use that accounts for variation in the number of reviews per movie."
|
|
83
|
+
puts ""
|
|
84
|
+
start
|
|
85
|
+
elsif input == "exit"
|
|
86
|
+
puts ""
|
|
87
|
+
puts "The End. Thank you!"
|
|
88
|
+
puts ""
|
|
89
|
+
exit
|
|
90
|
+
else
|
|
91
|
+
puts "I'm not quite sure what you meant."
|
|
92
|
+
start
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def add_movie_details(selected_movie)
|
|
97
|
+
details_hash = RtTop100::Scraper.scrape_movie("https://www.rottentomatoes.com#{selected_movie.movie_url}")
|
|
98
|
+
selected_movie.add_details(details_hash)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def display_movie_details(selected_movie)
|
|
102
|
+
puts ""
|
|
103
|
+
puts "********* Best of Rotten Tomatoes: #{selected_movie.title} *********"
|
|
104
|
+
puts ""
|
|
105
|
+
puts "Title: #{selected_movie.title}"
|
|
106
|
+
puts ""
|
|
107
|
+
puts "Tomatometer Score: #{selected_movie.tomatometer_score}"
|
|
108
|
+
puts "Audience Score: #{selected_movie.audience_score}"
|
|
109
|
+
puts "Critic Consensus: #{selected_movie.critic_consensus}"
|
|
110
|
+
puts ""
|
|
111
|
+
puts "Rated: #{selected_movie.rating}"
|
|
112
|
+
puts "Genre: #{selected_movie.genre}"
|
|
113
|
+
puts "Released: #{selected_movie.release_date}"
|
|
114
|
+
puts "Directed by: #{selected_movie.director}"
|
|
115
|
+
puts ""
|
|
116
|
+
puts "Synopsis: #{selected_movie.synopsis}"
|
|
117
|
+
puts ""
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class RtTop100::Movie
|
|
2
|
+
|
|
3
|
+
attr_accessor :title, :movie_url, :tomatometer_score, :audience_score, :critic_consensus, :release_date, :rating, :genre, :director, :synopsis
|
|
4
|
+
|
|
5
|
+
@@all = []
|
|
6
|
+
|
|
7
|
+
def initialize(movies_hash)
|
|
8
|
+
movies_hash.each do | attr, value |
|
|
9
|
+
self.send("#{attr}=", value)
|
|
10
|
+
end
|
|
11
|
+
@@all << self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_details(details_hash)
|
|
15
|
+
details_hash.each do | attr, value |
|
|
16
|
+
self.send("#{attr}=", value)
|
|
17
|
+
end
|
|
18
|
+
self
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.all
|
|
22
|
+
@@all
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.movies_release_after(year)
|
|
26
|
+
released_movies = @@all.each.with_index do | movie, rank |
|
|
27
|
+
if movie.title[-5..-2].to_i >= year
|
|
28
|
+
puts "#{rank+1}. #{movie.title}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
released_movies
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'pry'
|
|
2
|
+
require 'open-uri'
|
|
3
|
+
|
|
4
|
+
class RtTop100::Scraper
|
|
5
|
+
|
|
6
|
+
def self.scrape_top_100(main_url)
|
|
7
|
+
top_100_page = Nokogiri::HTML(open("https://www.rottentomatoes.com/top/bestofrt/"))
|
|
8
|
+
|
|
9
|
+
top_100_page.css("div.panel-body.content_body.allow-overflow table.table").each do | box |
|
|
10
|
+
box.css('a.unstyled.articleLink').each do |movie|
|
|
11
|
+
movie_title = movie.text.strip
|
|
12
|
+
movie_url = movie.attr('href')
|
|
13
|
+
RtTop100::Movie.new({title: movie_title, movie_url: movie_url})
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.scrape_movie(details_url)
|
|
19
|
+
movie_details = {}
|
|
20
|
+
details_page = Nokogiri::HTML(open(details_url))
|
|
21
|
+
|
|
22
|
+
details_page.css('#mainColumn').each do | detail |
|
|
23
|
+
movie_details[:tomatometer_score] = detail.css("#scorePanel .tab-content #all-critics-numbers a .meter-value").text
|
|
24
|
+
movie_details[:audience_score] = detail.css(".audience-score a .superPageFontColor").first.text
|
|
25
|
+
movie_details[:critic_consensus] = detail.css(".critic_consensus.tomato-info.noSpacing.superPageFontColor").text.gsub("Critic Consensus:", "").split.join(" ")
|
|
26
|
+
movie_details[:synopsis] = detail.css("#movieSynopsis").text.strip
|
|
27
|
+
movie_details[:rating] = detail.css("div.panel-body ul.content-meta li .meta-value").first.text.strip
|
|
28
|
+
movie_details[:release_date] = detail.css("div.panel-body ul.content-meta li .meta-value")[4].text.strip.split.join(" ")
|
|
29
|
+
movie_details[:genre] = detail.css("div.panel-body ul.content-meta li .meta-value")[1].text.strip.split.join(" ")
|
|
30
|
+
movie_details[:director] = detail.css("div.panel-body ul.content-meta li .meta-value")[2].text.strip
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
movie_details
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rt_top_100
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- daniellecroxton
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-09-17 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.15'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.15'
|
|
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: '3.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.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: View and learn more about Rotten Tomatoes Top 100 Movies of All Time
|
|
84
|
+
email:
|
|
85
|
+
- danikrist@gmail.com
|
|
86
|
+
executables:
|
|
87
|
+
- rt-top-100
|
|
88
|
+
extensions: []
|
|
89
|
+
extra_rdoc_files: []
|
|
90
|
+
files:
|
|
91
|
+
- bin/rt-top-100
|
|
92
|
+
- lib/rt_top_100.rb
|
|
93
|
+
- lib/rt_top_100/cli.rb
|
|
94
|
+
- lib/rt_top_100/movie.rb
|
|
95
|
+
- lib/rt_top_100/scraper.rb
|
|
96
|
+
- lib/rt_top_100/version.rb
|
|
97
|
+
homepage: https://github.com/daniellecroxton/rt_top_100
|
|
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.12
|
|
118
|
+
signing_key:
|
|
119
|
+
specification_version: 4
|
|
120
|
+
summary: Top 100 Movies of All Time from Rotten Tomatoes
|
|
121
|
+
test_files: []
|