From 0e53252a2789bb3930af458018c0c16f49c99a44 Mon Sep 17 00:00:00 2001 From: JonnyWong16 Date: Thu, 18 Feb 2016 21:09:07 -0800 Subject: [PATCH] Move get poster to notification handler --- data/interfaces/default/settings.html | 7 ++++ plexpy/notification_handler.py | 48 +++++++++++++++++++++- plexpy/notifiers.py | 59 ++++----------------------- 3 files changed, 63 insertions(+), 51 deletions(-) diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index 75255e69..e08f7eeb 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -1479,6 +1479,13 @@ available_notification_agents = sorted(notifiers.available_notification_agents() {duration} The duration (in minutes) for the item. + + {poster_url} + + A URL for the movie or TV show poster.
+

(PMS agent must be Freebase or TheTVDB)

+ + {imdb_id} The IMDB ID for the movie. (e.g. tt2488496) diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index a19c36ba..45903513 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -14,9 +14,13 @@ # along with PlexPy. If not, see . +import arrow +import json +from httplib import HTTPConnection +import openanything import re import time -import arrow +import urllib2 from plexpy import logger, config, notifiers, database, helpers, plextv, pmsconnect import plexpy @@ -495,6 +499,47 @@ def build_notify_text(session=None, timeline=None, state=None): metadata['lastfm_id'] = metadata['guid'].split('lastfm://')[1].rsplit('/', 1)[0] metadata['lastfm_url'] = 'https://www.last.fm/music/' + metadata['lastfm_id'] + # Get posters (only IMDB and TheTVDB supported) + if metadata['media_type'] == 'movie' and metadata.get('imdb_id', ''): + uri = '/?i=' + metadata['imdb_id'] + + # Get poster using OMDb API + http_handler = HTTPConnection("www.omdbapi.com") + http_handler.request('GET', uri) + response = http_handler.getresponse() + request_status = response.status + + if request_status == 200: + data = json.loads(response.read()) + poster_url = data.get('Poster', '') + metadata['poster_url'] = poster_url if poster_url != 'N/A' else '' + elif request_status >= 400 and request_status < 500: + logger.warn(u"PlexPy Notifiers :: Unable to retrieve IMDB poster: %s" % response.reason) + else: + logger.warn(u"PlexPy Notifiers :: Unable to retrieve IMDB poster.") + + elif (metadata['media_type'] == 'show' or metadata['media_type'] == 'episode') \ + and (metadata.get('imdb_id', '') or metadata.get('thetvdb_id', '')): + if metadata.get('imdb_id', ''): + uri = '/lookup/shows?imdb=' + metadata['imdb_id'] + elif metadata.get('thetvdb_id', ''): + uri = '/lookup/shows?thetvdb=' + metadata['thetvdb_id'] + + # Get poster using TVmaze API + request = urllib2.Request('http://api.tvmaze.com' + uri) + opener = urllib2.build_opener(openanything.SmartRedirectHandler()) + response = opener.open(request) + request_status = response.status + + if request_status == 301: + data = json.loads(response.read()) + image = data.get('image', '') + metadata['poster_url'] = image.get('original', image.get('medium','')) + elif request_status >= 400 and request_status < 500: + logger.warn(u"PlexPy Notifiers :: Unable to retrieve TVmaze poster: %s" % response.reason) + else: + logger.warn(u"PlexPy Notifiers :: Unable to retrieve TVmaze poster.") + # Fix metadata params for notify recently added grandparent if state == 'created' and plexpy.CONFIG.NOTIFY_RECENTLY_ADDED_GRANDPARENT: show_name = metadata['title'] @@ -576,6 +621,7 @@ def build_notify_text(session=None, timeline=None, state=None): 'tagline': metadata['tagline'], 'rating': metadata['rating'], 'duration': duration, + 'poster_url': metadata.get('poster_url',''), 'imdb_id': metadata.get('imdb_id',''), 'imdb_url': metadata.get('imdb_url',''), 'thetvdb_id': metadata.get('thetvdb_id',''), diff --git a/plexpy/notifiers.py b/plexpy/notifiers.py index 7f71cbfd..772b7d84 100644 --- a/plexpy/notifiers.py +++ b/plexpy/notifiers.py @@ -2127,63 +2127,22 @@ class FacebookNotifier(object): attachment = {} if self.incl_poster and 'metadata' in kwargs: - poster = '' - caption = 'View in Plex Web.' metadata = kwargs['metadata'] + poster_url = metadata.get('poster_url','') + caption = 'View in Plex Web.' - if metadata['media_type'] == 'movie' and metadata.get('imdb_id', ''): + if metadata['media_type'] == 'movie' or metadata['media_type'] == 'show': title = metadata['title'] subtitle = metadata['year'] - uri = '/?i=' + metadata['imdb_id'] + elif metadata['media_type'] == 'episode': + title = metadata['grandparent_title'] + ' - ' + metadata['title'] + subtitle = 'S' + metadata['parent_media_index'] + ' ' + '\xc2\xb7'.decode('utf8') + \ + ' E' + metadata['media_index'] - # Get poster using OMDb API - http_handler = HTTPConnection("www.omdbapi.com") - http_handler.request('GET', uri) - response = http_handler.getresponse() - request_status = response.status - - if request_status == 200: - data = json.loads(response.read()) - poster = data.get('Poster', '') - elif request_status >= 400 and request_status < 500: - logger.warn(u"PlexPy Notifiers :: Unable to retrieve IMDB poster: %s" % response.reason) - else: - logger.warn(u"PlexPy Notifiers :: Unable to retrieve IMDB poster.") - - elif (metadata['media_type'] == 'show' or metadata['media_type'] == 'episode') \ - and (metadata.get('imdb_id', '') or metadata.get('thetvdb_id', '')): - if metadata['media_type'] == 'show': - title = metadata['title'] - subtitle = metadata['year'] - elif metadata['media_type'] == 'episode': - title = metadata['grandparent_title'] + ' - ' + metadata['title'] - subtitle = 'S' + metadata['parent_media_index'] + ' ' + '\xc2\xb7'.decode('utf8') + \ - ' E' + metadata['media_index'] - - if metadata.get('imdb_id', ''): - uri = '/lookup/shows?imdb=' + metadata['imdb_id'] - elif metadata.get('thetvdb_id', ''): - uri = '/lookup/shows?thetvdb=' + metadata['thetvdb_id'] - - # Get poster using TVmaze API - request = urllib2.Request('http://api.tvmaze.com' + uri) - opener = urllib2.build_opener(openanything.SmartRedirectHandler()) - response = opener.open(request) - request_status = response.status - - if request_status == 301: - data = json.loads(response.read()) - image = data.get('image', '') - poster = image.get('original', image.get('medium','')) - elif request_status >= 400 and request_status < 500: - logger.warn(u"PlexPy Notifiers :: Unable to retrieve TVmaze poster: %s" % response.reason) - else: - logger.warn(u"PlexPy Notifiers :: Unable to retrieve TVmaze poster.") - - if poster and poster != 'N/A': + if poster_url: attachment['link'] = 'http://app.plex.tv/web/app#!/server/' + plexpy.CONFIG.PMS_IDENTIFIER + \ '/details/%2Flibrary%2Fmetadata%2F' + metadata['rating_key'] - attachment['picture'] = poster + attachment['picture'] = poster_url attachment['name'] = title attachment['description'] = subtitle attachment['caption'] = caption