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.
5. 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>' );
});
}});
7. 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.time
SQL
ActiveRecord::Base.connection.execute(sql)
8. Performance Enhancements
● Raw SQL query to retrieve all data
● Rake tasks to delete old showtimes and call
Rotten Tomatoes API
10. 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
11. Zip Code Search
class 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