-
-
Save blacktwin/a327055da54d7feb3eef10e64a8b661a to your computer and use it in GitHub Desktop.
""" | |
PlexPy > Settings > Notification Agents > Scripts > Bell icon: | |
[X] Notify on Recently Added | |
PlexPy > Settings > Notification Agents > Scripts > Gear icon: | |
Recently Added: notify_on_added.py | |
PlexPy > Settings > Notifications > Script > Script Arguments: | |
-sn {show_name} -ena {episode_name} -ssn {season_num00} -enu {episode_num00} -srv {server_name} -med {media_type} -pos {poster_url} -tt {title} -sum {summary} -lbn {library_name} | |
You can add more arguments if you want more details in the email body | |
""" | |
from email.mime.text import MIMEText | |
import email.utils | |
import smtplib | |
import sys | |
import argparse | |
parser = argparse.ArgumentParser() | |
parser.add_argument('-sn', '--show_name', action='store', default='', | |
help='The name of the TV show') | |
parser.add_argument('-ena', '--episode_name', action='store', default='', | |
help='The name of the episode') | |
parser.add_argument('-ssn', '--season_num', action='store', default='', | |
help='The season number of the TV show') | |
parser.add_argument('-enu', '--episode_num', action='store', default='', | |
help='The episode number of the TV show') | |
parser.add_argument('-srv', '--plex_server', action='store', default='', | |
help='The name of the Plex server') | |
parser.add_argument('-med', '--show_type', action='store', default='', | |
help='The type of media') | |
parser.add_argument('-pos', '--poster', action='store', default='', | |
help='The poster url') | |
parser.add_argument('-tt', '--title', action='store', default='', | |
help='The title of the TV show') | |
parser.add_argument('-sum', '--summary', action='store', default='', | |
help='The summary of the TV show') | |
parser.add_argument('-lbn', '--library_name', action='store', default='', | |
help='The name of the TV show') | |
p = parser.parse_args() | |
# Edit [email protected] and shows | |
users = [{'email': '[email protected]', | |
'shows': ('show1', 'show2') | |
}, | |
{'email': '[email protected]', | |
'shows': ('show1', 'show2', 'show3') | |
}, | |
{'email': '[email protected]', | |
'shows': ('show1', 'show2', 'show3', 'show4') | |
}] | |
# Kill script now if show_name is not in lists | |
too = list('Match' for u in users if p.show_name in u['shows']) | |
if not too: | |
print 'Kill script now show_name is not in lists' | |
exit() | |
# Join email addresses | |
to = list([u['email'] for u in users if p.show_name in u['shows']]) | |
# Email settings | |
name = 'PlexPy' # Your name | |
sender = 'sender' # From email address | |
email_server = 'smtp.gmail.com' # Email server (Gmail: smtp.gmail.com) | |
email_port = 587 # Email port (Gmail: 587) | |
email_username = 'email' # Your email username | |
email_password = 'password' # Your email password | |
email_subject = 'New episode for ' + p.show_name + ' is available on ' + p.plex_server # The email subject | |
# Detailed body for tv shows | |
show_html = """\ | |
<html> | |
<head></head> | |
<body> | |
<p>Hi!<br> | |
{p.show_name} S{p.season_num} - E{p.episode_num} -- {p.episode_name} -- was recently added to {p.library_name} on PLEX | |
<br><br> | |
<br> {p.summary} <br> | |
<br><img src="{p.poster}" alt="Poster unavailable" height="150" width="102"><br> | |
</p> | |
</body> | |
</html> | |
""".format(p=p) | |
### Do not edit below ### | |
# Check to see whether it is a tv show | |
if p.show_type.lower() == 'show' or p.show_type.lower() == 'episode': | |
message = MIMEText(show_html, 'html') | |
message['Subject'] = email_subject | |
message['From'] = email.utils.formataddr((name, sender)) | |
mailserver = smtplib.SMTP(email_server, email_port) | |
mailserver.starttls() | |
mailserver.ehlo() | |
mailserver.login(email_username, email_password) | |
mailserver.sendmail(sender, to, message.as_string()) | |
mailserver.quit() | |
else: | |
exit() |
Im getting an error in line 9
show_name = sys.argv[1]
IndexError: list index out of range
Any help would be appreciated
@Jborn4christ did you copy the Arguments into the Notification > Script > Script Arguments?
Small improvement. No need to check the shows twice.
https://gist.github.com/blacktwin/a327055da54d7feb3eef10e64a8b661a#file-notify_on_added-py-L45-L52
# Join email addresses
to = [u['email'] for u in users if p.show_name in u['shows']]
if not to:
print 'Kill script now show_name is not in lists'
return
I'm trying to test this at the command line (outside of plexpy) - when it gets to line 80 it hits the 'else' clause so no email is sent. I'm calling the script with:
./notify_on_added.py -sn 'Seinfeld'
and Seinfeld is in my list of shows (line 36)
Is my understanding off on how to run this? How does the script know if a show was just added? (is it something sent as an argument by the 'recently added' part of plexpy?
@oliver-cfc in order test like that you need to include all the arguments listed in line 8. Sorry I forgot the instructions for PlexPy. I'll add them when I get to a PC. PlexPy can be set to trigger a custom script like this whenever something is added, watched, paused, started, stopped, etc.
This is based on the work from JonnyWong16/notify_on_show.py that mp998 modified in their PlexPy_email_notifiation.py