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... " )