diff --git a/PlexAutoCollectionUpdater.py b/PlexAutoCollectionUpdater.py new file mode 100644 index 0000000..da7caa6 --- /dev/null +++ b/PlexAutoCollectionUpdater.py @@ -0,0 +1,97 @@ +from plexapi.server import PlexServer +from config.config import Config +from models.movie import UpdatedMovie +from tmdbv3api import TMDb, Movie +import os +from datetime import datetime as dt +import yaml, os, urllib.request + +# Instantiate Tmdb object +tmdb = TMDb() +tmdb.api_key = Config.tmdbApiKey +tmdb.language = Config.tmdbLanguage + +# Connect to Plex Server +baseurl = Config.plexBaseUrl +token = Config.plexToken +plex = PlexServer(baseurl, token) + +plexMoviesLibrary = plex.library.section('Movies') + +MoviesList = [] + +print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: Retrieving Movies from Plex and Updating TMDb information...") +for item in plexMoviesLibrary.search(): + movie = UpdatedMovie() + tmdbMovie = Movie() + + movie.PlexTitle = item.title + for guid in item.guids: + if "tmdb://" in guid.id: + movie.TMDbId = guid.id[7:] + elif "imdb://" in guid.id: + movie.ImdbId = guid.id[7:] + + # Search for the movie on TMDb + try: + tmdbMovieDetails = tmdbMovie.details(movie_id=movie.TMDbId) + except: + print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: Cannot get details of {movie.PlexTitle} from TMDb") + + if tmdbMovieDetails['belongs_to_collection']: + movie.MovieTMDbCollectionName = tmdbMovieDetails['belongs_to_collection'].name[:len(tmdbMovieDetails['belongs_to_collection'].name) - 7] + movie.MovieTMDbCollectionTMDbId = tmdbMovieDetails['belongs_to_collection'].id + movie.MovieTMDbCollectionPosterPath = tmdbMovieDetails['belongs_to_collection'].poster_path + + movie.TMDbTitle = tmdbMovieDetails.title + + # Add movie to the list of Movies + if movie.MovieTMDbCollectionTMDbId: + print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: Adding movie {movie.TMDbTitle} from collection {movie.MovieTMDbCollectionName} to the list.") + MoviesList.append(movie) + +i = 0 +count = 0 +MovieListFinal = [] +ExistingCollectionId = [] + +while i < len(MoviesList): + for movie in MoviesList: + if MoviesList[i].MovieTMDbCollectionTMDbId == movie.MovieTMDbCollectionTMDbId: + count += 1 + if count > 2: + if not MoviesList[i].MovieTMDbCollectionTMDbId in ExistingCollectionId: + ExistingCollectionId.append(MoviesList[i].MovieTMDbCollectionTMDbId) + MovieListFinal.append(MoviesList[i]) + i += 1 + count = 0 + +# with open(Config.PlexAutoCollectionConfigFilePath, 'r') as f: +with open('test.yaml', 'r') as f: + try: + currentYaml = yaml.safe_load(f) + except yaml.YAMLError as exc: + print(exc) + +currentYamlCollections = [] + +for movies in currentYaml['collections']: + currentYamlCollections.append(movies) + +for collection in MovieListFinal: + if collection.MovieTMDbCollectionName not in currentYamlCollections: + with open('test.yaml', 'r') as f: + new_coll = {f'{collection.MovieTMDbCollectionName}': {'sync_mode': 'sync', 'tmdb_collection': collection.MovieTMDbCollectionTMDbId, 'tmdb_summary': collection.MovieTMDbCollectionTMDbId}} + currentYaml['collections'].update(new_coll) + + if currentYaml: + print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: Adding new collection: {collection.MovieTMDbCollectionName} to Yaml file...") + with open('test.yaml', 'w') as f: + yaml.safe_dump(currentYaml, f) + + if not os.path.exists(Config.PlexAutoCollectionConfigFileImagesPath + f"/{collection.MovieTMDbCollectionName}"): + print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: Download poster for new collection {collection.MovieTMDbCollectionName}...") + os.mkdir(Config.PlexAutoCollectionConfigFileImagesPath + f"/{collection.MovieTMDbCollectionName}") + urllib.request.urlretrieve(Config.tmdbImgUrl + f"{collection.MovieTMDbCollectionPosterPath}", Config.PlexAutoCollectionConfigFileImagesPath + f"/{collection.MovieTMDbCollectionName}/poster.jpeg") + +print(f":: {dt.now().strftime('%d-%m-%Y %H:%M:%S')} :: CollectionUpdater :: All steps are completed...") \ No newline at end of file