Class: ComingSoon::Movie

Inherits:
Object
  • Object
show all
Defined in:
lib/coming_soon/movie.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/coming_soon/movie.rb', line 3

def name
  @name
end

#start_dateObject

Returns the value of attribute start_date.



3
4
5
# File 'lib/coming_soon/movie.rb', line 3

def start_date
  @start_date
end

#synopsisObject

Returns the value of attribute synopsis.



3
4
5
# File 'lib/coming_soon/movie.rb', line 3

def synopsis
  @synopsis
end

#urlObject

Returns the value of attribute url.



3
4
5
# File 'lib/coming_soon/movie.rb', line 3

def url
  @url
end

Class Method Details

.moviesObject



5
6
7
8
9
10
11
# File 'lib/coming_soon/movie.rb', line 5

def self.movies

	self.scrape_movies

	@movies

end

.scrape_moviesObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/coming_soon/movie.rb', line 13

def self.scrape_movies

	doc = Nokogiri::HTML(open("http://www.fandango.com/moviescomingsoon"))
	# name: doc.css("li.visual-item a.visual-title").text.strip
	# start_date: doc.css("li.visual-item span").text
	# url: doc.css("li.visual-item a").attribute("href").value

	movie_list = doc.css("li.visual-item")
	@movies = []
	count = 1

	movie_list.each do |movie| 
		@soon = self.new
		@soon.name = movie.css("a.visual-title").text.strip
		@soon.start_date = movie.css("span").text
		@soon.url = movie.css("a").attribute("href").value

		self.scrape_synopsis

		@movies << @soon

		count+=1
		if count > 20 # Displays only 20 movies
			break
		end
	end
	
end

.scrape_synopsisObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/coming_soon/movie.rb', line 42

def self.scrape_synopsis

	redirect_failed = false

	begin
		@doc_synop1 = Nokogiri::HTML(open(@soon.url)) # Uses the HTTP 'movieoverview' url
	rescue
		redirect_failed = true # An HTTP to HTTPS redirect failed
	end
	
	if !@doc_synop1.css("a.movie-synopsis-link").any? && !redirect_failed &&
		@doc_synop1.css("span#SynopsisTextLabel").any?
		# If not a redirect failure and a READ FULL SYNOPSIS link is not
		# present and any text is available, use the text for the synopsis
		@soon.synopsis = @doc_synop1.css("span#SynopsisTextLabel").text
	else
		# Scrape the synopsis using the HTTP 'plotsummary' url
		# This is also executed after an HTTP to HTTPS redirect failed
		synop_url = @soon.url.sub(/movieoverview/, 'plotsummary')
		doc_synop2 = Nokogiri::HTML(open(synop_url))
		@soon.synopsis = doc_synop2.css("p.subpage-descriptive-content").text
	end

end