odeon_uk 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +46 -2
- data/Rakefile +9 -1
- data/lib/odeon_uk.rb +10 -1
- data/lib/odeon_uk/cinema.rb +152 -0
- data/lib/odeon_uk/film.rb +18 -0
- data/lib/odeon_uk/internal/film_with_screenings_parser.rb +51 -0
- data/lib/odeon_uk/screening.rb +34 -0
- data/lib/odeon_uk/version.rb +1 -1
- data/odeon_uk.gemspec +7 -0
- data/test/fixtures/brighton-showtimes/about-time.html +175 -0
- data/test/fixtures/brighton-showtimes/autism-friendly-planes.html +75 -0
- data/test/fixtures/brighton-showtimes/bolshoi-spartacus-live.html +67 -0
- data/test/fixtures/brighton-showtimes/cinemagic-echo-planet.html +67 -0
- data/test/fixtures/brighton-showtimes/globe-on-screen-twelfth-night.html +67 -0
- data/test/fixtures/brighton-showtimes/met-opera-eugene-onegin.html +67 -0
- data/test/fixtures/brighton-showtimes/national-theatre-live-frankenstein.html +78 -0
- data/test/fixtures/brighton-showtimes/nt-live-war-horse.html +67 -0
- data/test/fixtures/brighton-showtimes/royal-opera-house-turandot.html +66 -0
- data/test/fixtures/brighton-showtimes/rsc-richard-ii.html +67 -0
- data/test/fixtures/brighton-showtimes/star-trek-into-darkness-2d.html +83 -0
- data/test/fixtures/brighton-showtimes/ukjff-from-cable-street-to-brick-lane.html +67 -0
- data/test/fixtures/manchester-showtimes/thor-the-dark-world.html +300 -0
- data/test/fixtures/odeon-brighton-showtimes.html +1238 -0
- data/test/fixtures/odeon-brighton.html +2706 -0
- data/test/fixtures/odeon-sitemap.html +1263 -0
- data/test/lib/odeon_uk/cinema_test.rb +185 -0
- data/test/lib/odeon_uk/film_test.rb +13 -0
- data/test/lib/odeon_uk/internal/film_with_screenings_parser_test.rb +167 -0
- data/test/lib/odeon_uk/screening_test.rb +32 -0
- data/test/test_helper.rb +3 -0
- metadata +126 -2
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# OdeonUk
|
2
2
|
|
3
|
-
|
3
|
+
A simple gem to parse the (Odeon UK website)[http://odeon.co.uk] and spit out useful formatted info.
|
4
|
+
|
5
|
+
[![Code Climate](https://codeclimate.com/github/andycroll/odeon_uk.png)](https://codeclimate.com/github/andycroll/odeon_uk)
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,49 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
### Cinema
|
24
|
+
|
25
|
+
``` ruby
|
26
|
+
OdeonUk::Cinema.all
|
27
|
+
#=> [<OdeonUk::Cinema brand="Odeon" name="Odeon Tunbridge Wells" slug="odeon-tunbridge-wells" chain_id="23" url="...">, #=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">, ...]
|
28
|
+
|
29
|
+
OdeonUk::Cinema.find_by_id('71')
|
30
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" address="..." chain_id="71" url="...">
|
31
|
+
|
32
|
+
OdeonUk::Cinema.find_by_id(71)
|
33
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" address="..." chain_id="71" url="...">
|
34
|
+
|
35
|
+
cinema = OdeonUk::Cinema.find_by_slug('odeon-brighton')
|
36
|
+
#=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">
|
37
|
+
|
38
|
+
cinema.brand
|
39
|
+
#=> 'Odeon'
|
40
|
+
|
41
|
+
cinema.chain_id
|
42
|
+
#=> '71'
|
43
|
+
|
44
|
+
cinema.url
|
45
|
+
#=> "http://www.odeon.co.uk/cinemas/brighton/71/"
|
46
|
+
|
47
|
+
cinema.films
|
48
|
+
#=> [<OdeonUk::Film name="Iron Man 3">, <OdeonUk::Film name="Star Trek: Into Darkness">]
|
49
|
+
|
50
|
+
cinema.screenings
|
51
|
+
#=> [<OdeonUk::Screening film="About Time" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">, <OdeonUk::Screening ..>, <OdeonUk::Screening ...>]
|
52
|
+
|
53
|
+
cinema.screenings_of 'Iron Man 3'
|
54
|
+
#=> [<OdeonUk::Screening film="Iron Man 3" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">]
|
55
|
+
|
56
|
+
cinema.screenings_of <OdeonUk::Film name="Iron Man 3">
|
57
|
+
#=> [<OdeonUk::Screening film="Iron Man 3" when="2013-09-09 11:00 UTC" varient="3d">, <OdeonUk::Screening film="Iron Man 3" when="2013-09-09 13:50 UTC" varient="kids">]
|
58
|
+
```
|
59
|
+
|
60
|
+
### Film
|
61
|
+
|
62
|
+
``` ruby
|
63
|
+
OdeonUk::Film.all
|
64
|
+
#=> [<OdeonUk::Film name="Iron Man 3" slug="iron-man-3">, <OdeonUk::Film name="Star Trek Into Darkness" slug="star-trek-into-darkness">, <OdeonUk::Film name="Captain America: The First Avenger" slug="captain-america-the-first-avenger">, <OdeonUk::Film name="Thor: The Dark World" slug="thor-the-dark-world">]
|
65
|
+
```
|
22
66
|
|
23
67
|
## Contributing
|
24
68
|
|
data/Rakefile
CHANGED
@@ -5,8 +5,16 @@ require 'rake/testtask'
|
|
5
5
|
|
6
6
|
Rake::TestTask.new do |t|
|
7
7
|
t.libs << 'lib/odeon_uk'
|
8
|
-
t.test_files = FileList['test/lib/odeon_uk/*_test.rb']
|
8
|
+
t.test_files = FileList['test/lib/odeon_uk/*_test.rb', 'test/lib/odeon_uk/internal/*_test.rb']
|
9
9
|
t.verbose = true
|
10
10
|
end
|
11
11
|
|
12
|
+
task :build do
|
13
|
+
system "gem build odeon_uk.gemspec"
|
14
|
+
end
|
15
|
+
|
16
|
+
task :release => :build do
|
17
|
+
system "gem push odeon_uk-#{OdeonUk::VERSION}"
|
18
|
+
end
|
19
|
+
|
12
20
|
task :default => :test
|
data/lib/odeon_uk.rb
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require 'httparty'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'tzinfo'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
require_relative './odeon_uk/internal/film_with_screenings_parser'
|
7
|
+
require_relative './odeon_uk/version'
|
8
|
+
require_relative './odeon_uk/cinema'
|
9
|
+
require_relative './odeon_uk/film'
|
10
|
+
require_relative './odeon_uk/screening'
|
2
11
|
|
3
12
|
module OdeonUk
|
4
13
|
# Your code goes here...
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a cinema on the Odeon UK website
|
4
|
+
class Cinema
|
5
|
+
|
6
|
+
# Public: Returns the String brand of the cinema #=> 'Odeon'
|
7
|
+
attr_reader :brand
|
8
|
+
# Public: Returns the Integer id of the cinema on teh odeon website
|
9
|
+
attr_reader :id
|
10
|
+
# Public: Returns the String name of the cinema
|
11
|
+
attr_reader :name
|
12
|
+
# Public: Returns the String slug of the cinema
|
13
|
+
attr_reader :slug
|
14
|
+
# Public: Returns the String url of the cinema's page on odeon.co.uk
|
15
|
+
attr_reader :url
|
16
|
+
|
17
|
+
# Public: Initialize a cinema
|
18
|
+
#
|
19
|
+
# id - Integer/String of the cinema on the odeon website
|
20
|
+
# name - String of cinema name
|
21
|
+
# url - String of cinema url on the odeon website
|
22
|
+
def initialize(id, name, url)
|
23
|
+
@brand = 'Odeon'
|
24
|
+
@id = id.to_i
|
25
|
+
@name = name
|
26
|
+
@slug = name.downcase.gsub(/[^0-9a-z ]/,'').gsub(/\s+/, '-')
|
27
|
+
@url = (url[0] == '/') ? "http://www.odeon.co.uk#{url}" : url
|
28
|
+
end
|
29
|
+
|
30
|
+
# Public: Return basic cinema information for all Odeon cinemas
|
31
|
+
#
|
32
|
+
# Examples
|
33
|
+
#
|
34
|
+
# OdeonUk::Cinema.all
|
35
|
+
# # => [<OdeonUk::Cinema brand="Odeon" name="Odeon Tunbridge Wells" slug="odeon-tunbridge-wells" id=23 url="...">, #=> <OdeonUk::Cinema brand="Odeon" name="Odeon Brighton" slug="odeon-brighton" chain_id="71" url="...">, ...]
|
36
|
+
#
|
37
|
+
# Returns an array of hashes of cinema information.
|
38
|
+
def self.all
|
39
|
+
cinema_links.map do |link|
|
40
|
+
new_from_link link
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Public: Return single cinema information for an Odeon cinema
|
45
|
+
#
|
46
|
+
# id_string - a string/int representing the cinema id
|
47
|
+
# of the format '32'/32 as used on the odeon.co.uk website
|
48
|
+
#
|
49
|
+
# Examples
|
50
|
+
#
|
51
|
+
# OdeonUk::Cinema.find('71')
|
52
|
+
# # => <OdeonUk::Cinema brand="Odeon" name="Brighton" slug="brighton" id=71 url="...">
|
53
|
+
#
|
54
|
+
# Returns an Odeon::Cinema or nil if none was found
|
55
|
+
def self.find(id)
|
56
|
+
id = id.to_i
|
57
|
+
return nil unless id > 0
|
58
|
+
|
59
|
+
all.select { |cinema| cinema.id == id }[0]
|
60
|
+
end
|
61
|
+
|
62
|
+
# Public: Returns films for an Odeon cinema
|
63
|
+
#
|
64
|
+
# Examples
|
65
|
+
#
|
66
|
+
# cinema = OdeonUk::Cinema.find('71')
|
67
|
+
# cinema.films
|
68
|
+
# # => [<OdeonUk::Film name="Iron Man 3">, <OdeonUk::Film name="Star Trek Into Darkness">]
|
69
|
+
#
|
70
|
+
# Returns an array of Odeon::Film objects
|
71
|
+
def films
|
72
|
+
film_nodes.map do |node|
|
73
|
+
parser = OdeonUk::Internal::FilmWithScreeningsParser.new node.to_s
|
74
|
+
OdeonUk::Film.new parser.film_name
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Public: Returns screenings for an Odeon cinema
|
79
|
+
#
|
80
|
+
# Examples
|
81
|
+
#
|
82
|
+
# cinema = OdeonUk::Cinema.find('71')
|
83
|
+
# cinema.screenings
|
84
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
85
|
+
#
|
86
|
+
# Returns an array of Odeon::Screening objects
|
87
|
+
def screenings
|
88
|
+
film_nodes.map do |node|
|
89
|
+
parser = OdeonUk::Internal::FilmWithScreeningsParser.new node.to_s
|
90
|
+
parser.showings.map do |screening_type, times|
|
91
|
+
times.map do |time|
|
92
|
+
OdeonUk::Screening.new parser.film_name, self.name, time.strftime('%d/%m/%Y'), time.strftime('%H:%M:%S'), nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end.flatten
|
96
|
+
end
|
97
|
+
|
98
|
+
# Public: Returns screenings for particular film at an Odeon cinema
|
99
|
+
#
|
100
|
+
# Examples
|
101
|
+
#
|
102
|
+
# cinema = OdeonUk::Cinema.find('71')
|
103
|
+
# cinema.screenings_of 'Iron Man 3'
|
104
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
105
|
+
# cinema.screenings_of <OdeonUk::Film name="Iron Man 3">
|
106
|
+
# # => [<OdeonUk::Screening film_name="Iron Man 3" cinema_name="Brighton" when="..." varient="...">, <OdeonUk::Screening ...>]
|
107
|
+
#
|
108
|
+
# Returns an array of Odeon::Screening objects
|
109
|
+
def screenings_of film
|
110
|
+
film_name = (film.is_a?(OdeonUk::Film) ? film.name : film)
|
111
|
+
screenings.select { |s| s.film_name == film_name }
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def self.cinema_links
|
117
|
+
links = parsed_sitemap.css('.sitemap > .span12:nth-child(4) a[href*=cinemas]')
|
118
|
+
links.select { |link| link.get_attribute('href').match(/\/\d+\/$/) }
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.new_from_link(link)
|
122
|
+
url = link.get_attribute('href')
|
123
|
+
id = url.match(/\/(\d+)\/$/)[1]
|
124
|
+
name = link.children.first.to_s
|
125
|
+
new id, name, url
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.parsed_sitemap
|
129
|
+
Nokogiri::HTML(sitemap_response)
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.sitemap_response
|
133
|
+
@sitemap_response ||= HTTParty.get('http://www.odeon.co.uk/sitemap/')
|
134
|
+
end
|
135
|
+
|
136
|
+
def cinema_response
|
137
|
+
@cinema_response ||= HTTParty.get(@url)
|
138
|
+
end
|
139
|
+
|
140
|
+
def film_nodes
|
141
|
+
parsed_showtimes.css('.film-detail')
|
142
|
+
end
|
143
|
+
|
144
|
+
def parsed_showtimes
|
145
|
+
Nokogiri::HTML(showtimes_response)
|
146
|
+
end
|
147
|
+
|
148
|
+
def showtimes_response
|
149
|
+
@showtimes_response ||= HTTParty.get("http://www.odeon.co.uk/showtimes/week/#{@id}?siteId=#{@id}")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a film on the Odeon UK website
|
4
|
+
class Film
|
5
|
+
|
6
|
+
# Public: Returns the String name of the film
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
# Public: Initialize a screening
|
10
|
+
#
|
11
|
+
# name - String of the film name
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
module Internal
|
3
|
+
# Private: An object to parse a film HTML snippet
|
4
|
+
class FilmWithScreeningsParser
|
5
|
+
|
6
|
+
def initialize(film_html)
|
7
|
+
@nokogiri_html = Nokogiri::HTML(film_html)
|
8
|
+
end
|
9
|
+
|
10
|
+
def film_name
|
11
|
+
name = @nokogiri_html.css('.presentation-info h4 a').children.first.to_s
|
12
|
+
|
13
|
+
# screening types
|
14
|
+
name = name.gsub /\s+[23][dD]/, '' #remove 2d or 3d from title
|
15
|
+
name = name.gsub 'Autism Friendly Screening -', '' # remove autism friendly
|
16
|
+
|
17
|
+
# special screenings
|
18
|
+
name = name.gsub 'ROH -', 'Royal Opera House:' # fill out Royal Opera House
|
19
|
+
name = name.gsub 'Met Opera -', 'Met Opera:' # fill out Met Opera
|
20
|
+
name = name.gsub /Cinemagic \d{1,4} \-/, '' # remove cinemagic stuff
|
21
|
+
name = name.gsub 'UKJFF -', '' # remove UK Jewish festival prefix
|
22
|
+
name = name.gsub 'NT Live -', 'National Theatre:' # National theatre
|
23
|
+
name = name.gsub 'National Theatre Live -', 'National Theatre:'
|
24
|
+
name = name.gsub /\(Encore.+\)/, '' # National theatre, remove encore
|
25
|
+
name = name.gsub 'Bolshoi -', 'Bolshoi:' # bolshoi ballet
|
26
|
+
name = name.gsub /\([Ll]ive\)/, '' # remove bolshoi-style live
|
27
|
+
name = name.gsub 'Globe On Screen:', 'Globe:' # globe
|
28
|
+
if name.match /RSC Live/
|
29
|
+
name = 'Royal Shakespeare Company: ' + name.gsub(/\- RSC Live \d{1,4}/, '')
|
30
|
+
end
|
31
|
+
|
32
|
+
name = name.squeeze(' ') # spaces compressed
|
33
|
+
name = name.gsub /\A\s+/, '' # remove leading spaces
|
34
|
+
name = name.gsub /\s+\z/, '' # remove trailing spaces
|
35
|
+
end
|
36
|
+
|
37
|
+
def showings
|
38
|
+
tz = TZInfo::Timezone.get('Europe/London')
|
39
|
+
@nokogiri_html.css('.times-all.accordion-group').inject({}) do |result, varient_node|
|
40
|
+
varient = varient_node.css('.tech a').text.gsub('in ', '').upcase
|
41
|
+
|
42
|
+
times = varient_node.css('.performance-detail').map do |screening_node|
|
43
|
+
tz.local_to_utc(Time.parse(screening_node['title'].match(/\d+\/\d+\/\d+ \d{2}\:\d{2}/).to_s))
|
44
|
+
end
|
45
|
+
|
46
|
+
result.merge(varient => times)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module OdeonUk
|
2
|
+
|
3
|
+
# Public: The object representing a screening of a film on the Odeon UK website
|
4
|
+
class Screening
|
5
|
+
|
6
|
+
# Public: Returns the String name of the cinema
|
7
|
+
attr_reader :cinema_name
|
8
|
+
# Public: Returns the String name of the film
|
9
|
+
attr_reader :film_name
|
10
|
+
# Public: Returns the Time of the screening
|
11
|
+
attr_reader :when
|
12
|
+
# Public: Returns the Type of screening (3d, baby, kids, live)
|
13
|
+
attr_reader :varient
|
14
|
+
|
15
|
+
# Public: Initialize a screening
|
16
|
+
#
|
17
|
+
# film_name - String of the film name
|
18
|
+
# cinema_name - String of the cinema name on the Odeon website
|
19
|
+
# date - String/Date representing the date of the screening
|
20
|
+
# time - String representing the time of the screening (24 hour clock)
|
21
|
+
# varient - String representing the type of showing (e.g. 3d/baby/live)
|
22
|
+
def initialize(film_name, cinema_name, date, time, varient=nil)
|
23
|
+
@cinema_name, @film_name, @varient = cinema_name, film_name, varient
|
24
|
+
@when = Time.parse("#{date} #{time} UTC")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: The Date of the screening
|
28
|
+
#
|
29
|
+
# Returns a Date
|
30
|
+
def date
|
31
|
+
@when.to_date
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/odeon_uk/version.rb
CHANGED
data/odeon_uk.gemspec
CHANGED
@@ -18,5 +18,12 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.version = OdeonUk::VERSION
|
21
|
+
|
21
22
|
gem.add_development_dependency 'rake'
|
23
|
+
gem.add_development_dependency 'webmock'
|
24
|
+
|
25
|
+
gem.add_runtime_dependency 'httparty'
|
26
|
+
gem.add_runtime_dependency 'nokogiri'
|
27
|
+
gem.add_runtime_dependency 'tzinfo'
|
28
|
+
gem.add_runtime_dependency 'tzinfo-data'
|
22
29
|
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
<div id="22876" class="film-detail WEEK">
|
2
|
+
<div class="content-container film _WEEK" id="film-22876">
|
3
|
+
<div class="grad-hor">
|
4
|
+
<a href="/films/about_time/14426/">
|
5
|
+
<img src="http://odeon-fastly.krankikom.de.global.prod.fastly.net/_uploads/asset_management/70x108_fedb25894d81108e06f9dd8903ea1d51.jpg"></a>
|
6
|
+
<div class="presentation-info">
|
7
|
+
<h4>
|
8
|
+
<a href="/films/about_time/14426/">About Time</a>
|
9
|
+
</h4>
|
10
|
+
<div class="cert-icon-uk-12A-small"></div>
|
11
|
+
<span class="description"></span>
|
12
|
+
</div>
|
13
|
+
<p> <strong>Charming time-travelling rom-com with Rachel McAdams</strong>
|
14
|
+
</p>
|
15
|
+
<div class="presentation-info">
|
16
|
+
<div rating-master-id="14426" class="star-rating-container star-rating rating-icon-star-light-small-inactive">
|
17
|
+
<div class="rating-icon-star-small-active s7">
|
18
|
+
<div class="rate-over s1"></div>
|
19
|
+
<div class="rate-over s2"></div>
|
20
|
+
<div class="rate-over s3"></div>
|
21
|
+
<div class="rate-over s4"></div>
|
22
|
+
<div class="rate-over s5"></div>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<span class="description"> <strong>Film length: 123 mins</strong>
|
26
|
+
</span>
|
27
|
+
</div>
|
28
|
+
<p class="description">
|
29
|
+
Contains infrequent strong language and moderate sex references
|
30
|
+
</p>
|
31
|
+
</div>
|
32
|
+
<div class="info-corner">
|
33
|
+
<div class="img-bundle">
|
34
|
+
<div class="film-icon-WEEK feature-icon-light-2d-medium WEEK_2D" data-schedule="2D" data-film="22876"></div>
|
35
|
+
</div>
|
36
|
+
<div class="btn-group">
|
37
|
+
<a href="http://odeon.trailer.cineweb.de/about_time.mp4" class="btn btn-primary trailer kkvideo-trigger" data-film-id="14426" data-showbooknowbutton="false"> <i class="film-icon-btn-play"></i>
|
38
|
+
Trailer
|
39
|
+
</a>
|
40
|
+
<button class="btn btn-primary trailer dropdown-toggle" data-toggle="dropdown">
|
41
|
+
<span class="caret"></span>
|
42
|
+
</button>
|
43
|
+
<ul class="dropdown-menu">
|
44
|
+
<li>
|
45
|
+
<a href="#">Add to Playlist</a>
|
46
|
+
</li>
|
47
|
+
</ul>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<div id="performances-WEEK-22876" class="content-container times-all _WEEK">
|
52
|
+
<div class="accordion-group times-all performances-WEEK _22876" id="tech-22876-0">
|
53
|
+
<div class="content-container tech accordion-heading _WEEK">
|
54
|
+
<a data-toggle="collapse" data-parent="#tech-22876-0-WEEK" class="accordion-toggle" href="#collapse-22876-0-WEEK">in 2D</a>
|
55
|
+
<a href="#" class="icon-info-blue info-icon-form-info-small" data-toggle="popover" title="" data-placement="bottom" data-content="2D means two dimensional. No 3D glasses required. Sit back, relax and enjoy."></a>
|
56
|
+
</div>
|
57
|
+
<div id="collapse-22876-0-WEEK" class="accordion-body in collapse" style="height: auto;">
|
58
|
+
<div class="accordion-inner">
|
59
|
+
<div class="content-container times containerWEEK">
|
60
|
+
<div class="presentation-info week">
|
61
|
+
<strong>Saturday</strong>
|
62
|
+
<br>14 Sep</div>
|
63
|
+
<ul class="unstyled inline">
|
64
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
65
|
+
<a href="/booking/init/MUZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 12:20" data-popup="popup" data-duration="123" data-start="12:20" data-end="14:23" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">12:20</a>
|
66
|
+
</li>
|
67
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
68
|
+
<a href="/booking/init/RkRFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
69
|
+
</li>
|
70
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
71
|
+
<a href="/booking/init/NUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
72
|
+
</li>
|
73
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
74
|
+
<a href="/booking/init/QkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 14/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
75
|
+
</li>
|
76
|
+
</ul>
|
77
|
+
</div>
|
78
|
+
<div class="content-container times containerWEEK">
|
79
|
+
<div class="presentation-info week">
|
80
|
+
<strong>Sunday</strong>
|
81
|
+
<br>15 Sep</div>
|
82
|
+
<ul class="unstyled inline">
|
83
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
84
|
+
<a href="/booking/init/M0ZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 12:20" data-popup="popup" data-duration="123" data-start="12:20" data-end="14:23" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">12:20</a>
|
85
|
+
</li>
|
86
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
87
|
+
<a href="/booking/init/MEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
88
|
+
</li>
|
89
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
90
|
+
<a href="/booking/init/NkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
91
|
+
</li>
|
92
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
93
|
+
<a href="/booking/init/Q0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 15/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
94
|
+
</li>
|
95
|
+
</ul>
|
96
|
+
</div>
|
97
|
+
<div class="content-container times containerWEEK">
|
98
|
+
<div class="presentation-info week">
|
99
|
+
<strong>Monday</strong>
|
100
|
+
<br>16 Sep</div>
|
101
|
+
<ul class="unstyled inline">
|
102
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
103
|
+
<a href="/booking/init/MUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 16/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
104
|
+
</li>
|
105
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
106
|
+
<a href="/booking/init/N0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 16/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
107
|
+
</li>
|
108
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
109
|
+
<a href="/booking/init/REVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 16/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
110
|
+
</li>
|
111
|
+
</ul>
|
112
|
+
</div>
|
113
|
+
<div class="content-container times containerWEEK">
|
114
|
+
<div class="presentation-info week">
|
115
|
+
<strong>Tuesday</strong>
|
116
|
+
<br>17 Sep</div>
|
117
|
+
<ul class="unstyled inline">
|
118
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
119
|
+
<a href="/booking/init/MkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
120
|
+
</li>
|
121
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
122
|
+
<a href="/booking/init/OEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
123
|
+
</li>
|
124
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSAVER WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
125
|
+
<a href="/booking/init/RUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Saver - book About Time on 17/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
126
|
+
</li>
|
127
|
+
</ul>
|
128
|
+
</div>
|
129
|
+
<div class="content-container times containerWEEK">
|
130
|
+
<div class="presentation-info week">
|
131
|
+
<strong>Wednesday</strong>
|
132
|
+
<br>18 Sep</div>
|
133
|
+
<ul class="unstyled inline">
|
134
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
135
|
+
<a href="/booking/init/M0VFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 18/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
136
|
+
</li>
|
137
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
138
|
+
<a href="/booking/init/OUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 18/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
139
|
+
</li>
|
140
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
141
|
+
<a href="/booking/init/RkVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 18/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
142
|
+
</li>
|
143
|
+
</ul>
|
144
|
+
</div>
|
145
|
+
<div class="content-container times containerWEEK">
|
146
|
+
<div class="content-container brown">
|
147
|
+
<h6>Newbies</h6>
|
148
|
+
</div>
|
149
|
+
<div class="presentation-info week">
|
150
|
+
<strong>Thursday</strong>
|
151
|
+
<br>19 Sep</div>
|
152
|
+
<ul class="unstyled inline">
|
153
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_MORNING WEEK_NEWBIES WEEK_2D WEEK_GENRE_7 show">
|
154
|
+
<a href="/booking/init/NUZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 19/09/2013 10:45" data-popup="popup" data-duration="123" data-start="10:45" data-end="12:48" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 4 (Wheelchair Accessible)" data-is-online="1">10:45</a>
|
155
|
+
</li>
|
156
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-lightblue WEEK_ISSUPERSAVER WEEK_12A WEEK_AFTERNOON WEEK_2D WEEK_GENRE_7 show">
|
157
|
+
<a href="/booking/init/NEVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Super Saver - book About Time on 19/09/2013 15:10" data-popup="popup" data-duration="123" data-start="15:10" data-end="17:13" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">15:10</a>
|
158
|
+
</li>
|
159
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
160
|
+
<a href="/booking/init/QUVFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 19/09/2013 17:50" data-popup="popup" data-duration="123" data-start="17:50" data-end="19:53" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">17:50</a>
|
161
|
+
</li>
|
162
|
+
<li class="WEEK performance-darkgreen WEEK_WHEELCHAIR performance-blue WEEK_ISPEAK WEEK_12A WEEK_EVENING WEEK_2D WEEK_GENRE_7 show">
|
163
|
+
<a href="/booking/init/MEZFRjAwMDAwMjNVRFBETVhHIzcxIzE0NDI2/" class="performance-detail" title="Peak - book About Time on 19/09/2013 20:30" data-popup="popup" data-duration="123" data-start="20:30" data-end="22:33" data-status="normal" data-type="WEEK" data-auditorium-info="Screen 8 (Wheelchair Accessible)" data-is-online="1">20:30</a>
|
164
|
+
</li>
|
165
|
+
</ul>
|
166
|
+
</div>
|
167
|
+
<div class="content-container times stopper performances-WEEK _22876"></div>
|
168
|
+
</div>
|
169
|
+
</div>
|
170
|
+
</div>
|
171
|
+
<!-- <div class="content-container times stopper performances-WEEK _22876"></div>
|
172
|
+
-->
|
173
|
+
<div class="content-container white performances-WEEK _22876"></div>
|
174
|
+
</div>
|
175
|
+
</div>
|