movieDB 0.2.4 → 0.2.7
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 +5 -13
- data/README.md +11 -32
- data/lib/movieDB.rb +49 -128
- data/lib/movieDB/base.rb +0 -1
- data/lib/movieDB/data_analysis.rb +4 -4
- data/lib/movieDB/data_export.rb +74 -106
- data/lib/movieDB/version.rb +1 -1
- metadata +27 -28
- data/.DS_Store +0 -0
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
ZjVjMDg2M2ZkZGFlNjdmZGU5N2IxY2NkNGM0Yzk2YTc0MzU0ZDJlZg==
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 124312db314fc9ba1cffc82ab4a756954cf499dc
|
|
4
|
+
data.tar.gz: ab27ef56e493ec17a98d40e21b7ef93abc5410ef
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
ZGMyZWRiYTU1MjQ3Zjg1N2NiNzA5ZDU5NzhkYjA0MWU5ZDVjMjRhZjIyNTRh
|
|
11
|
-
MmE5ZGNmMDFlMWQ3MjA4MWEwYzlhY2MyNjg0ZTRjMTE4MzVhNzg=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
ZjlhYjYxMzNiNDIwODU0NGE2NTllNWMzYzFiYTZkNzA0MjYxMzJkZDRmYjBi
|
|
14
|
-
NTAxMjFmN2ZmYmZlMmFlMDEzNTllZTFjZDM2Njk5YjkwYTM2ODQ1ZmI0MDE1
|
|
15
|
-
ZGQ1NjUwMDI5NjYwZmJmMGZjZDQyOWRlYWVlNmNmMDdkOTFhNTM=
|
|
6
|
+
metadata.gz: d566633537eaec4e45bc7dbe89a12fe003bf028e125b6e3774d19f02124212966b978b9fbb34cd9210125e898449b2e265698484bb689adec4016fae596072e2
|
|
7
|
+
data.tar.gz: a7a50173eeb6e75cd94051ca85e67399ddda31f25335e45788aa668cce525b6f97780e5102447beb0a982d12f35597c5bf8c0efe89a1508c2e1abbf8ed0da5e0
|
data/README.md
CHANGED
|
@@ -11,23 +11,6 @@ Basic functions and Data Analysis:
|
|
|
11
11
|
* Exploratory Data Analysis
|
|
12
12
|
* Confirmatory Data Analysis
|
|
13
13
|
|
|
14
|
-
#### VERY IMPORTANT NOTE
|
|
15
|
-
|
|
16
|
-
Our budget feature depends on themoviedb gem.
|
|
17
|
-
|
|
18
|
-
Please follow the URL links for reading info.
|
|
19
|
-
|
|
20
|
-
* https://www.themoviedb.org
|
|
21
|
-
* https://github.com/ahmetabdi/themoviedb
|
|
22
|
-
|
|
23
|
-
## Requirements
|
|
24
|
-
|
|
25
|
-
ruby 1.9.x
|
|
26
|
-
|
|
27
|
-
themoviedb api key
|
|
28
|
-
|
|
29
|
-
code formattted using TomDoc code documentation specification
|
|
30
|
-
|
|
31
14
|
## Installation
|
|
32
15
|
|
|
33
16
|
Add this line to your application's Gemfile:
|
|
@@ -48,29 +31,25 @@ Or install it yourself as:
|
|
|
48
31
|
|
|
49
32
|
> require 'movieDB'
|
|
50
33
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
> require 'themoviedb'
|
|
54
|
-
|
|
55
|
-
## Usage - Fetch Raw Movie Data From IMDb (3 Steps)
|
|
34
|
+
## Usage - Fetch Raw Movie Data From IMDb
|
|
56
35
|
|
|
57
|
-
> MovieDB::Movie.
|
|
36
|
+
> MovieDB::Movie.get_data("0369610", "3079380")
|
|
58
37
|
|
|
59
|
-
|
|
38
|
+
/* YOU CAN ADD AS MANY IMDB IDs AS YOU LIKE. BUT DO NOT EXCEED THE MAXIMUM REQUEST RATE. */
|
|
60
39
|
|
|
61
|
-
|
|
40
|
+
### IMDb Data
|
|
62
41
|
|
|
63
|
-
|
|
42
|
+
When IMDb data is fetched, two things happen.
|
|
64
43
|
|
|
65
|
-
|
|
44
|
+
First a reports folder is created in the movieDB gem.
|
|
66
45
|
|
|
67
|
-
|
|
46
|
+
Second, the fetched data is written to an xls format and stored in the reports directory.
|
|
68
47
|
|
|
69
|
-
The
|
|
48
|
+
The file name is 'imdb_' + name title of the films you requested + today's date
|
|
70
49
|
|
|
71
|
-
|
|
50
|
+
For example, the fetched data used
|
|
72
51
|
|
|
73
|
-
$ open /reports/
|
|
52
|
+
$ open /reports/imdb_JurassicWorld_Spy_20150611.xls
|
|
74
53
|
|
|
75
54
|
## Usage - Analyze Raw Data and Generate Statistical Results (4 Steps)
|
|
76
55
|
|
|
@@ -80,7 +59,7 @@ The file name is 'imdb_raw_data_' + today's date.
|
|
|
80
59
|
|
|
81
60
|
> require 'MovieDB/data_process'
|
|
82
61
|
|
|
83
|
-
> MovieDB::DataProcess.send(:basic_statistic, '
|
|
62
|
+
> MovieDB::DataProcess.send(:basic_statistic, 'mdb_JurassicWorld_Spy_20150611.xls')
|
|
84
63
|
|
|
85
64
|
### Exported - Analyzed Data
|
|
86
65
|
|
data/lib/movieDB.rb
CHANGED
|
@@ -2,13 +2,13 @@ require "rubygems"
|
|
|
2
2
|
require "time" # Time is an abstraction of dates and times.
|
|
3
3
|
require "open-uri" # is an easy-to-use wrapper for net/http, net/https and net/ftp.
|
|
4
4
|
require "nokogiri" # is an HTML, XML, SAX, and Reader parser.
|
|
5
|
-
require "zimdb" # Access movie information from IMDb via the API offered by http://www.imdbapi.com/
|
|
6
5
|
require "themoviedb" # Provides a simple, easy to use interface for the Movie Database API.
|
|
7
6
|
require "imdb" # Easily use Ruby or the command line to find information on IMDB.com.
|
|
8
7
|
require "spreadsheet" # A library designed to read and write Spreadsheet Documents.
|
|
9
8
|
require "MovieDB/base"
|
|
10
9
|
require "MovieDB/data_analysis"
|
|
11
10
|
require "MovieDB/secret"
|
|
11
|
+
require "MovieDB/data_export"
|
|
12
12
|
|
|
13
13
|
unless defined? MovieDB::Movie
|
|
14
14
|
module MovieDB #:nodoc:
|
|
@@ -28,6 +28,7 @@ unless defined? MovieDB::Movie
|
|
|
28
28
|
class Movie < MovieDB::Base
|
|
29
29
|
include StatusChecker
|
|
30
30
|
|
|
31
|
+
extend MovieDB::DataExport
|
|
31
32
|
extend MovieDB::Secret::Lock
|
|
32
33
|
|
|
33
34
|
const_set("MovieError", Class.new(StandardError))
|
|
@@ -97,6 +98,7 @@ unless defined? MovieDB::Movie
|
|
|
97
98
|
DEFAULT_BAFTA_NOMINATION = 3
|
|
98
99
|
DEFAULT_BAFTA_WINS = 1
|
|
99
100
|
DEFAULT_FILM_RELEASE = ['theatrical', 'video', 'television', 'internet', 'print']
|
|
101
|
+
|
|
100
102
|
def initialize(attributes = {})
|
|
101
103
|
$IMDB_ATTRIBUTES_HEADERS = movie_attr = %w(title cast_members cast_characters cast_member_ids cast_members_characters
|
|
102
104
|
trailer_url director writer filming_locations company genres languages countries
|
|
@@ -107,144 +109,63 @@ unless defined? MovieDB::Movie
|
|
|
107
109
|
movie_attr.each do |attr|
|
|
108
110
|
self.send("#{attr}=", (attributes.has_key?(attr.to_sym) ? attributes[attr.to_sym] : self.class.const_get("DEFAULT_#{attr.upcase}")))
|
|
109
111
|
end
|
|
110
|
-
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Iterating through the block for title duplication.
|
|
114
|
-
# Return true if the array is not nil.
|
|
115
|
-
# Absence of title duplications should yield an empty array.
|
|
116
|
-
def self.title_present?
|
|
117
|
-
titles = Movie.instance_eval { filter_movie_attr("title") }
|
|
118
|
-
@title_exist = titles.detect { |duplicates| titles.count(duplicates) > 1 }
|
|
119
|
-
!@title_exist.nil?
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def unique_id
|
|
123
|
-
@unique_id ||= "#{Date.today}#{Array.new(9){rand(9)}.join}".gsub('-','')
|
|
124
112
|
end
|
|
125
113
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
114
|
+
# This is empty the container #
|
|
115
|
+
# def clear_data_store
|
|
116
|
+
# return @movie_DS = []
|
|
117
|
+
# end
|
|
118
|
+
|
|
119
|
+
# You can Imdb movie data like this:
|
|
120
|
+
#
|
|
121
|
+
# MovieDB::Movie.send(:get_multiple_imdb_movie_data, "2024544", "1800241")
|
|
122
|
+
#
|
|
123
|
+
# Example: You can also collect the title attribute:
|
|
124
|
+
#
|
|
125
|
+
# MovieDB::Movie.instance_eval { filter_movie_attr("title") }
|
|
126
|
+
def self.get_data(*args)
|
|
127
|
+
@movie_DS = []
|
|
128
|
+
|
|
129
|
+
args.each do |value|
|
|
130
|
+
movie_info = Movie.new
|
|
131
131
|
@movie_data = Imdb::Movie.new(value)
|
|
132
|
-
return @movie_data
|
|
133
|
-
end
|
|
134
132
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
133
|
+
begin
|
|
134
|
+
movie_info.title = Array.new << @movie_data.title
|
|
135
|
+
movie_info.cast_members = @movie_data.cast_members.flatten
|
|
136
|
+
movie_info.cast_characters = @movie_data.cast_characters
|
|
137
|
+
movie_info.cast_member_ids = @movie_data.cast_member_ids
|
|
138
|
+
movie_info.cast_members_characters = @movie_data.cast_members_characters
|
|
139
|
+
movie_info.trailer_url = @movie_data.trailer_url.nil? ? 'No Trailer' : @movie_data.trailer_url
|
|
140
|
+
movie_info.director = @movie_data.director.flatten
|
|
141
|
+
movie_info.writer = @movie_data.writers.flatten
|
|
142
|
+
movie_info.filming_locations = @movie_data.filming_locations.flatten.join(', ')
|
|
143
|
+
movie_info.company = Array.new << @movie_data.company
|
|
144
|
+
movie_info.genres = @movie_data.genres.flatten.join(' ').sub(' ' , ', ')
|
|
145
|
+
movie_info.languages = Array.new << @movie_data.languages.flatten.join(' ').sub(' ' , ', ')
|
|
146
|
+
movie_info.countries = Array.new << @movie_data.countries.flatten.join(' ').sub(' ' , ', ')
|
|
147
|
+
movie_info.length = Array.new << @movie_data.length
|
|
148
|
+
movie_info.plot = Array.new << @movie_data.plot
|
|
149
|
+
movie_info.poster = Array.new << @movie_data.poster
|
|
150
|
+
movie_info.rating = Array.new << @movie_data.rating
|
|
151
|
+
movie_info.votes = Array.new << @movie_data.votes
|
|
152
|
+
movie_info.mpaa_rating = Array.new << @movie_data.mpaa_rating == [nil] ? ["Not Rated"] : [@movie_data.mpaa_rating]
|
|
153
|
+
movie_info.tagline = Array.new << @movie_data.tagline
|
|
154
|
+
movie_info.year = Array.new << @movie_data.year
|
|
155
|
+
movie_info.release_date = Array.new << @movie_data.release_date
|
|
156
|
+
rescue
|
|
157
|
+
raise ArgumentError, 'Invalid IMDb id entered.'
|
|
152
158
|
end
|
|
153
159
|
|
|
154
|
-
|
|
155
|
-
get_imdb_movie_data(value)
|
|
156
|
-
@movie_DS ||=[]
|
|
157
|
-
movie_info = Movie.new
|
|
158
|
-
|
|
159
|
-
# Query themoviedb.org for film revenue.
|
|
160
|
-
# returns 0 if revenue record doesn't exist.
|
|
161
|
-
tmdb_arr = []
|
|
162
|
-
tmdb_key = MovieDB::Movie.key
|
|
163
|
-
Tmdb::Api.key(tmdb_key)
|
|
164
|
-
tmdb = Tmdb::Movie.find(@movie_data.title)
|
|
165
|
-
|
|
166
|
-
if tmdb.empty?
|
|
167
|
-
tmdb_data = Tmdb::Movie.new
|
|
168
|
-
tmdb_data.revenue = 0
|
|
169
|
-
else
|
|
170
|
-
tmdb.select { |t| tmdb_arr << t.id }
|
|
171
|
-
tmdb_id = tmdb_arr[0]
|
|
172
|
-
tmdb_data = Tmdb::Movie.detail(tmdb_id)
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
begin
|
|
176
|
-
movie_info.title = Array.new << @movie_data.title
|
|
177
|
-
movie_info.cast_members = @movie_data.cast_members.flatten
|
|
178
|
-
movie_info.cast_characters = @movie_data.cast_characters
|
|
179
|
-
movie_info.cast_member_ids = @movie_data.cast_member_ids
|
|
180
|
-
movie_info.cast_members_characters = @movie_data.cast_members_characters
|
|
181
|
-
movie_info.trailer_url = @movie_data.trailer_url.nil? ? 'No Trailer' : @movie_data.trailer_url
|
|
182
|
-
movie_info.director = @movie_data.director.flatten
|
|
183
|
-
movie_info.writer = @movie_data.writers.flatten
|
|
184
|
-
movie_info.filming_locations = @movie_data.filming_locations.flatten.join(', ')
|
|
185
|
-
movie_info.company = Array.new << @movie_data.company
|
|
186
|
-
movie_info.genres = @movie_data.genres.flatten.join(' ').sub(' ' , ', ')
|
|
187
|
-
movie_info.languages = Array.new << @movie_data.languages.flatten.join(' ').sub(' ' , ', ')
|
|
188
|
-
movie_info.countries = Array.new << @movie_data.countries.flatten.join(' ').sub(' ' , ', ')
|
|
189
|
-
movie_info.length = Array.new << @movie_data.length
|
|
190
|
-
movie_info.plot = Array.new << @movie_data.plot
|
|
191
|
-
movie_info.poster = Array.new << @movie_data.poster
|
|
192
|
-
movie_info.rating = Array.new << @movie_data.rating
|
|
193
|
-
movie_info.votes = Array.new << @movie_data.votes
|
|
194
|
-
movie_info.mpaa_rating = Array.new << @movie_data.mpaa_rating == [nil] ? ["Not Rated"] : [@movie_data.mpaa_rating]
|
|
195
|
-
movie_info.tagline = Array.new << @movie_data.tagline
|
|
196
|
-
movie_info.year = Array.new << @movie_data.year
|
|
197
|
-
movie_info.release_date = Array.new << @movie_data.release_date
|
|
198
|
-
movie_info.worldwide_gross = Array.new << tmdb_data["revenue"]
|
|
199
|
-
movie_info.unique_id = @unique_id
|
|
200
|
-
|
|
201
|
-
# TODO: Write API to request additional data from AMPAS.
|
|
202
|
-
#
|
|
203
|
-
# Example: We can fetch the data like this:
|
|
204
|
-
#
|
|
205
|
-
# movie_info.academy_award_nomination = academy_award_nomination
|
|
206
|
-
# movie_info.academy_award_wins = academy_award_wins
|
|
207
|
-
# movie_info.golden_globe_nominations = golden_globe_nominations
|
|
208
|
-
# movie_info.golden_globe_wins = golden_globe_wins
|
|
209
|
-
# movie_info.bafta_nomination = bafta_nomination
|
|
210
|
-
# movie_info.bafta_wins = bafta_wins
|
|
211
|
-
$GLOBAL_MOVIE_DS = @movie_DS << movie_info
|
|
212
|
-
rescue
|
|
213
|
-
raise ArgumentError, 'invalid imbd id'
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
return @movie_DS
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
def clear_data_store
|
|
221
|
-
@movie_DS = []
|
|
222
|
-
|
|
223
|
-
return @movie_DS
|
|
160
|
+
@movie_DS << movie_info
|
|
224
161
|
end
|
|
225
162
|
|
|
226
|
-
|
|
227
|
-
#
|
|
228
|
-
# Example
|
|
229
|
-
#
|
|
230
|
-
# Movie.filter_movie_attr('cast_members') #=> ["Chris_Hemsworth", "Natalie_Portman"]
|
|
231
|
-
def filter_movie_attr(attr)
|
|
232
|
-
attr_raw = attr
|
|
233
|
-
attr_sym = attr.to_sym
|
|
234
|
-
|
|
235
|
-
raise ArgumentError, ("#{attr_sym} is not a valid attribute." if !attr_sym == :director && :cast_members)
|
|
236
|
-
filtered = @movie_DS.select{ |ds| ds.attr_title? }.map(&attr_sym)#.flatten
|
|
237
|
-
attr_raw == ('languages' && 'title') ? filtered : filtered#.uniq
|
|
238
|
-
end
|
|
163
|
+
write_imdb_data_to_xls
|
|
239
164
|
end
|
|
240
165
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
def attr_title
|
|
244
|
-
!@title.nil?
|
|
166
|
+
def self.write_imdb_data_to_xls
|
|
167
|
+
Movie.export_movie_data(@movie_DS)
|
|
245
168
|
end
|
|
246
|
-
alias :attr_title? :attr_title
|
|
247
|
-
|
|
248
169
|
end
|
|
249
170
|
end
|
|
250
171
|
end
|
data/lib/movieDB/base.rb
CHANGED
|
@@ -7,7 +7,7 @@ module MovieDB
|
|
|
7
7
|
module AnalysisOfVariance
|
|
8
8
|
module LeastSquares
|
|
9
9
|
module Statistic
|
|
10
|
-
def basic_statistic
|
|
10
|
+
def basic_statistic(directory_name)
|
|
11
11
|
open_spreadsheet(directory_name)
|
|
12
12
|
|
|
13
13
|
if check_imdb_count == true
|
|
@@ -37,7 +37,9 @@ module MovieDB
|
|
|
37
37
|
|
|
38
38
|
def perform_computation
|
|
39
39
|
# Perform computation on the data collected.
|
|
40
|
+
#
|
|
40
41
|
# TODO: Need to use coefficienct statistical formula.
|
|
42
|
+
#
|
|
41
43
|
# Calculate median as an example but COD formula must be used.
|
|
42
44
|
# Mean is commonly called as average. Mean or Average is defined as the sum of
|
|
43
45
|
# all the given elements divided by the total number of elements.
|
|
@@ -228,7 +230,7 @@ module MovieDB
|
|
|
228
230
|
end
|
|
229
231
|
|
|
230
232
|
class ExportData
|
|
231
|
-
def write_spreadsheet
|
|
233
|
+
def write_spreadsheet(data, data_analysis_name)
|
|
232
234
|
begin data_analysis.is_a? String
|
|
233
235
|
@data_analysis_name = data_analysis_name.split.join.gsub('_', ' ').downcase.to_s
|
|
234
236
|
case data_analysis_name
|
|
@@ -256,7 +258,5 @@ module MovieDB
|
|
|
256
258
|
end
|
|
257
259
|
end
|
|
258
260
|
|
|
259
|
-
def write_discrete_least_squares_meshless_method; end
|
|
260
|
-
def write_discrete_least_squares_meshless_method; end
|
|
261
261
|
end
|
|
262
262
|
end
|
data/lib/movieDB/data_export.rb
CHANGED
|
@@ -1,129 +1,97 @@
|
|
|
1
1
|
require "spreadsheet"
|
|
2
|
-
require "MovieDB"
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
# JSON Data (movie_DS) fetched from IMDb by the movieDB.rb module is processed here.
|
|
4
|
+
# Spreadsheet gem is used to writes the attributes in an xls format to the report folder,
|
|
5
|
+
# where it is later used for data analysis.
|
|
6
|
+
#
|
|
7
|
+
# Usage / Example:
|
|
8
|
+
#
|
|
9
|
+
# MovieDB::Movie.export_movie_data(IMDB_JSON_FILE)
|
|
9
10
|
module MovieDB
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
write_xls_file
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def create_spreadsheet_file
|
|
21
|
-
directory_name = 'reports'
|
|
22
|
-
create_directory(directory_name)
|
|
23
|
-
Spreadsheet.client_encoding = 'UTF-8'
|
|
24
|
-
@book = Spreadsheet::Workbook.new
|
|
25
|
-
@sheet = @book.create_worksheet name: "Data Analysis: #{$DATA_ANALYSIS_NAME}" # the analysis name should be an input
|
|
26
|
-
end
|
|
11
|
+
module DataExport
|
|
12
|
+
def export_movie_data(movie_DS)
|
|
13
|
+
@movie_DS = movie_DS
|
|
14
|
+
create_spreadsheet_file
|
|
15
|
+
create_spreadsheet_report(movie_DS)
|
|
16
|
+
write_xls_file
|
|
17
|
+
end
|
|
27
18
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
def create_spreadsheet_file
|
|
20
|
+
directory_name = 'reports'
|
|
21
|
+
create_directory(directory_name)
|
|
31
22
|
|
|
32
|
-
|
|
33
|
-
create_spreadsheet_header
|
|
34
|
-
create_spreadsheet_body
|
|
35
|
-
end
|
|
23
|
+
Spreadsheet.client_encoding = 'UTF-8'
|
|
36
24
|
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
@book = Spreadsheet::Workbook.new
|
|
26
|
+
@sheet = @book.create_worksheet
|
|
27
|
+
@sheet.name = report_name if @movie_DS
|
|
28
|
+
@sheet.name = "Data Analysis: #{$DATA_ANALYSIS_NAME}" if $DATA_ANALYSIS_NAME
|
|
29
|
+
end
|
|
39
30
|
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
def create_directory(directory_name)
|
|
32
|
+
Dir.mkdir(directory_name) unless File.exists? directory_name
|
|
33
|
+
end
|
|
42
34
|
|
|
43
|
-
|
|
35
|
+
def create_spreadsheet_report(movie_DS)
|
|
36
|
+
create_spreadsheet_header
|
|
37
|
+
create_spreadsheet_body(movie_DS)
|
|
38
|
+
end
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@sheet.column(22).default_format = float_format
|
|
48
|
-
end
|
|
40
|
+
def create_spreadsheet_header
|
|
41
|
+
@sheet.row(0).concat $IMDB_ATTRIBUTES_HEADERS
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# The Data is obtained from MovieDB::Movie
|
|
53
|
-
# example
|
|
54
|
-
#
|
|
55
|
-
# Film: catching fire
|
|
56
|
-
def create_spreadsheet_body
|
|
57
|
-
$IMDB_ATTRIBUTES_HEADERS.each do |header|
|
|
58
|
-
case header
|
|
59
|
-
when 'title' then spreadsheet_body_text_data("title")
|
|
60
|
-
when 'cast_members' then spreadsheet_body_count_data("cast_members")
|
|
61
|
-
when 'cast_characters' then spreadsheet_body_count_data("cast_characters")
|
|
62
|
-
when 'cast_member_ids' then spreadsheet_body_count_data("cast_member_ids")
|
|
63
|
-
when 'cast_members_characters' then spreadsheet_body_count_data("cast_members_characters")
|
|
64
|
-
when 'trailer_url' then spreadsheet_body_text_data("trailer_url")
|
|
65
|
-
when 'director' then spreadsheet_body_text_data("director")
|
|
66
|
-
when 'writer' then spreadsheet_body_text_data("writer")
|
|
67
|
-
when 'filming_locations' then spreadsheet_body_text_data("filming_locations")
|
|
68
|
-
when 'company' then spreadsheet_body_text_data("company")
|
|
69
|
-
when 'genres' then spreadsheet_body_text_data("genres")
|
|
70
|
-
when 'languages' then spreadsheet_body_text_data("languages")
|
|
71
|
-
when 'countries' then spreadsheet_body_text_data("countries")
|
|
72
|
-
when 'length' then spreadsheet_body_numeric_data("length")
|
|
73
|
-
when 'plot' then spreadsheet_body_text_data("plot")
|
|
74
|
-
when 'poster' then spreadsheet_body_text_data("poster")
|
|
75
|
-
when 'rating' then spreadsheet_body_numeric_data("rating")
|
|
76
|
-
when 'votes' then spreadsheet_body_numeric_data("votes")
|
|
77
|
-
when 'mpaa_rating' then spreadsheet_body_numeric_data("mpaa_rating")
|
|
78
|
-
when 'tagline' then spreadsheet_body_text_data("tagline")
|
|
79
|
-
when 'year' then spreadsheet_body_numeric_data("year")
|
|
80
|
-
when 'release_date' then spreadsheet_body_numeric_data("release_date")
|
|
81
|
-
when 'worldwide_gross' then spreadsheet_body_numeric_data("worldwide_gross")
|
|
82
|
-
else
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
43
|
+
title_format = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 13
|
|
44
|
+
float_format = Spreadsheet::Format.new :number_format => "0.00"
|
|
86
45
|
|
|
87
|
-
|
|
88
|
-
|
|
46
|
+
@sheet.row(0).default_format = title_format
|
|
47
|
+
@sheet.column(1).default_format = float_format
|
|
48
|
+
@sheet.column(16).default_format = float_format
|
|
49
|
+
@sheet.column(22).default_format = float_format
|
|
50
|
+
end
|
|
89
51
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
52
|
+
# The values from the header_attr is converted from a string to a method.
|
|
53
|
+
# We accomplish this by using Object#send
|
|
54
|
+
#
|
|
55
|
+
# Example Usage:
|
|
56
|
+
#
|
|
57
|
+
# movie_attribute = movie_DS[i].send(header_attr)
|
|
58
|
+
#
|
|
59
|
+
# Starts the row insert on row 1 and not row 0.
|
|
60
|
+
#
|
|
61
|
+
# Example Usage:
|
|
62
|
+
#
|
|
63
|
+
# row = @sheet.row(i + 1)
|
|
64
|
+
def create_spreadsheet_body(movie_DS)
|
|
65
|
+
0.upto(movie_DS.length - 1) do |i|
|
|
66
|
+
row = @sheet.row(i + 1)
|
|
67
|
+
|
|
68
|
+
$IMDB_ATTRIBUTES_HEADERS.each do |header_attr|
|
|
69
|
+
string_values = ['title', 'language', 'length', 'rating', 'vote', 'release', 'mpaa_rating', 'year']
|
|
70
|
+
movie_attribute = movie_DS[i].send(header_attr)
|
|
71
|
+
|
|
72
|
+
row.push(movie_attribute.map { |t| t }.join(' ')) if ([].unshift header_attr).any? { |v| string_values.include?(v) }
|
|
73
|
+
row.push movie_attribute.length if (movie_attribute.is_a? Array) && ([].unshift header_attr).any? { |v| !string_values.include?(v) }
|
|
74
|
+
row.push(movie_attribute) if movie_attribute.is_a? String
|
|
93
75
|
end
|
|
94
76
|
end
|
|
77
|
+
end
|
|
95
78
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
0.upto(@e_t.length - 1) do |i|
|
|
100
|
-
element_array = []
|
|
101
|
-
|
|
102
|
-
element_array << element_cast[i].length
|
|
103
|
-
@sheet.row(1 + i).concat element_array
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def spreadsheet_body_numeric_data(header_title)
|
|
108
|
-
@e_t = element_title = MovieDB::Movie.instance_eval { filter_movie_attr(header_title) }
|
|
79
|
+
def report_name
|
|
80
|
+
name = "imdb_"
|
|
109
81
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
@sheet.row(1 + i).concat element_array
|
|
113
|
-
end
|
|
82
|
+
0.upto(@movie_DS.length - 1) do |i|
|
|
83
|
+
name << @movie_DS[i].title.map { |m| m }.join().gsub(' ', '') + "_"
|
|
114
84
|
end
|
|
115
85
|
|
|
116
|
-
|
|
117
|
-
name = "imdb_raw_data_".to_s.downcase
|
|
118
|
-
name << "#{Time.now.to_s.gsub(':', '').gsub('-', '').gsub(' ', '').split('')[0..9].join}"
|
|
119
|
-
end
|
|
86
|
+
name << "#{Time.now.to_s.gsub(':', '').gsub('-', '').gsub(' ', '').split('')[0..7].join}"
|
|
120
87
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
@book.write File.join('reports', filename)
|
|
124
|
-
return filename
|
|
125
|
-
end
|
|
88
|
+
return name
|
|
89
|
+
end
|
|
126
90
|
|
|
91
|
+
def write_xls_file
|
|
92
|
+
filename = ("#{report_name}.xls")
|
|
93
|
+
@book.write File.join('reports', filename)
|
|
94
|
+
return filename
|
|
127
95
|
end
|
|
128
96
|
end
|
|
129
97
|
end
|
data/lib/movieDB/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,153 +1,153 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: movieDB
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Albert McKeever
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-06-
|
|
11
|
+
date: 2015-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '1.3'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.3'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: imdb
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: zimdb
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: highline
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- -
|
|
87
|
+
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: '0'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- -
|
|
94
|
+
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: fakeweb
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- -
|
|
101
|
+
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- -
|
|
108
|
+
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: activesupport
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- -
|
|
115
|
+
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
117
|
version: 4.0.0
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- -
|
|
122
|
+
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: 4.0.0
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: spreadsheet
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
|
-
- -
|
|
129
|
+
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
131
|
version: '0'
|
|
132
132
|
type: :runtime
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
|
-
- -
|
|
136
|
+
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: themoviedb
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
|
-
- -
|
|
143
|
+
- - ">="
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
145
|
version: '0'
|
|
146
146
|
type: :runtime
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
|
-
- -
|
|
150
|
+
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
153
|
description: Perform Data Analysis on IMDB Movies
|
|
@@ -157,9 +157,8 @@ executables: []
|
|
|
157
157
|
extensions: []
|
|
158
158
|
extra_rdoc_files: []
|
|
159
159
|
files:
|
|
160
|
-
- .
|
|
161
|
-
- .
|
|
162
|
-
- .travis.yml
|
|
160
|
+
- ".gitignore"
|
|
161
|
+
- ".travis.yml"
|
|
163
162
|
- Gemfile
|
|
164
163
|
- LICENSE.txt
|
|
165
164
|
- README.md
|
|
@@ -194,17 +193,17 @@ require_paths:
|
|
|
194
193
|
- lib
|
|
195
194
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
196
195
|
requirements:
|
|
197
|
-
- -
|
|
196
|
+
- - ">="
|
|
198
197
|
- !ruby/object:Gem::Version
|
|
199
198
|
version: '0'
|
|
200
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
200
|
requirements:
|
|
202
|
-
- -
|
|
201
|
+
- - ">="
|
|
203
202
|
- !ruby/object:Gem::Version
|
|
204
203
|
version: '0'
|
|
205
204
|
requirements: []
|
|
206
205
|
rubyforge_project:
|
|
207
|
-
rubygems_version: 2.4.
|
|
206
|
+
rubygems_version: 2.4.6
|
|
208
207
|
signing_key:
|
|
209
208
|
specification_version: 4
|
|
210
209
|
summary: Movie/Film Statistic and Data Analysis
|
data/.DS_Store
DELETED
|
Binary file
|