media.py
# -*- coding:utf-8 -*- class Movie(): """movie实体类""" def __init__(self, movie_name, movie_image_url, movie_play_url): """ movie_name:电影名称 movie_poster_url:电影海报链接 movie_play_url:电影播放youtube地址 """ self.movie_name = movie_name self.movie_image_url = movie_image_url self.movie_play_url = movie_play_url def __str__(self): return '电影名:%s \n电影海报:%s \n播放地址: %s' % (self.movie_name, self.movie_image_url, self.movie_play_url)
fresh_tomatoes.py
# -*- coding:utf-8 -*- import webbrowser import os import re # page head contains js && styles html_page_head = """ <head> <meta charset="utf-8"> <title>Fresh Tomatoes!</title> <!-- Bootstrap 3 --> <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css"> <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap-theme.min.css"> <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script> <style type="text/css" media="screen"> body { padding-top: 80px; } #trailer .modal-dialog { margin-top: 200px; width: 640px; height: 480px; } .hanging-close { position: absolute; top: -12px; right: -12px; z-index: 9001; } #trailer-video { width: 100%; height: 100%; } .movie-title { margin-bottom: 20px; padding-top: 20px; } .movie-title:hover { background-color: #EEE; cursor: pointer; } .scale-media { padding-bottom: 56.25%; position: relative; } .scale-media iframe { border: none; height: 100%; position: absolute; width: 100%; left: 0; top: 0; background-color: white; } </style> <script type="text/javascript" charset="utf-8"> $(document).on('click', '.hanging-close, .modal-backdrop, .modal', function (event) { $("#trailer-video-container").empty(); }); $(document).on('click', '.movie-title', function (event) { var trailerSrc = $(this).attr('data_youtube_src') var sourceUrl = trailerSrc + '?autoplay=1&html5=1'; $("#trailer-video-container").empty().append($("<iframe></iframe>", { 'id': 'trailer-video', 'type': 'text-html', 'src': sourceUrl, 'frameborder': 0 })); }); $(document).ready(function () { $('.movie-title').hide().first().show("fast", function showNext() { $(this).next("div").show("fast", showNext); }); }); </script> </head> """ # html page html_page_content = """ <!DOCTYPE html> <html lang="en"> <body> <div class="modal" id="trailer"> <div class="modal-dialog"> <div class="modal-content"> <a href="#" class="hanging-close" data-dismiss="modal" aria-hidden="true"> <img src="https://lh5.ggpht.com/v4-628SilF0HtHuHdu5EzxD7WRqOrrTIDi_MhEG6_qkNtUK5Wg7KPkofp_VJoF7RS2LhxwEFCO1ICHZlc-o_=s0#w=24&h=24"/> </a> <div class="scale-media" id="trailer-video-container"> </div> </div> </div> </div> <div class="container"> <div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Fresh Tomatoes Movie Trailers</a> </div> </div> </div> </div> <div class="container"> {movie_container} </div> </body> </html> """ # single movie page template html_single_movie_content = """ <div class="col-md-6 col-lg-4 movie-title text-center" data_youtube_src="{youtube_src}" data-toggle="modal" data-target="#trailer" > <img src="{movie_image_url}" width="336" height="188"> <h2>{movie_name}</h2> </div> """ def get_youtube_id(movie): play_url = movie.movie_play_url # match movie id from youtube url id_match = re.search(r'(?<=v=)[^&#]+', play_url) id_match = id_match or re.search(r'(?<=be/)[^&#]+', play_url) youtube_id = id_match.group(0) if id_match else None return youtube_id def generate_movie_content(movies): content = '' for movie in movies: youtube_url = 'http://youtube.com/embed/' + get_youtube_id(movie) content += html_single_movie_content.format(movie_name=movie.movie_name, movie_image_url=movie.movie_image_url, youtube_src=youtube_url) return content def open_movies_page(movies): # create html page output_file = open('fresh_tomatoes.html', 'w') rendered_content = html_page_content.format(movie_container=generate_movie_content(movies)) output_file.write(html_page_head + rendered_content) output_file.close() url = os.path.abspath(output_file.name) webbrowser.open('file://' + url, new=2)
# -*- coding:utf-8 -*- import media import fresh_tomatoes # 初始化model数据 movieOne = media.Movie("Star Wars Battlefront II", "https://i.ytimg.com/vi/WypeQtYC3Ms/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIZCGAE=&rs=AOn4CLDO0EXdWiHVheduqbfizpQaN6nEmw", "https://youtu.be/WypeQtYC3Ms") movieTwo = media.Movie("Logan", "https://i.ytimg.com/vi/p0Xlr3La_6I/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIZCGAE=&rs=AOn4CLDtokXAqjWUDZmA3jClTR2eRY07gw", "https://youtu.be/zW-wrIlpv7E") movieThree = media.Movie("injustice god among us", "https://i.ytimg.com/vi/KTJ9MOumqxk/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIZCGAE=&rs=AOn4CLAOb8zzQPtUHirCwYgPYuoSu2vR1A", "https://youtu.be/KTJ9MOumqxk") # print(movieOne) # print(movieTwo) # print(movieThree) # 将model数据加进数组 movies = [movieOne, movieTwo, movieThree] # 执行页面生成函数 fresh_tomatoes.open_movies_page(movies)