def main(): # Connect to the Plex server print("Connecting to the Plex server at '{base_url}'...".format( base_url=PLEX_URL)) try: plex = PlexServer(PLEX_URL, PLEX_TOKEN) except: print("No Plex server found at: {base_url}".format(base_url=PLEX_URL)) print("Exiting script.") return # Get list of movies from the Plex server print( "Retrieving a list of movies from the '{library}' library in Plex...". format(library=MOVIE_LIBRARY_NAME)) try: movie_library = plex.library.section(MOVIE_LIBRARY_NAME) except: print("The '{library}' library does not exist in Plex.".format( library=MOVIE_LIBRARY_NAME)) print("Exiting script.") return imdb = Imdb() conn_db = sqlite3.connect(PLEX_DATABASE_FILE) db = conn_db.cursor() if RATING_SOURCE == 'imdb': print("Using IDMB ratings.") elif RATING_SOURCE == 'rt': print("Using Rotten Tomatoes critic ratings.") else: print("Invalid rating source. Must be 'imdb' or 'rt'.") print("Exiting script.") return for plex_movie in movie_library.all(): if 'imdb://' in plex_movie.guid: imdb_id = plex_movie.guid.split('imdb://')[1].split('?')[0] elif 'themoviedb://' in plex_movie.guid: tmdb_id = plex_movie.guid.split('themoviedb://')[1].split('?')[0] imdb_id = get_imdb_id_from_tmdb(tmdb_id) else: imdb_id = None if not imdb_id: print("Missing IMDB ID. Skipping movie '{pm.title}'.".format( pm=plex_movie)) continue if RATING_SOURCE == 'imdb': if imdb.title_exists(imdb_id): imdb_movie = imdb.get_title_by_id(imdb_id) else: print( "Movie not found on IMDB. Skipping movie '{pm.title} ({imdb_id})'." .format(pm=plex_movie, imdb_id=imdb_id)) continue print("{im.rating}\t{pm.title}".format(pm=plex_movie, im=imdb_movie)) if not DRY_RUN: db_execute( db, "UPDATE metadata_items SET rating = ? WHERE id = ? AND user_fields NOT LIKE ?", [ imdb_movie.rating, plex_movie.ratingKey, '%lockedFields=5%' ]) extra_data = db_execute( db, "SELECT extra_data FROM metadata_items WHERE id = ?", [plex_movie.ratingKey]).fetchone()[0] if extra_data: extra_data = re.sub( r"at%3AratingImage=.+?&|at%3AaudienceRatingImage=.+?&", '', extra_data) db_execute( db, "UPDATE metadata_items SET extra_data = ? WHERE id = ?", [extra_data, plex_movie.ratingKey]) db_execute( db, "UPDATE metadata_items SET extra_data = ? || extra_data WHERE id = ?", [ 'at%3AratingImage=imdb%3A%2F%2Fimage%2Erating&', plex_movie.ratingKey ]) elif RATING_SOURCE == 'rt': rt_client_result = RottenTomatoesClient.search( term=plex_movie.title, limit=5) if RT_MATCH_YEAR: rt_movie = next((m for m in rt_client_result['movies'] if m['year'] == plex_movie.year), None) else: rt_movie = next((m for m in rt_client_result['movies']), None) if rt_movie is None: print( "Movie not found on RottenTomatoes. Skipping movie '{pm.title} ({imdb_id})'." .format(pm=plex_movie, imdb_id=imdb_id)) continue rt_rating = rt_movie['meterScore'] / 10.0 tomato = 'ripe' if rt_rating >= 6 else 'rotten' print("{rt_rating}\t{pm.title}".format(pm=plex_movie, rt_rating=rt_rating)) if not DRY_RUN: db_execute( db, "UPDATE metadata_items SET audience_rating = ? WHERE id = ?", [rt_rating, plex_movie.ratingKey]) extra_data = db_execute( db, "SELECT extra_data FROM metadata_items WHERE id = ?", [plex_movie.ratingKey]).fetchone()[0] if extra_data: extra_data = re.sub( r"at%3AratingImage=.+?&|at%3AaudienceRatingImage=.+?&", '', extra_data) db_execute( db, "UPDATE metadata_items SET extra_data = ? WHERE id = ?", [extra_data, plex_movie.ratingKey]) db_execute( db, "UPDATE metadata_items SET extra_data = ? || extra_data WHERE id = ?", [ 'at%3AaudienceRatingImage=rottentomatoes%3A%2F%2Fimage%2Erating%2E{}&' .format(tomato), plex_movie.ratingKey ]) conn_db.commit() db.close()
from imdbpie import Imdb import json imdb = Imdb(anonymize=True, cache=True) for i in xrange(0, 9999999): cnt = 0 movie_id = "tt" + str(i).zfill(7) with open('reviews.json', 'w') as fp: if imdb.title_exists(movie_id): cnt += 1 title = imdb.get_title_by_id(movie_id) print movie_id, title.title reviews = imdb.get_title_reviews(movie_id) # if reviews == None: # reviews = [] # else: # reviews = [review.__dict__ for review in reviews] json.dump([title, reviews], fp, indent=2, default=lambda o: o.__dict__) if cnt > 10: break
def title_exists(imdb_id): global imdb if imdb is None: imdb = Imdb() return imdb.title_exists(imdb_id)