Last active
May 19, 2024 05:57
-
-
Save Nixellion/03eb0f92cbd7ad173f33ecab225333a9 to your computer and use it in GitHub Desktop.
Generate Plex Playlist for Stargate shows based on Canonical watch order
This file contains hidden or 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
# TODO: | |
# - [ ] Add films processing | |
# https://docs.google.com/spreadsheets/u/0/d/1b5T6bk5bS9LDaIVXR55-agOd_FYgTN0TZcpZDfvnMg4/pub?output=html | |
# https://python-plexapi.readthedocs.io/en/latest/modules/playlist.html | |
# https://www.reddit.com/r/PleX/comments/hmunh9/creating_playlists_with_plex_server_api/ | |
data = ''' | |
Film 01x01 | |
Film 01x01 | |
Film 01x01 | |
SG-1 01x01 | |
SG-1 01x02 | |
SG-1 01x01-02 | |
SG-1 01x03 | |
SG-1 01x04 | |
SG-1 01x05 | |
SG-1 01x06 | |
SG-1 01x07 | |
SG-1 01x08 | |
SG-1 01x09 | |
SG-1 01x10 | |
SG-1 01x11 | |
SG-1 01x12 | |
SG-1 01x13 | |
SG-1 01x14 | |
SG-1 01x15 | |
SG-1 01x16 | |
SG-1 01x17 | |
SG-1 01x18 | |
SG-1 01x19 | |
SG-1 01x20 | |
SG-1 01x21 | |
SG-1 01x22 | |
SG-1 02x01 | |
SG-1 02x02 | |
SG-1 02x03 | |
SG-1 02x04 | |
SG-1 02x05 | |
SG-1 02x06 | |
SG-1 02x07 | |
SG-1 02x08 | |
SG-1 02x09 | |
SG-1 02x10 | |
SG-1 02x11 | |
SG-1 02x12 | |
SG-1 02x13 | |
SG-1 02x14 | |
SG-1 02x15 | |
SG-1 02x16 | |
SG-1 02x17 | |
SG-1 02x18 | |
SG-1 02x19 | |
SG-1 02x20 | |
SG-1 02x21 | |
SG-1 02x22 | |
SG-1 03x01 | |
SG-1 03x02 | |
SG-1 03x03 | |
SG-1 03x04 | |
SG-1 03x05 | |
SG-1 03x06 | |
SG-1 03x07 | |
SG-1 03x08 | |
SG-1 03x09 | |
SG-1 03x10 | |
SG-1 03x11 | |
SG-1 03x12 | |
SG-1 03x13 | |
SG-1 03x14 | |
SG-1 03x15 | |
SG-1 03x16 | |
SG-1 03x17 | |
SG-1 03x18 | |
SG-1 03x19 | |
SG-1 03x20 | |
SG-1 03x21 | |
SG-1 03x22 | |
SG-1 04x01 | |
SG-1 04x02 | |
SG-1 04x03 | |
SG-1 04x04 | |
SG-1 04x05 | |
SG-1 04x06 | |
SG-1 04x07 | |
SG-1 04x08 | |
SG-1 04x09 | |
SG-1 04x10 | |
SG-1 04x11 | |
SG-1 04x12 | |
SG-1 04x13 | |
SG-1 04x14 | |
SG-1 04x15 | |
SG-1 04x16 | |
SG-1 04x17 | |
SG-1 04x18 | |
SG-1 04x19 | |
SG-1 04x20 | |
SG-1 04x21 | |
SG-1 04x22 | |
SG-1 05x01 | |
SG-1 05x02 | |
SG-1 05x03 | |
SG-1 05x04 | |
SG-1 05x05 | |
SG-1 05x06 | |
SG-1 05x07 | |
SG-1 05x08 | |
SG-1 05x09 | |
SG-1 05x10 | |
SG-1 05x11 | |
SG-1 05x12 | |
SG-1 05x13 | |
SG-1 05x14 | |
SG-1 05x15 | |
SG-1 05x16 | |
SG-1 05x17 | |
SG-1 05x18 | |
SG-1 05x19 | |
SG-1 05x20 | |
SG-1 05x21 | |
SG-1 05x22 | |
SG-1 06x01 | |
SG-1 06x02 | |
SG-1 06x03 | |
SG-1 06x04 | |
SG-1 06x05 | |
SG-1 06x06 | |
SG-1 06x07 | |
SG-1 06x08 | |
SG-1 06x09 | |
SG-1 06x10 | |
SG-1 06x11 | |
SG-1 06x12 | |
SG-1 06x13 | |
SG-1 06x14 | |
SG-1 06x15 | |
SG-1 06x16 | |
SG-1 06x17 | |
SG-1 06x18 | |
SG-1 06x19 | |
SG-1 06x20 | |
SG-1 06x21 | |
SG-1 06x22 | |
SG-1 07x01 | |
SG-1 07x02 | |
SG-1 07x03 | |
SG-1 07x04 | |
SG-1 07x05 | |
SG-1 07x06 | |
SG-1 07x07 | |
SG-1 07x08 | |
SG-1 07x09 | |
SG-1 07x10 | |
SG-1 07x11 | |
SG-1 07x12 | |
SG-1 07x13 | |
SG-1 07x14 | |
SG-1 07x15 | |
SG-1 07x16 | |
SG-1 07x17 | |
SG-1 07x18 | |
SG-1 07x19 | |
SG-1 07x20 | |
SG-1 07x21 | |
SG-1 07x22 | |
SG-1 08x01 | |
SG-1 08x02 | |
Atl 01x01 | |
Atl 01x02 | |
Atl 01x01-02 | |
SG-1 08x03 | |
Atl 01x03 | |
SG-1 08x04 | |
Atl 01x04 | |
SG-1 08x05 | |
Atl 01x05 | |
SG-1 08x06 | |
Atl 01x06 | |
SG-1 08x07 | |
Atl 01x07 | |
SG-1 08x08 | |
Atl 01x08 | |
SG-1 08x09 | |
Atl 01x09 | |
SG-1 08x10 | |
Atl 01x10 | |
Atl 01x11 | |
SG-1 08x11 | |
SG-1 08x12 | |
SG-1 08x13 | |
SG-1 08x14 | |
SG-1 08x15 | |
SG-1 08x16 | |
SG-1 08x17 | |
Atl 01x12 | |
SG-1 08x18 | |
SG-1 08x18 | |
Atl 01x13 | |
Atl 01x14 | |
Atl 01x15 | |
Atl 01x16 | |
Atl 01x17 | |
Atl 01x18 | |
SG-1 08x19 | |
SG-1 08x20 | |
Atl 01x19 | |
Atl 01x20 | |
Atl 02x01 | |
SG-1 09x01 | |
SG-1 09x02 | |
SG-1 09x03 | |
SG-1 09x04 | |
Atl 02x02 | |
Atl 02x03 | |
Atl 02x04 | |
SG-1 09x05 | |
Atl 02x05 | |
SG-1 09x06 | |
Atl 02x06 | |
SG-1 09x07 | |
Atl 02x07 | |
Atl 02x08 | |
SG-1 09x08 | |
SG-1 09x09 | |
Atl 02x09 | |
Atl 02x10 | |
Atl 02x11 | |
Atl 02x12 | |
Atl 02x13 | |
Atl 02x14 | |
Atl 02x15 | |
Atl 02x16 | |
SG-1 09x10 | |
SG-1 09x11 | |
Atl 02x17 | |
SG-1 09x12 | |
Atl 02x18 | |
SG-1 09x13 | |
Atl 02x19 | |
SG-1 09x14 | |
Atl 02x20 | |
Atl 03x01 | |
Atl 03x02 | |
SG-1 09x15 | |
SG-1 09x16 | |
SG-1 09x17 | |
SG-1 09x18 | |
SG-1 09x19 | |
SG-1 09x20 | |
SG-1 10x01 | |
SG-1 10x02 | |
SG-1 10x03 | |
Atl 03x03 | |
SG-1 10x04 | |
Atl 03x04 | |
SG-1 10x05 | |
Atl 03x05 | |
Atl 03x06 | |
SG-1 10x06 | |
SG-1 10x07 | |
Atl 03x07 | |
SG-1 10x08 | |
Atl 03x08 | |
SG-1 10x09 | |
Atl 03x09 | |
Atl 03x10 | |
Atl 03x11 | |
Atl 03x12 | |
Atl 03x13 | |
Atl 03x14 | |
Atl 03x15 | |
Atl 03x16 | |
SG-1 10x10 | |
SG-1 10x11 | |
Atl 03x17 | |
SG-1 10x12 | |
Atl 03x18 | |
SG-1 10x13 | |
Atl 03x19 | |
SG-1 10x14 | |
SG-1 10x15 | |
SG-1 10x16 | |
SG-1 10x17 | |
SG-1 10x18 | |
SG-1 10x19 | |
SG-1 10x20 | |
SG-1 11x01 | |
Atl 03x20 | |
Atl 04x01 | |
Atl 04x02 | |
Atl 04x03 | |
Atl 04x04 | |
Atl 04x05 | |
Atl 04x06 | |
Atl 04x07 | |
Atl 04x08 | |
Atl 04x09 | |
Atl 04x10 | |
Atl 04x11 | |
Atl 04x12 | |
Atl 04x13 | |
Atl 04x14 | |
Atl 04x15 | |
Atl 04x16 | |
Atl 04x17 | |
Atl 04x18 | |
Atl 04x19 | |
Atl 04x20 | |
Atl 05x01 | |
SG-1 11x02 | |
Atl 05x02 | |
Atl 05x03 | |
Atl 05x04 | |
Atl 05x05 | |
Atl 05x06 | |
Atl 05x07 | |
Atl 05x08 | |
Atl 05x09 | |
Atl 05x10 | |
Atl 05x11 | |
Atl 05x12 | |
Atl 05x13 | |
Atl 05x14 | |
Atl 05x15 | |
Atl 05x16 | |
Atl 05x17 | |
Atl 05x18 | |
Atl 05x19 | |
Atl 05x20 | |
Atl 05x20 | |
Uni 01x01 | |
Uni 01x02 | |
Uni 01x03 | |
Uni 01x01-03 | |
Uni Kx01 | |
Uni Kx02 | |
Uni Kx03 | |
Uni Kx04 | |
Uni Kx05 | |
Uni Kx06 | |
Uni Kx07 | |
Uni Kx08 | |
Uni Kx09 | |
Uni Kx10 | |
Uni Kx11 | |
Uni Kx12 | |
Uni Kx13 | |
Uni Kx14 | |
Uni Kx15 | |
Uni Kx16 | |
Uni Kx17 | |
Uni Kx18 | |
Uni Kx19 | |
Uni Kx20 | |
Uni Kx21 | |
Uni Kx22 | |
Uni Kx23 | |
Uni Kx24 | |
Uni Kx25 | |
Uni Kx26 | |
Uni Kx27 | |
Uni Kx28 | |
Uni Kx29 | |
Uni Kx30 | |
Uni Kx31 | |
Uni Kx32 | |
Uni Kx33 | |
Uni Kx34 | |
Uni 01x04 | |
Uni 01x05 | |
Uni 01x06 | |
Uni 01x07 | |
Uni 01x08 | |
Uni 01x09 | |
Uni 01x10 | |
Uni 01x11 | |
Uni 01x12 | |
Uni 01x13 | |
Uni 01x14 | |
Uni 01x15 | |
Uni 01x16 | |
Uni 01x17 | |
Uni 01x18 | |
Uni 01x19 | |
Uni 01x20 | |
Uni 02x01 | |
Uni 02x02 | |
Uni 02x03 | |
Uni 02x04 | |
Uni 02x05 | |
Uni 02x06 | |
Uni 02x07 | |
Uni 02x08 | |
Uni 02x09 | |
Uni 02x10 | |
Uni 02x11 | |
Uni 02x12 | |
Uni 02x13 | |
Uni 02x14 | |
Uni 02x15 | |
Uni 02x16 | |
Uni 02x17 | |
Uni 02x18 | |
Uni 02x19 | |
Uni 02x20 | |
''' | |
import os | |
from plexapi.myplex import MyPlexAccount | |
from plexapi.playlist import Playlist | |
APP_DIR = os.path.dirname(os.path.realpath(__file__)) # rp, realpath | |
print("""# STARGATE PLAYLIST GENERATOR FOR PLEX | |
This script will connect to your Plex server through the API, find all Stargate: SG-1, Atlantis and Universe seasons, and generate a new Playlist titled: "Stargate: Canon watch order" where all existing episodes will be placed in a Canon watch order based on this spreadsheet: https://docs.google.com/spreadsheets/u/0/d/1b5T6bk5bS9LDaIVXR55-agOd_FYgTN0TZcpZDfvnMg4/pub?output=html | |
Any missing episodes will be simply ignored. | |
After playlist is generated you will be able to manually edit it in Plex as any other playlist. | |
--- | |
""") | |
login, password, servername = input("Please, enter login, password, server name - separated by spaces: ").split(" ") | |
data_order = data.split("\n") | |
data_dict = {} | |
print("Connecting to plex...") | |
account = MyPlexAccount(login, password) | |
plex = account.resource(servername).connect() # returns a PlexServer instanc | |
print("Parsing shows...") | |
for showname, showid in [ | |
['Stargate SG-1', "SG-1"], | |
['Stargate Atlantis', "Atl"], | |
['Stargate Universe', "Uni"], | |
]: | |
for episode in plex.library.section('TV Shows').get(showname).episodes(): | |
dict_key = '{} {}x{}'.format(showid, str(episode.parentIndex).zfill(2), str(episode.index).zfill(2)) | |
if dict_key in data_dict: | |
print(f"WARNING! {dict_key} already in dict. Overwritten.") | |
# print(f"Adding: {dict_key}") | |
data_dict[dict_key] = episode | |
playlist_objects = [] | |
print("Creating ordered array...") | |
for id in data_order: | |
if id not in data_dict: | |
if "Uni K" not in id: | |
print(f"WARNING! Could not find: {id} in data_dict. Missing episode from plex?") | |
continue | |
playlist_objects.append(data_dict[id]) | |
print("Creating playlist...") | |
playlist = Playlist.create( | |
server=plex, | |
title="Stargate: Canon watch order", | |
items=playlist_objects | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment