Hi,
here i have a short Python script (Tested with python 2.7 on a qnap x64 plex installation)
For this script to work you need to get a plex token and fill in the first few lines.
This Script retrieves the IMDB CSV Export of a List and matches the entries to a Plex Library and Tags the Entries in the library
#!/usr/bin/python # -*- coding: utf-8 -*- import requests from math import ceil from plexapi.server import PlexServer from lxml.html import parse import re import csv import urllib2 ### Plex server details ### PLEX_URL = 'http://127.0.0.1:32400' PLEX_TOKEN = '' ### Existing movie library details ### MOVIE_LIBRARY_NAME = 'EN_Movies' LIST_ID = 'ls074285945' IMDB_LIST_URL = 'https://www.imdb.com/list/{}/export'.format(LIST_ID) IMDB_COLLECTION_NAME = 'Hallmark' def add_collection(library_key, rating_key): headers = {"X-Plex-Token": PLEX_TOKEN} params = {"type": 1, "id": rating_key, "collection[0].tag.tag": IMDB_COLLECTION_NAME, "collection.locked": 1 } url = "{base_url}/library/sections/{library}/all".format(base_url=PLEX_URL, library=library_key) r = requests.put(url, headers=headers, params=params) def find_imdb_id(imdb_url): """Extract id from imdb_url""" re1 = '.*?' re2 = '(\\d+)' regex = re.compile(re1 + re2, re.IGNORECASE|re.DOTALL) match = regex.search(imdb_url) if not match: return False imdb_id = "tt" + match.group(1) return imdb_id def run_imdb_list(): 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 [], 0 # Get the IMDB list print("Retrieving the IMDB list...") i = 1 list_picture_ids = [] list_picture_titles = [] list_picture_years = [] title_lookup = {} response = urllib2.urlopen(IMDB_LIST_URL) reader = csv.reader(response) titles = reader.next() reader = csv.DictReader(response, titles) for row in reader: imdburl = row['URL'] imdb_id = find_imdb_id(imdburl) if imdb_id: list_picture_ids.append(imdb_id) list_picture_titles.append(row['Title']) list_picture_years.append(row['Year']) title_lookup[imdb_id] = row['Title'] + " (" + row['Year'] + ")" else: print "ERROR: Unable to find IMDB ID for %s" % (row['Title']) continue response.close() # 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) movie_library_key = movie_library.key all_movies = movie_library.all() except: print("The '{library}' library does not exist in Plex.".format(library=MOVIE_LIBRARY_NAME)) print("Exiting script.") return # Create a dictionary of {imdb_id: movie} imdb_map = {} for m in all_movies: if 'imdb://' in m.guid: imdb_id = m.guid.split('imdb://')[1].split('?')[0] if imdb_id in list_picture_ids: imdb_map[imdb_id] = m print("Setting the collection for the '{}' library...".format(MOVIE_LIBRARY_NAME)) in_library_idx = [] for i, imdb_id in enumerate(list_picture_ids): movie = imdb_map.pop(imdb_id, None) if movie: add_collection(movie_library_key, movie.ratingKey) in_library_idx.append(i) return len(list_picture_ids) if __name__ == "__main__": print("===================================================================") import time print time.strftime("%d/%m/%Y") print("===================================================================\n") list_count = run_imdb_list() # raw_input("Press Enter to finish...")
Hope this helps you.
The Script is based on the following but modified to Download the CSV instead of parsing the HTML. Here the source
Schreibe einen Kommentar