PlexAutoCollectionUpdater/PlexAutoCollectionUpdater.py

96 lines
4.1 KiB
Python
Raw Normal View History

2021-12-09 04:26:45 +07:00
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
2021-12-09 04:28:49 +07:00
with open(Config.PlexAutoCollectionConfigFilePath, 'r') as f:
2021-12-09 04:26:45 +07:00
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:
2021-12-09 04:28:49 +07:00
with open(Config.PlexAutoCollectionConfigFilePath, 'r') as f:
2021-12-09 04:26:45 +07:00
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...")
2021-12-09 04:28:49 +07:00
with open(Config.PlexAutoCollectionConfigFilePath, 'w') as f:
2021-12-09 04:26:45 +07:00
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...")