imdb 0.6.8 → 0.7.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/.rspec +1 -0
- data/.travis.yml +18 -0
- data/Gemfile +1 -1
- data/README.rdoc +21 -0
- data/Rakefile +2 -11
- data/imdb.gemspec +4 -4
- data/lib/imdb.rb +4 -0
- data/lib/imdb/base.rb +191 -0
- data/lib/imdb/episode.rb +23 -0
- data/lib/imdb/movie.rb +1 -169
- data/lib/imdb/movie_list.rb +6 -7
- data/lib/imdb/search.rb +9 -9
- data/lib/imdb/season.rb +36 -0
- data/lib/imdb/serie.rb +23 -0
- data/lib/imdb/version.rb +1 -1
- data/spec/fixtures/plotsummary +975 -0
- data/spec/fixtures/search_kannethirey_thondrinal +773 -10
- data/spec/fixtures/search_killed_wife +771 -10
- data/spec/fixtures/search_star_trek +705 -762
- data/spec/fixtures/synopsis +1036 -0
- data/spec/fixtures/thewalkingdead-s1 +1295 -0
- data/spec/fixtures/thewalkingdead-s1e2 +1232 -0
- data/spec/fixtures/top_250 +470 -754
- data/spec/fixtures/tt0036855 +541 -366
- data/spec/fixtures/tt0083987 +553 -368
- data/spec/fixtures/tt0095016 +572 -394
- data/spec/fixtures/tt0110912 +578 -376
- data/spec/fixtures/tt0111161 +549 -388
- data/spec/fixtures/tt0117731 +534 -387
- data/spec/fixtures/tt0166222 +1795 -1694
- data/spec/fixtures/tt0242653 +544 -352
- data/spec/fixtures/tt0330508 +1553 -1474
- data/spec/fixtures/tt0468569 +603 -413
- data/spec/fixtures/tt1401252 +446 -381
- data/spec/fixtures/tt1520211 +1460 -0
- data/spec/imdb/cli_spec.rb +7 -7
- data/spec/imdb/episode_spec.rb +39 -0
- data/spec/imdb/movie_spec.rb +32 -22
- data/spec/imdb/search_spec.rb +16 -36
- data/spec/imdb/season_spec.rb +19 -0
- data/spec/imdb/series_spec.rb +21 -0
- data/spec/spec_helper.rb +9 -10
- metadata +92 -41
- data/spec/spec.opts +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ca782282c0207181d57c8732b2028c46e91854fa
|
4
|
+
data.tar.gz: 93857f4686f71950e2bbb514805e87ab0c075de4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b64b0288a5ee43eced42d0fe5ebbd6d4f9d4057d3941924f08399e8235a3467d4f950c5186e58b1f1deee95f90413b74b2dc9cfa295f9763c0f7e33ccf093618
|
7
|
+
data.tar.gz: 423bb452e2c11f1c74925c5ff591cc1fb11ed197242f65284166e6f2b9864106efcfcdb49648ec0064e313d3b4f697cfbd24b8fe399ed74206eee08f9054a1e9
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= imdb
|
2
2
|
|
3
|
+
{<img src="https://travis-ci.org/ariejan/imdb.png?branch=master" alt="Build Status" />}[https://travis-ci.org/ariejan/imdb]
|
4
|
+
|
3
5
|
home :: http://github.com/ariejan/imdb
|
4
6
|
rdoc :: http://ariejan.github.com/imdb/
|
5
7
|
bugs :: http://github.com/ariejan/imdb/issues
|
@@ -27,6 +29,25 @@ Movies:
|
|
27
29
|
i.cast_members.first
|
28
30
|
#=> "Bruce Willis"
|
29
31
|
|
32
|
+
Series:
|
33
|
+
|
34
|
+
serie = Imdb::Serie.new("1520211")
|
35
|
+
|
36
|
+
serie.title
|
37
|
+
#=> "\"The Walking Dead\""
|
38
|
+
|
39
|
+
serie.rating
|
40
|
+
#=> 8.8
|
41
|
+
|
42
|
+
serie.seasons.size
|
43
|
+
#=> 3
|
44
|
+
|
45
|
+
serie.seaon(1).episodes.size
|
46
|
+
#=> 6
|
47
|
+
|
48
|
+
series.season(1).episode(2).title
|
49
|
+
#=> "Guts"
|
50
|
+
|
30
51
|
Searching:
|
31
52
|
|
32
53
|
i = Imdb::Search.new("Star Trek")
|
data/Rakefile
CHANGED
@@ -3,17 +3,8 @@ Bundler::GemHelper.install_tasks
|
|
3
3
|
|
4
4
|
load File.expand_path(File.dirname(__FILE__) + "/tasks/fixtures.rake")
|
5
5
|
|
6
|
-
require '
|
7
|
-
|
8
|
-
spec.libs << 'lib' << 'spec'
|
9
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
10
|
-
end
|
11
|
-
|
12
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
13
|
-
spec.libs << 'lib' << 'spec'
|
14
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
15
|
-
spec.rcov = true
|
16
|
-
end
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
17
8
|
|
18
9
|
task :default => :spec
|
19
10
|
|
data/imdb.gemspec
CHANGED
@@ -19,11 +19,11 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency 'hpricot', '~> 0.8.
|
22
|
+
s.add_dependency 'hpricot', '~> 0.8.6'
|
23
23
|
|
24
|
-
s.add_development_dependency 'rake', '~> 0.
|
25
|
-
s.add_development_dependency 'rspec', '~>
|
24
|
+
s.add_development_dependency 'rake', '~> 10.0.3'
|
25
|
+
s.add_development_dependency 'rspec', '~> 2.13.0'
|
26
26
|
s.add_development_dependency 'gokdok'
|
27
|
-
s.add_development_dependency 'rdoc', '~>
|
27
|
+
s.add_development_dependency 'rdoc', '~> 4.0'
|
28
28
|
s.add_development_dependency 'fakeweb'
|
29
29
|
end
|
data/lib/imdb.rb
CHANGED
@@ -5,7 +5,11 @@ require 'open-uri'
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'hpricot'
|
7
7
|
|
8
|
+
require 'imdb/base'
|
8
9
|
require 'imdb/movie'
|
10
|
+
require 'imdb/serie'
|
11
|
+
require 'imdb/season'
|
12
|
+
require 'imdb/episode'
|
9
13
|
require 'imdb/movie_list'
|
10
14
|
require 'imdb/search'
|
11
15
|
require 'imdb/top_250'
|
data/lib/imdb/base.rb
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
module Imdb
|
2
|
+
|
3
|
+
# Represents something on IMDB.com
|
4
|
+
class Base
|
5
|
+
attr_accessor :id, :url, :title, :also_known_as
|
6
|
+
|
7
|
+
# Initialize a new IMDB movie object with it's IMDB id (as a String)
|
8
|
+
#
|
9
|
+
# movie = Imdb::Movie.new("0095016")
|
10
|
+
#
|
11
|
+
# Imdb::Movie objects are lazy loading, meaning that no HTTP request
|
12
|
+
# will be performed when a new object is created. Only when you use an
|
13
|
+
# accessor that needs the remote data, a HTTP request is made (once).
|
14
|
+
#
|
15
|
+
def initialize(imdb_id, title = nil)
|
16
|
+
@id = imdb_id
|
17
|
+
@url = "http://akas.imdb.com/title/tt#{imdb_id}/combined"
|
18
|
+
@title = title.gsub(/"/, "").strip if title
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns an array with cast members
|
22
|
+
def cast_members
|
23
|
+
document.search("table.cast td.nm a").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
24
|
+
end
|
25
|
+
|
26
|
+
def cast_member_ids
|
27
|
+
document.search("table.cast td.nm a").map {|l| l['href'].sub(%r{^/name/(.*)/}, '\1') }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns an array with cast characters
|
31
|
+
def cast_characters
|
32
|
+
document.search("table.cast td.char").map { |link| link.innerText } rescue []
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns an array with cast members and characters
|
36
|
+
def cast_members_characters(sep = '=>')
|
37
|
+
memb_char = Array.new
|
38
|
+
i = 0
|
39
|
+
self.cast_members.each{|m|
|
40
|
+
memb_char[i] = "#{self.cast_members[i]} #{sep} #{self.cast_characters[i]}"
|
41
|
+
i=i+1
|
42
|
+
}
|
43
|
+
return memb_char
|
44
|
+
end
|
45
|
+
|
46
|
+
# Returns the name of the director
|
47
|
+
def director
|
48
|
+
document.search("h5[text()^='Director'] ~ a").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns the url to the "Watch a trailer" page
|
52
|
+
def trailer_url
|
53
|
+
'http://imdb.com' + document.at("a[@href*=/video/screenplay/]")["href"] rescue nil
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns an array of genres (as strings)
|
57
|
+
def genres
|
58
|
+
document.search("h5[text()='Genre:'] ~ a[@href*=/Sections/Genres/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns an array of languages as strings.
|
62
|
+
def languages
|
63
|
+
document.search("h5[text()='Language:'] ~ a[@href*=/language/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns an array of countries as strings.
|
67
|
+
def countries
|
68
|
+
document.search("h5[text()='Country:'] ~ a[@href*=/country/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the duration of the movie in minutes as an integer.
|
72
|
+
def length
|
73
|
+
document.search("//h5[text()='Runtime:']/..").innerHTML[/\d+ min/].to_i rescue nil
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns the company
|
77
|
+
def company
|
78
|
+
document.search("h5[text()='Company:'] ~ a[@href*=/company/']").map { |link| link.innerHTML.strip.imdb_unescape_html }.first rescue nil
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns a string containing the plot.
|
82
|
+
def plot
|
83
|
+
sanitize_plot(document.search("h5[text()='Plot:'] ~ div").first.innerHTML) rescue nil
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns a string containing the plot summary
|
87
|
+
def plot_synopsis
|
88
|
+
doc = Hpricot(Imdb::Movie.find_by_id(@id, :synopsis))
|
89
|
+
doc.search("div[@id='swiki.2.1']").innerHTML.strip.imdb_unescape_html.imdb_strip_tags rescue nil
|
90
|
+
end
|
91
|
+
|
92
|
+
def plot_summary
|
93
|
+
doc = Hpricot(Imdb::Movie.find_by_id(@id, :plotsummary))
|
94
|
+
doc.search("p[@class='plotpar']").first.innerHTML.gsub(/<i.*/im, '').strip.imdb_unescape_html rescue nil
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns a string containing the URL to the movie poster.
|
98
|
+
def poster
|
99
|
+
src = document.at("a[@name='poster'] img")['src'] rescue nil
|
100
|
+
case src
|
101
|
+
when /^(http:.+@@)/
|
102
|
+
$1 + '.jpg'
|
103
|
+
when /^(http:.+?)\.[^\/]+$/
|
104
|
+
$1 + '.jpg'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Returns a float containing the average user rating
|
109
|
+
def rating
|
110
|
+
document.at(".starbar-meta b").innerHTML.strip.imdb_unescape_html.split('/').first.to_f rescue nil
|
111
|
+
end
|
112
|
+
|
113
|
+
# Returns an int containing the number of user ratings
|
114
|
+
def votes
|
115
|
+
document.at("#tn15rating .tn15more").innerHTML.strip.imdb_unescape_html.gsub(/[^\d+]/, "").to_i rescue nil
|
116
|
+
end
|
117
|
+
|
118
|
+
# Returns a string containing the tagline
|
119
|
+
def tagline
|
120
|
+
document.search("h5[text()='Tagline:'] ~ div").first.innerHTML.gsub(/<.+>.+<\/.+>/, '').strip.imdb_unescape_html rescue nil
|
121
|
+
end
|
122
|
+
|
123
|
+
# Returns a string containing the mpaa rating and reason for rating
|
124
|
+
def mpaa_rating
|
125
|
+
document.search("h5[text()='MPAA:'] ~ div").first.innerHTML.strip.imdb_unescape_html rescue nil
|
126
|
+
end
|
127
|
+
|
128
|
+
# Returns a string containing the title
|
129
|
+
def title(force_refresh = false)
|
130
|
+
if @title && !force_refresh
|
131
|
+
@title
|
132
|
+
else
|
133
|
+
@title = document.at("h1").innerHTML.split('<span').first.strip.imdb_unescape_html rescue nil
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
# Returns an integer containing the year (CCYY) the movie was released in.
|
138
|
+
def year
|
139
|
+
document.search('a[@href^="/year/"]').innerHTML.to_i
|
140
|
+
end
|
141
|
+
|
142
|
+
# Returns release date for the movie.
|
143
|
+
def release_date
|
144
|
+
sanitize_release_date(document.search('h5[text()*=Release Date]').first.next_sibling.innerHTML.to_s) rescue nil
|
145
|
+
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
# Returns a new Hpricot document for parsing.
|
150
|
+
def document
|
151
|
+
@document ||= Hpricot(Imdb::Movie.find_by_id(@id))
|
152
|
+
end
|
153
|
+
|
154
|
+
# Use HTTParty to fetch the raw HTML for this movie.
|
155
|
+
def self.find_by_id(imdb_id, page = :combined)
|
156
|
+
open("http://akas.imdb.com/title/tt#{imdb_id}/#{page}")
|
157
|
+
end
|
158
|
+
|
159
|
+
# Convenience method for search
|
160
|
+
def self.search(query)
|
161
|
+
Imdb::Search.new(query).movies
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.top_250
|
165
|
+
Imdb::Top250.new.movies
|
166
|
+
end
|
167
|
+
|
168
|
+
def sanitize_plot(the_plot)
|
169
|
+
the_plot = the_plot.imdb_strip_tags
|
170
|
+
|
171
|
+
the_plot = the_plot.gsub(/add\ssummary|full\ssummary/i, "")
|
172
|
+
the_plot = the_plot.gsub(/add\ssynopsis|full\ssynopsis/i, "")
|
173
|
+
the_plot = the_plot.gsub(/ |»/i, "")
|
174
|
+
the_plot = the_plot.gsub(/see|more/i, "")
|
175
|
+
the_plot = the_plot.gsub(/\|/i, "")
|
176
|
+
|
177
|
+
the_plot = the_plot.strip.imdb_unescape_html
|
178
|
+
end
|
179
|
+
|
180
|
+
def sanitize_release_date(the_release_date)
|
181
|
+
the_release_date = the_release_date.gsub(/<a.*a>/,"")
|
182
|
+
the_release_date = the_release_date.gsub(/ |»/i, "")
|
183
|
+
the_release_date = the_release_date.gsub(/see|more/i, "")
|
184
|
+
|
185
|
+
the_release_date = the_release_date.strip.imdb_unescape_html
|
186
|
+
end
|
187
|
+
|
188
|
+
end # Movie
|
189
|
+
|
190
|
+
end # Imdb
|
191
|
+
|
data/lib/imdb/episode.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Imdb
|
2
|
+
class Episode < Base
|
3
|
+
attr_accessor :season, :episode, :episode_title
|
4
|
+
|
5
|
+
def initialize(imdb_id, season, episode, episode_title)
|
6
|
+
super(imdb_id, episode_title)
|
7
|
+
@url = "http://akas.imdb.com/title/tt#{imdb_id}/combined"
|
8
|
+
@season = season
|
9
|
+
@episode = episode
|
10
|
+
end
|
11
|
+
|
12
|
+
# Return the original air date for this episode
|
13
|
+
def air_date
|
14
|
+
document.search('h5[text()*=Original Air Date]').first.next_sibling.innerHTML.to_s.strip.split("\n").first.strip rescue nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def document
|
20
|
+
@document ||= Hpricot(open(@url))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/imdb/movie.rb
CHANGED
@@ -1,175 +1,7 @@
|
|
1
1
|
module Imdb
|
2
2
|
|
3
3
|
# Represents a Movie on IMDB.com
|
4
|
-
class Movie
|
5
|
-
attr_accessor :id, :url, :title, :also_known_as
|
6
|
-
|
7
|
-
# Initialize a new IMDB movie object with it's IMDB id (as a String)
|
8
|
-
#
|
9
|
-
# movie = Imdb::Movie.new("0095016")
|
10
|
-
#
|
11
|
-
# Imdb::Movie objects are lazy loading, meaning that no HTTP request
|
12
|
-
# will be performed when a new object is created. Only when you use an
|
13
|
-
# accessor that needs the remote data, a HTTP request is made (once).
|
14
|
-
#
|
15
|
-
def initialize(imdb_id, title = nil, also_known_as = [])
|
16
|
-
@id = imdb_id
|
17
|
-
@url = "http://akas.imdb.com/title/tt#{imdb_id}/combined"
|
18
|
-
@title = title.gsub(/"/, "") if title
|
19
|
-
@also_known_as = also_known_as
|
20
|
-
end
|
21
|
-
|
22
|
-
# Returns an array with cast members
|
23
|
-
def cast_members
|
24
|
-
document.search("table.cast td.nm a").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
25
|
-
end
|
26
|
-
|
27
|
-
def cast_member_ids
|
28
|
-
document.search("table.cast td.nm a").map {|l| l['href'].sub(%r{^/name/(.*)/}, '\1') }
|
29
|
-
end
|
30
|
-
|
31
|
-
# Returns an array with cast characters
|
32
|
-
def cast_characters
|
33
|
-
document.search("table.cast td.char").map { |link| link.innerText } rescue []
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns an array with cast members and characters
|
37
|
-
def cast_members_characters(sep = '=>')
|
38
|
-
memb_char = Array.new
|
39
|
-
i = 0
|
40
|
-
self.cast_members.each{|m|
|
41
|
-
memb_char[i] = "#{self.cast_members[i]} #{sep} #{self.cast_characters[i]}"
|
42
|
-
i=i+1
|
43
|
-
}
|
44
|
-
return memb_char
|
45
|
-
end
|
46
|
-
|
47
|
-
# Returns the name of the director
|
48
|
-
def director
|
49
|
-
document.search("h5[text()^='Director'] ~ a").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
50
|
-
end
|
51
|
-
|
52
|
-
# Returns the url to the "Watch a trailer" page
|
53
|
-
def trailer_url
|
54
|
-
'http://imdb.com' + document.at("a[@href*=/video/screenplay/]")["href"] rescue nil
|
55
|
-
end
|
56
|
-
|
57
|
-
# Returns an array of genres (as strings)
|
58
|
-
def genres
|
59
|
-
document.search("h5[text()='Genre:'] ~ a[@href*=/Sections/Genres/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
60
|
-
end
|
61
|
-
|
62
|
-
# Returns an array of languages as strings.
|
63
|
-
def languages
|
64
|
-
document.search("h5[text()='Language:'] ~ a[@href*=/language/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
65
|
-
end
|
66
|
-
|
67
|
-
# Returns an array of countries as strings.
|
68
|
-
def countries
|
69
|
-
document.search("h5[text()='Country:'] ~ a[@href*=/country/']").map { |link| link.innerHTML.strip.imdb_unescape_html } rescue []
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns the duration of the movie in minutes as an integer.
|
73
|
-
def length
|
74
|
-
document.search("//h5[text()='Runtime:']/..").innerHTML[/\d+ min/].to_i rescue nil
|
75
|
-
end
|
76
|
-
|
77
|
-
# Returns a string containing the plot.
|
78
|
-
def plot
|
79
|
-
sanitize_plot(document.search("h5[text()='Plot:'] ~ div").first.innerHTML) rescue nil
|
80
|
-
end
|
81
|
-
|
82
|
-
# Returns a string containing the URL to the movie poster.
|
83
|
-
def poster
|
84
|
-
src = document.at("a[@name='poster'] img")['src'] rescue nil
|
85
|
-
case src
|
86
|
-
when /^(http:.+@@)/
|
87
|
-
$1 + '.jpg'
|
88
|
-
when /^(http:.+?)\.[^\/]+$/
|
89
|
-
$1 + '.jpg'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns a float containing the average user rating
|
94
|
-
def rating
|
95
|
-
document.at(".starbar-meta b").innerHTML.strip.imdb_unescape_html.split('/').first.to_f rescue nil
|
96
|
-
end
|
97
|
-
|
98
|
-
# Returns an int containing the number of user ratings
|
99
|
-
def votes
|
100
|
-
document.at("#tn15rating .tn15more").innerHTML.strip.imdb_unescape_html.gsub(/[^\d+]/, "").to_i rescue nil
|
101
|
-
end
|
102
|
-
|
103
|
-
# Returns a string containing the tagline
|
104
|
-
def tagline
|
105
|
-
document.search("h5[text()='Tagline:'] ~ div").first.innerHTML.gsub(/<.+>.+<\/.+>/, '').strip.imdb_unescape_html rescue nil
|
106
|
-
end
|
107
|
-
|
108
|
-
# Returns a string containing the mpaa rating and reason for rating
|
109
|
-
def mpaa_rating
|
110
|
-
document.search("h5[text()='MPAA:'] ~ div").first.innerHTML.strip.imdb_unescape_html rescue nil
|
111
|
-
end
|
112
|
-
|
113
|
-
# Returns a string containing the title
|
114
|
-
def title(force_refresh = false)
|
115
|
-
if @title && !force_refresh
|
116
|
-
@title
|
117
|
-
else
|
118
|
-
@title = document.at("h1").innerHTML.split('<span').first.strip.imdb_unescape_html rescue nil
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
# Returns an integer containing the year (CCYY) the movie was released in.
|
123
|
-
def year
|
124
|
-
document.search('a[@href^="/year/"]').innerHTML.to_i
|
125
|
-
end
|
126
|
-
|
127
|
-
# Returns release date for the movie.
|
128
|
-
def release_date
|
129
|
-
sanitize_release_date(document.search('h5[text()*=Release Date]').first.next_sibling.innerHTML.to_s) rescue nil
|
130
|
-
end
|
131
|
-
|
132
|
-
private
|
133
|
-
|
134
|
-
# Returns a new Hpricot document for parsing.
|
135
|
-
def document
|
136
|
-
@document ||= Hpricot(Imdb::Movie.find_by_id(@id))
|
137
|
-
end
|
138
|
-
|
139
|
-
# Use HTTParty to fetch the raw HTML for this movie.
|
140
|
-
def self.find_by_id(imdb_id)
|
141
|
-
open("http://akas.imdb.com/title/tt#{imdb_id}/combined")
|
142
|
-
end
|
143
|
-
|
144
|
-
# Convenience method for search
|
145
|
-
def self.search(query)
|
146
|
-
Imdb::Search.new(query).movies
|
147
|
-
end
|
148
|
-
|
149
|
-
def self.top_250
|
150
|
-
Imdb::Top250.new.movies
|
151
|
-
end
|
152
|
-
|
153
|
-
def sanitize_plot(the_plot)
|
154
|
-
the_plot = the_plot.imdb_strip_tags
|
155
|
-
|
156
|
-
the_plot = the_plot.gsub(/add\ssummary|full\ssummary/i, "")
|
157
|
-
the_plot = the_plot.gsub(/add\ssynopsis|full\ssynopsis/i, "")
|
158
|
-
the_plot = the_plot.gsub(/ |»/i, "")
|
159
|
-
the_plot = the_plot.gsub(/see|more/i, "")
|
160
|
-
the_plot = the_plot.gsub(/\|/i, "")
|
161
|
-
|
162
|
-
the_plot = the_plot.strip.imdb_unescape_html
|
163
|
-
end
|
164
|
-
|
165
|
-
def sanitize_release_date(the_release_date)
|
166
|
-
the_release_date = the_release_date.gsub(/<a.*a>/,"")
|
167
|
-
the_release_date = the_release_date.gsub(/ |»/i, "")
|
168
|
-
the_release_date = the_release_date.gsub(/see|more/i, "")
|
169
|
-
|
170
|
-
the_release_date = the_release_date.strip.imdb_unescape_html
|
171
|
-
end
|
172
|
-
|
4
|
+
class Movie < Base
|
173
5
|
end # Movie
|
174
6
|
|
175
7
|
end # Imdb
|