omelete 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,89 @@
1
+ # -*- encoding : utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+ $:.unshift File.expand_path('../models', __FILE__)
4
+ require 'rubygems'
5
+ require 'open-uri'
6
+ require 'nokogiri'
7
+ require 'mechanize'
8
+ require 'movie'
9
+ require 'showtime'
10
+
11
+ module Omelete
12
+ class DetailedPage
13
+
14
+ def self.movie_poi(movie,link,page)
15
+ @page = page.link_with(:href => link).click
16
+ movie.movie_theaters = movie_theaters(movie) unless @page.search('//div[@class = "programacao_cinema"]').first.nil?
17
+ movie.showtimes = showtimes(movie) unless @page.search('//div[@class = "programacao_cinema"]').first.nil?
18
+ movie.synopsis = synopsis(movie) unless @page.search("//div[@id = \"tab_#{movie.id}_sinopse\"]/blockquote").first.nil?
19
+ unless @page.search("//div[@id = \"tab_#{movie.id}_ficha\"]/dl/dd").first.nil?
20
+ movie.cast = cast(movie)
21
+ movie.directed_by = directed_by(movie)
22
+ end
23
+ movie
24
+ end
25
+
26
+ def self.movie_theaters(movie)
27
+ movie_theaters = []
28
+ @page.search('//div[@class = "programacao_cinema"]/h2/a').each do |movie_theater|
29
+ movie_theaters << movie_theater.content
30
+ end
31
+ movie_theaters
32
+ end
33
+
34
+ def self.showtimes(movie)
35
+ showtimes = []
36
+ @page.search('//div[@class = "programacao_cinema"]/h2/a').each do |movie_theater|
37
+ showtimes << ShowtimeAndTheater.create_showtime_with(@page,movie_theater.content,movie)
38
+ end
39
+ showtimes
40
+ end
41
+
42
+
43
+ def self.synopsis(movie)
44
+ @page.search("//div[@id = \"tab_#{movie.id}_sinopse\"]/blockquote").first.content
45
+ end
46
+
47
+ def self.cast(movie)
48
+ @page.search("//div[@id = \"tab_#{movie.id}_ficha\"]/dl/dd").first.content.delete("\r\n")
49
+ end
50
+
51
+ def self.directed_by(movie)
52
+ directed_by = ""
53
+ @page.search("//div[@id = \"tab_#{movie.id}_ficha\"]/dl").first.children.each do |child|
54
+ directed_by = child.content if child.node_name == "dd" && child.previous_element && child.previous_element.content == "Direção:"
55
+ end
56
+ directed_by.delete("\r\n")
57
+ end
58
+
59
+ end
60
+
61
+ class ShowtimeAndTheater
62
+ def self.create_showtime_with(page,movie_theater,movie)
63
+ @page = page
64
+ showtime = Showtime.new(nil,nil,nil,movie,nil,movie_theater)
65
+ showtime.time = time
66
+ showtime.theater = theater
67
+ showtime.kind = kind
68
+ showtime.obs = obs
69
+ showtime
70
+ end
71
+
72
+ def self.time
73
+ @page.search('//tr[@class = "even"]/td').last.content
74
+ end
75
+
76
+ def self.kind
77
+ @page.search('//tr[@class = "even"]/td').first.next_element.content
78
+ end
79
+
80
+ def self.theater
81
+ @page.search('//tr[@class = "even"]/td').first.content
82
+ end
83
+
84
+ def self.obs
85
+ @page.search('//td[@colspan = "3"]').first.content if @page.search('//td[@colspan = "3"]').first
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,54 @@
1
+ # -*- encoding : utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+ $:.unshift File.expand_path('../', __FILE__)
4
+ $:.unshift File.expand_path('../models', __FILE__)
5
+ require 'rubygems'
6
+ require 'open-uri'
7
+ require 'nokogiri'
8
+ require 'mechanize'
9
+ require 'movie'
10
+ require 'detailed_page'
11
+
12
+ module Omelete
13
+ class MainPage
14
+ URL = "http://omelete.uol.com.br/filmes-em-cartaz"
15
+
16
+ def initialize(state,city)
17
+ @state=state
18
+ @city=city
19
+ @agent = Mechanize.new {|agent| agent.user_agent_alias = 'Mac Safari'}
20
+ end
21
+
22
+ def movies
23
+ @movies = []
24
+ @agent.get(URL + "?uf=#{@state}&cidade=#{@city}&filme=&filme_id=") do |page|
25
+ page.search('//div[@style = "margin-right: 38%;"]/h2').each do |movie_status|
26
+ movie_status.search('//div[@class = "programacao_filme"]').each do |movie_doc|
27
+ status = movie_status.content.delete("\n").strip
28
+ @movies << create_movie_with(movie_doc,status,page)
29
+ end
30
+ end
31
+ end
32
+ @movies
33
+ end
34
+
35
+ def create_movie_with(movie_doc,status,page)
36
+ name = movie_doc.search('h2').first.search('a').first.content.strip
37
+ info = movie_doc.search('h4').first.content.strip.split('-')
38
+ genre = info[0]
39
+ runtime = info[1]
40
+ age_rating = info[2]
41
+ link = movie_doc.search('p').first.search('a').first.attr('href')
42
+ id = id_from(link)
43
+ image = movie_doc.search('div').first.search('a').first.attr('href').strip unless movie_doc.search('div').first.search('a').first.nil?
44
+
45
+ movie = Movie.new(id,name,status,runtime,nil,genre,nil,age_rating,nil,nil,image)
46
+ complete_movie = DetailedPage.movie_poi(movie,link,page)
47
+ end
48
+
49
+ def id_from(link)
50
+ link.match(/\d+/)[0]
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,21 @@
1
+ module Omelete
2
+ class Movie
3
+
4
+ attr_accessor :id, :name, :status, :runtime, :cast, :genre, :directed_by
5
+ attr_accessor :age_rating, :synopsis, :image, :movie_theaters, :showtimes
6
+
7
+ def initialize(id, name, status, runtime, cast, genre, directed_by, age_rating, synopsis, image, movie_theaters=[], showtimes=[])
8
+ @id = id
9
+ @name = name
10
+ @status = status
11
+ @runtime = runtime
12
+ @cast = cast
13
+ @genre = genre
14
+ @directed_by = directed_by
15
+ @age_rating = age_rating
16
+ @synopsis = synopsis
17
+ @image = image
18
+ @movie_theaters = movie_theaters
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module Omelete
2
+ class Showtime
3
+
4
+ attr_accessor :time, :obs, :movie, :theater, :kind
5
+
6
+ def initialize(time, obs, kind, movie, theater, movie_theater)
7
+ @time = time
8
+ @obs = obs
9
+ @kind = kind
10
+ @movie = movie
11
+ @theater = theater
12
+ @movie_theater = movie_theater
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module Omelete
2
+ VERSION = "0.0.1"
3
+ end
data/lib/omelete.rb ADDED
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+
6
+ module Omelete
7
+
8
+ class Client
9
+
10
+ def initialize(state,city)
11
+ @state=state
12
+ @city=city
13
+ @main_page = MainPage.new(state,city)
14
+ end
15
+
16
+ def movies
17
+ @main_page.movies
18
+ end
19
+
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omelete
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mauricio Voto
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.7'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.7'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: mechanize
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: vcr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: webmock
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.8.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.8.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Ruby web crawler to access omelete informations
111
+ email:
112
+ - mauriciovoto@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - lib/omelete/detailed_page.rb
118
+ - lib/omelete/main_page.rb
119
+ - lib/omelete/models/movie.rb
120
+ - lib/omelete/models/showtime.rb
121
+ - lib/omelete/version.rb
122
+ - lib/omelete.rb
123
+ homepage: ''
124
+ licenses: []
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 1.8.23
144
+ signing_key:
145
+ specification_version: 3
146
+ summary: Ruby web crawler to access omelete informations
147
+ test_files: []