pick-a-plex app: the pinnacle of cinema experiences
DESCRIPTION
Web Development Students Randall Reed, Jr. and Chris Callahan presented their app, Pick-a-Plex, an app that uses SQL to help users pick a movie to go see.TRANSCRIPT
Pick-a-PlexThe Pinnacle Cinema
ExperienceChris Callahan & Randall Reed, Jr.
Flatiron School PresentsAugust 19th, 2014
The Problem● Too many
theaters!● Too many
showtimes!● Too much time to
choose!
APIs“JSON is the lingua franca of the Internet”
Integrating the YouTube API$( '.movie-title' ).on( 'click', function() {
var title = $( this ).text().split( ' ' ).join( '+' );
var that = $( this );
if ( !$( this ).has( 'a' ).length ) {
$.get( 'https://www.googleapis.com/youtube/v3/search?part=snippet' +
'&order=rating&q=' + title + '+Official+Trailer&type=video' +
'&videoDefinition=high&videoEmbeddable=true' +
'&key=<%= ENV["YOUTUBE_API_KEY"] %>', function( data ) {
var slug = data.items[0].id.videoId;
that.append( '<br><a class="iframe" target="_blank"' +
'href="//www.youtube.com/embed/' + slug +
'">Want to see the trailer?</a>' );
});
}});
Performance Enhancements
● Raw SQL query to retrieve all data
sql = <<-SQL SELECT theaters.name, theaters.id, theaters.rating, movies.title, movies.tomatometer,
movies.description, showtimes.time, showtimes.fandango_url, showtimes.three_d FROM theaters JOIN ( SELECT showtimes.theater_id, movies.tomatometer FROM showtimes JOIN movies ON movies.id = showtimes.movie_id WHERE showtimes.theater_id = "#{self.id}" AND showtimes.time > "#{current_time}" GROUP BY showtimes.theater_id, movies.tomatometer ORDER BY movies.tomatometer DESC LIMIT 1 OFFSET 2 ) third_tomatometer ON theaters.id = third_tomatometer.theater_id JOIN showtimes ON showtimes.theater_id = theaters.id JOIN movies ON movies.tomatometer >= third_tomatometer.tomatometer AND movies.id = showtimes.movie_id WHERE showtimes.time > "#{current_time}" ORDER BY movies.tomatometer DESC, movies.title, showtimes.timeSQL ActiveRecord::Base.connection.execute(sql)
Performance Enhancements
● Raw SQL query to retrieve all data
● Rake tasks to delete old showtimes and call Rotten Tomatoes API
Performance Enhancements
● Raw SQL query to retrieve all data
● Rake tasks to delete old showtimes and call Rotten Tomatoes API
● Check zip code before loading showtimes
Zip Code Searchclass RequestsController < ApplicationController
def create
# ...
matching_requests = Request.where("zip_code = ? AND created_at > ?",
@request.zip_code, today)
if matching_requests.empty?
@request.save
@request.make_theaters
else
@request = matching_requests.first
end
# ...
end
end
DEMO
Going Forward
● More robust theater rating data
● API caching
● Additional movie info
Thank You@randallocalypse @_c_cal