Created
April 10, 2017 14:02
-
-
Save blacktwin/0332f2dc9534bdf412ff3f664e9513c0 to your computer and use it in GitHub Desktop.
From a list of TV shows, check if users in a list has watched shows episodes. If all users in list have watched an episode of listed show, then delete episode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
From a list of TV shows, check if users in a list has watched shows episodes. | |
If all users in list have watched an episode of listed show, then delete episode. | |
""" | |
import requests | |
import sys | |
import os | |
## EDIT THESE SETTINGS ## | |
PLEXPY_APIKEY = 'xxxxx' # Your PlexPy API key | |
PLEXPY_URL = 'http://localhost:8181/' # Your PlexPy URL | |
SHOW_LST = [123456, 123456, 123456, 123456] # Show rating keys. | |
USER_LST = ['Sam', 'Jakie', 'Blacktwin'] # Name of users | |
class UserHIS(object): | |
def __init__(self, data=None): | |
d = data or {} | |
self.rating_key = d['rating_key'] | |
class METAINFO(object): | |
def __init__(self, data=None): | |
d = data or {} | |
self.title = d['title'] | |
self.file = d['file'] | |
self.media_type = d['media_type'] | |
self.grandparent_title = d['grandparent_title'] | |
def get_get_metadata(rating_key): | |
# Get the metadata for a media item. | |
payload = {'apikey': PLEXPY_APIKEY, | |
'rating_key': rating_key, | |
'cmd': 'get_metadata', | |
'media_info': True} | |
try: | |
r = requests.get(PLEXPY_URL.rstrip('/') + '/api/v2', params=payload) | |
response = r.json() | |
res_data = response['response']['data']['metadata'] | |
return METAINFO(data=res_data) | |
except Exception as e: | |
sys.stderr.write("PlexPy API 'get_get_metadata' request failed: {0}.".format(e)) | |
pass | |
def get_get_history(user, show, start, length): | |
# Get the PlexPy history. | |
payload = {'apikey': PLEXPY_APIKEY, | |
'cmd': 'get_history', | |
'user': user, | |
'grandparent_rating_key': show, | |
'start': start, | |
'length': length} | |
try: | |
r = requests.get(PLEXPY_URL.rstrip('/') + '/api/v2', params=payload) | |
response = r.json() | |
res_data = response['response']['data']['data'] | |
return [UserHIS(data=d) for d in res_data if d['watched_status'] == 1] | |
except Exception as e: | |
sys.stderr.write("PlexPy API 'get_history' request failed: {0}.".format(e)) | |
meta_dict = {} | |
meta_lst = [] | |
delete_lst = [] | |
count = 25 | |
for user in USER_LST: | |
for show in SHOW_LST: | |
start = 0 | |
while True: | |
# Getting all watched history for listed users and shows | |
history = get_get_history(user, show, start, count) | |
try: | |
if all([history]): | |
start += count | |
for h in history: | |
# Getting metadata of what was watched | |
meta = get_get_metadata(h.rating_key) | |
if not any(d['title'] == meta.title for d in meta_lst): | |
meta_dict = { | |
'title': meta.title, | |
'file': meta.file, | |
'type': meta.media_type, | |
'grandparent_title': meta.grandparent_title, | |
'watched_by': [user] | |
} | |
meta_lst.append(meta_dict) | |
else: | |
for d in meta_lst: | |
if d['title'] == meta.title: | |
d['watched_by'].append(user) | |
continue | |
elif not all([history]): | |
break | |
start += count | |
except Exception as e: | |
print(e) | |
pass | |
for meta_dict in meta_lst: | |
for key, value in meta_dict.items(): | |
if value == USER_LST: | |
print(u"{} {} has been watched by {}".format(meta_dict['grandparent_title'], meta_dict['title'], | |
" & ".join(USER_LST))) | |
delete_lst.append(meta_dict['file']) | |
for x in delete_lst: | |
print("Removing {}".format(x)) | |
os.remove(x) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment