Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Create a Plex Playlist with what was aired on this today's month-day, sort by oldest first, using PlexAPI
"""
Create a Plex Playlist with what was aired on this today's month-day, sort by oldest first.
If Playlist from yesterday exists delete and create today's.
If today's Playlist exists exit.
"""
import operator, time
from plexapi.server import PlexServer
import requests
baseurl = 'http://localhost:32400'
token = 'xxxxxx'
plex = PlexServer(baseurl, token)
library_name = ['Movies', 'TV Shows'] # You library names
child_lst = []
aired_lst = []
today = time.gmtime(time.time())
TODAY_PLAY_TITLE = 'Aired Today {}-{}'.format(today.tm_mon, today.tm_mday)
# Remove old Aired Today Playlists
for playlist in plex.playlists():
if playlist.title == TODAY_PLAY_TITLE.startswith('Aired Today') and not TODAY_PLAY_TITLE:
r = requests.delete('{}/playlists/{}?X-Plex-Token={}'
.format(baseurl, TODAY_PLAY_TITLE, token))
print('Removing old Aired Today Playlists ')
print(r)
elif playlist.title == TODAY_PLAY_TITLE:
print('{} already exists. No need to make again.'.format(TODAY_PLAY_TITLE))
exit(0)
# Get all movies or episodes from LIBRARY_NAME
for library in library_name:
for child in plex.library.section(library).all():
if child.type == 'movie':
child_lst += [child]
elif child.type == 'show':
child_lst += child.episodes()
else:
pass
# Find what aired with today's month-day
for video in child_lst:
try:
if str(video.originallyAvailableAt.month) == str(today.tm_mon) \
and str(video.originallyAvailableAt.day) == str(today.tm_mday):
aired_lst += [[video] + [str(video.originallyAvailableAt)]]
except Exception as e:
pass
# Sort by original air date, oldest first
aired_lst = sorted(aired_lst, key=operator.itemgetter(1))
# Remove date used for sorting
play_lst = [x[0] for x in aired_lst]
# Create Playlist
plex.createPlaylist(TODAY_PLAY_TITLE, play_lst)
@adamcarter1

This comment has been minimized.

Copy link

@adamcarter1 adamcarter1 commented Dec 5, 2018

This is cool! How do i implement it?

@cfurrow

This comment has been minimized.

Copy link

@cfurrow cfurrow commented Feb 17, 2019

@adamcarter1:

Be sure that you have python and pip installed, then you can run this:

# This installs the plex api so it can be used in the above script
pip install plexapi

# This downloads the above script. You can copy/paste the above code, or use wget to download the "raw" file from github
wget https://gist.githubusercontent.com/blacktwin/397f07724abebd1223ba6ea644ea1669/raw/72b2e633f12473f5e9a9e95be3906a19d7843c86/aired_today_playlist.py

Then, you need to edit the aired_today_playlist.py

Edit the baseurl to point to your server. Mine looks like this:
baseurl = 'http://192.168.1.72:32400'

And since I only wanted to get a list of all TV shows that aired today, I modified the following line
library_name = ['TV Shows'] # You library names

You'll need to get a valid plex token. The easiest way to do this, is open up your plex server via https://app.plex.tv, start playing some video from your library and then open your browser's developer tools, and look in the "network" tab. In there, you'll see a bunch of requests being made to your server that look like this:

https://some-plex-url-goes-here:32400/:/timeline?ratingKey=4681&key=%2Flibrary%2Fmetadata%2F4681&playbackTime=434808&playQueueItemID=XXXX&state=buffering&hasMDE=1&time=434000&duration=1213000&X-Plex-Product=Plex%20Web&X-Plex-Version=3.87.2&X-Plex-Client-Identifier=XXXX&X-Plex-Platform=Chrome&X-Plex-Platform-Version=72.0&X-Plex-Sync-Version=2&X-Plex-Device=OSX&X-Plex-Device-Name=Chrome&X-Plex-Device-Screen-Resolution=1536x782%2C1920x1080&X-Plex-Token=XXXXXXX&X-Plex-Language=en&X-Plex-Text-Format=plain&X-Plex-Session-Identifier=XXXXX

Find the plex token in there, by looking up the value for X-Plex-Token. Copy the value and add it into the python file.

token = 'XXXXXXX'

Now you're ready to run the script!

python aired_today_playlist.py

That's it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment