omelete 0.0.4 → 0.0.5

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