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 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
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require_relative "../lib/rt_top_100"
5
+
6
+ RtTop100::CLI.new.call
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
@@ -0,0 +1,3 @@
1
+ module RtTop100
2
+ VERSION = "0.2.0"
3
+ 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: []