omelete 0.0.4 → 0.0.5

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.
@@ -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