diff --git a/movie_list/index.py b/movie_list/index.py index 88d46c1..040d8d9 100755 --- a/movie_list/index.py +++ b/movie_list/index.py @@ -1,105 +1,145 @@ #!/usr/bin/env python -from imdb import IMDb -import os, re, threading, time, sys, subprocess -from time import gmtime, strftime - -path = os.path.dirname(sys.argv[0]) -ia = IMDb() - -movie_list = [] -status_list = [] -threads = [] -query = [] -html = """ - - My Movie List - - - - - - -
-
-
- - - - - - """ - -# Open the movie list & split the columns -file_ = open(path + '/movie_list', 'r') -tmp_names = tmp_status = file_.read() -file_.close() -tmp_names = re.sub(r'\).*', ')', tmp_names) -tmp_status = re.sub(r'\]|.*\[', '', tmp_status) - -movie_list = tmp_names.splitlines() -status_list = tmp_status.splitlines() - -# Scan IMDb for a given movie and append it to the html -# This collects rating, genres, official name and a hyperlink -def worker(arg, index): - save_stdout = sys.stdout - sys.stdout = open('trash', 'w') - query = ia.search_movie(arg) - sys.stdout = save_stdout - movie = query[0] - ia.update(movie) - movie['ID'] = query[0].movieID - if 'genres' not in movie.keys(): - movie['genres'] = 'N/A' - if 'rating' not in movie.keys(): - movie['rating'] = 'N/A' - global html - html = (html + - '\n\t') - -# Progress bar. Enough said -import progressbar -bar = progressbar.ProgressBar(max_value=len(movie_list)) - -for idx, val in enumerate(movie_list): - t = threading.Thread(target=worker, args=(val, idx,)) - threads.append(t) - t.start() - bar.update(idx+1) - time.sleep(0.2) - if len(threads)%16 == 0: - time.sleep(6) - -for x in threads: - x.join() - -# Just a fancy scrollbar for the html -scroll = """ - """ -html += ('\n\t\n
Index Title Year IMDb Rating Genre Status
' + str(index+1) + '' + - '' + - str(movie['title']) + - '' + - str(movie['year']) + - '' + - str(movie['rating']) + - '' + - re.sub(r'\[|\]|\'', '', str(movie['genres'])) + - '' + - str(status_list[index]) + - '
\n' + - '\nGenerated on: ' + strftime('%Y-%m-%d %H:%M:%S', gmtime()) + - ' by ' + sys.argv[0] + scroll + '\n') -file_ = open(path + '/index.html', 'wb') -file_.write(html.encode('utf8')) -file_.close() +1. Import a movie_list txt file +2. Query IMDb for each entry, retrieving actual movie name, rating and genres +3. Generate an HTML table from the IMDb data +4. Store the HTML in index.html +""" +import os +import re +import time +import sys +import http.client +import threading +from pathlib import Path +import progressbar +from imdb import IMDb + + +class MovieList: + """ Class to generate a movie list HTML table """ + def __init__(self, src=None): + self.html = """ + + My Movie List + + + + + + +
+
+
+ + + + + + + + """ + self.src = src + self.movie_list = [] + self.status_list = [] + self.threads = [] + + def _worker(self, arg, index): + # Scan IMDb for a given movie and append it to the html + # This collects rating, genres, official name and a hyperlink + imdb = IMDb() + save_stdout = sys.stdout + sys.stdout = open('trash', 'w') + while True: + try: + query = imdb.search_movie(arg) + break + except http.client.IncompleteRead: + pass + sys.stdout = save_stdout + + movie = query[0] + imdb.update(movie) + movie['ID'] = query[0].movieID + if 'genres' not in movie.keys(): + movie['genres'] = 'N/A' + if 'rating' not in movie.keys(): + movie['rating'] = 'N/A' + + url = f'http://www.imdb.com/title/tt{movie["ID"]}' + title = str(movie['title']) + year = str(movie['year']) + rating = str(movie['rating']) + genres = ', '.join(movie['genres']) + status = str(self.status_list[index]) + self.html += ( + f'\n\t' + f'' + f'' + f'' + f'' + ) + + def gen(self): + """ Generate an HTML list based on input, using a threaded worker """ + if not self.src: + self.src = Path(os.path.dirname(sys.argv[0])) / 'movie_list' + else: + self.src = Path(self.src) + + # Open the movie list & split the columns + with open(self.src, 'r') as fp_handle: + tmp_names = tmp_status = fp_handle.read() + tmp_names = re.sub(r'\).*', ')', tmp_names) + tmp_status = re.sub(r'\]|.*\[', '', tmp_status) + self.movie_list = tmp_names.splitlines() + self.status_list = tmp_status.splitlines() + + # Progress bar. Enough said + pbar = progressbar.ProgressBar(max_value=len(self.movie_list)) + + for idx, val in enumerate(self.movie_list): + thread = threading.Thread(target=self._worker, args=(val, idx,)) + self.threads.append(thread) + thread.start() + pbar.update(idx+1) + time.sleep(0.2) + if len(self.threads) % 16 == 0: + time.sleep(6) + + for thread in self.threads: + thread.join() + + def write(self, dst=None): + """ Write the HTML list to index.html """ + if not dst: + dst = Path(os.path.dirname(sys.argv[0])) / 'index.html' + else: + dst = Path(dst) + # Just a fancy scrollbar for the html + scroll = '' + self.html += ('\n\t\n
Index Title Year IMDb Rating Genre Status
{index + 1}{title}{year}{rating}{genres}{status}
\n' + + '\nGenerated on: ' + time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime()) + + ' by ' + sys.argv[0] + scroll + '\n') + with open(dst, 'wb') as fp_handle: + fp_handle.write(self.html.encode('utf8')) + + +def main(): + """ Default run """ + mlist = MovieList() + mlist.gen() + mlist.write() + + +if __name__ == "__main__": + main() diff --git a/movie_list/movie_list b/movie_list/movie_list index 3f1d90d..b6534d1 100644 --- a/movie_list/movie_list +++ b/movie_list/movie_list @@ -115,7 +115,7 @@ Star Wars: Episode IV - A New Hope (1977) [DONE] Star Wars: Episode V - The Empire Strikes Back (1980) [DONE] Star Wars: Episode VI - Return of the Jedi (1983) [DONE] Star Wars: Episode: The Force Awakens (2015) [DONE] -Star Wars: Rogue One (2016) [DONE] +Rogue One: A Star Wars Story (2016) [DONE] Men in Black (1997) [DONE] Men in Black II (2002) [DONE] Men in Black 3 (2012) [DONE] @@ -192,6 +192,7 @@ Identity (2003) [DONE] Turist (Force Majeure) (2014) [DONE] Gone Girl (2014) [DONE] The Equalizer (2014) [DONE] +The Equalizer 2 (2018) [DONE] Desert Flower (2009) [DONE] I Origins (2014) [DONE] Whiplash (2014) [DONE] @@ -246,7 +247,7 @@ Now You See Me (2013) [DONE] Up (2009) [DONE] The Shallows (2016) [DONE] Boychoir (2014) [DONE] -Same Kind of Different as Me (2017) [*] +Same Kind of Different as Me (2017) [DONE] Allied (2016) [DONE] Mad Max: Fury Road (2015) [DONE] Blood Father (2016) [DONE] @@ -287,7 +288,7 @@ Gifted (2017) [DONE] Spider-Man: Homecoming (2017) [DONE] Rememory (2017) [DONE] Wristcutters: A Love Story (2006) [DONE] -Bohemian Rhapsody (2018) [*] +Bohemian Rhapsody (2018) [DONE] Killer's Bodyguard (2017) [*] Danny Collins (2015) [DONE] Annabelle: Creation (2017) [DONE] @@ -304,3 +305,38 @@ Get Out (2017) [DONE] Orphan (2009) [DONE] Upgrade (2018) [DONE] Dangal (2016) [DONE] +BlacKkKlansman (2018) [DONE] +The Shape of Water (2017) [DONE] +What Women Want (2000) [DONE] +What's Love Got to Do with It (1993) [DONE] +Spotlight (2015) [DONE] +First Man (2018) [DONE] +Halloween (2018) [*] +Catch-22 (1970) [*] +The Nun (2018) [DONE] +Into The White (2012) [DONE] +Trash (2014) [DONE] +First Man (2018) [DONE] +Full Metal Jacket (1987) [*] +Woman at War (2018) [*] +Roman J. Israel, Esq. (2017) [DONE] +Venom (2018) [DONE] +Moby Dick (1998) [DONE] +The Help (2011) [DONE] +Hidden Figures (2016) [DONE] +The Guilty (2018) [DONE] +Green Book (2018) [DONE] +The Road Within (2014) [DONE] +King of Thieves (2018) [DONE] +The House That Jack Built (2018) [DONE] +Captain Marvel (2019) [DONE] +Miss Sloane (2016) [DONE] +The Bra (2018) [DONE] +The Mule (2018) [DONE] +Escape Room (2019) [DONE] +Man on a Ledge (2012) [DONE] +The Highwaymen (2019) [DONE] +Cold War (2018) [*] +Cold Pursuit (2019) [DONE] +Ad Astra (2019) [*] +Storm Boy (2019) [DONE]