diff --git a/data/interfaces/default/index.html b/data/interfaces/default/index.html index 61715071..bb3a7632 100644 --- a/data/interfaces/default/index.html +++ b/data/interfaces/default/index.html @@ -26,11 +26,22 @@ - +
+
+
+
+

Recently Added

+
+
+
+
+
+ <%def name="javascriptIncludes()"> + diff --git a/data/interfaces/default/recently_added.html b/data/interfaces/default/recently_added.html new file mode 100644 index 00000000..84d42a1e --- /dev/null +++ b/data/interfaces/default/recently_added.html @@ -0,0 +1,36 @@ +% if recently_added != None: +
+ +
+% else: +

No recently added items.

+% endif \ No newline at end of file diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 10e3d0e1..2d0428d8 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -105,6 +105,100 @@ class PmsConnect(object): return output + """ + Return list of recently added items. + + Parameters required: count { number of results to return } + Optional parameters: output_format { dict, json } + + Output: array + """ + def get_recently_added(self, count='0', output_format=''): + url_command = '/library/recentlyAdded?X-Plex-Container-Start=0&X-Plex-Container-Size=' + count + http_handler = HTTPConnection(self.host, self.port, timeout=10) + + http_handler.request("GET", url_command + '&X-Plex-Token=' + self.token) + response = http_handler.getresponse() + request_status = response.status + request_content = response.read() + + if output_format == 'dict': + output = helpers.convert_xml_to_dict(request_content) + elif output_format == 'json': + output = helpers.convert_xml_to_json(request_content) + else: + output = request_content + + return output + + """ + Return processed and validated list of recently added items. + + Parameters required: count { number of results to return } + + Output: array + """ + def get_recently_added_details(self, count='0'): + recent = self.get_recently_added(count) + recents_list = [] + + try: + xml_parse = minidom.parseString(recent) + except Exception, e: + logger.warn("Error parsing XML for Plex recently added: %s" % e) + return None + except: + logger.warn("Error parsing XML for Plex recently added.") + return None + + xml_head = xml_parse.getElementsByTagName('MediaContainer') + if not xml_head: + logger.warn("Error parsing XML for Plex recently added.") + return None + + for a in xml_head: + if a.getAttribute('size'): + if a.getAttribute('size') == '0': + output = {'recently_added': None} + return output + + if a.getElementsByTagName('Directory'): + recents_main = a.getElementsByTagName('Directory') + for item in recents_main: + recent_type = self.get_xml_attr(item, 'type') + + if recent_type == 'season': + recent_items = {'type': recent_type, + 'ratingKey': self.get_xml_attr(item, 'ratingKey'), + 'title': self.get_xml_attr(item, 'title'), + 'thumb': self.get_xml_attr(item, 'thumb'), + 'addedAt': self.get_xml_attr(item, 'addedAt') + } + recents_list.append(recent_items) + else: + recent_items = {} + recents_list.append(recent_items) + if a.getElementsByTagName('Video'): + recents_main = a.getElementsByTagName('Video') + for item in recents_main: + recent_type = self.get_xml_attr(item, 'type') + + if recent_type == 'movie': + recent_items = {'type': recent_type, + 'ratingKey': self.get_xml_attr(item, 'ratingKey'), + 'title': self.get_xml_attr(item, 'title'), + 'year': self.get_xml_attr(item, 'year'), + 'thumb': self.get_xml_attr(item, 'thumb'), + 'addedAt': self.get_xml_attr(item, 'addedAt') + } + recents_list.append(recent_items) + else: + recent_items = {} + recents_list.append(recent_items) + + output = {'recently_added': recents_list} + return output + """ Return processed and validated metadata list for requested item. diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 03b8001f..80a192c2 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -678,6 +678,21 @@ class WebInterface(object): return serve_template(templatename="current_activity_header.html", activity=None) logger.warn('Unable to retrieve data.') + @cherrypy.expose + def get_recently_added(self, count='0', **kwargs): + + try: + pms_connect = pmsconnect.PmsConnect() + result = pms_connect.get_recently_added_details(count) + except IOError, e: + return serve_template(templatename="recently_added.html", recently_added=None) + + if result: + return serve_template(templatename="recently_added.html", recently_added=result['recently_added']) + else: + return serve_template(templatename="recently_added.html", recently_added=None) + logger.warn('Unable to retrieve data.') + @cherrypy.expose def pms_image_proxy(self, img='', width='0', height='0', **kwargs): if img != '': @@ -729,3 +744,15 @@ class WebInterface(object): return result else: logger.warn('Unable to retrieve data.') + + @cherrypy.expose + def get_recently_added_json(self, count='0', **kwargs): + + pms_connect = pmsconnect.PmsConnect() + result = pms_connect.get_recently_added(count, 'json') + + if result: + cherrypy.response.headers['Content-type'] = 'application/json' + return result + else: + logger.warn('Unable to retrieve data.') \ No newline at end of file