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