diff --git a/plexpy/helpers.py b/plexpy/helpers.py
index 8d402e49..b59223a0 100644
--- a/plexpy/helpers.py
+++ b/plexpy/helpers.py
@@ -347,8 +347,12 @@ def convert_xml_to_dict(xml):
def get_percent(value1, value2):
- value1 = cast_to_float(value1)
- value2 = cast_to_float(value2)
+
+ if value1.isdigit() and value2.isdigit():
+ value1 = cast_to_float(value1)
+ value2 = cast_to_float(value2)
+ else:
+ return 0
if value1 != 0 and value2 != 0:
percent = (value1 / value2) * 100
diff --git a/plexpy/plexwatch.py b/plexpy/plexwatch.py
index 69659e31..92acb393 100644
--- a/plexpy/plexwatch.py
+++ b/plexpy/plexwatch.py
@@ -634,11 +634,17 @@ class PlexWatch(object):
for a in xml_head:
grandparent_thumb = self.get_xml_attr(a, 'grandparentThumb')
- row = {'orig_title': item[0],
+ row = {'title': item[0],
'total_plays': item[1],
+ 'users_watched': '',
'rating_key': item[2],
'last_play': item[3],
- 'grandparent_thumb': grandparent_thumb
+ 'grandparent_thumb': grandparent_thumb,
+ 'thumb': '',
+ 'user': '',
+ 'friendly_name': '',
+ 'platform_type': '',
+ 'platform': ''
}
top_tv.append(row)
@@ -679,12 +685,17 @@ class PlexWatch(object):
for a in xml_head:
grandparent_thumb = self.get_xml_attr(a, 'grandparentThumb')
- row = {'orig_title': item[0],
+ row = {'title': item[0],
'users_watched': item[1],
'rating_key': item[2],
'last_play': item[3],
'total_plays': item[5],
- 'grandparent_thumb': grandparent_thumb
+ 'grandparent_thumb': grandparent_thumb,
+ 'thumb': '',
+ 'user': '',
+ 'friendly_name': '',
+ 'platform_type': '',
+ 'platform': ''
}
popular_tv.append(row)
@@ -720,7 +731,13 @@ class PlexWatch(object):
'friendly_name': item[1],
'total_plays': item[2],
'last_play': item[3],
- 'thumb': user_thumb
+ 'thumb': user_thumb,
+ 'grandparent_thumb': '',
+ 'users_watched': '',
+ 'rating_key': '',
+ 'title': '',
+ 'platform_type': '',
+ 'platform': ''
}
top_users.append(row)
@@ -762,7 +779,14 @@ class PlexWatch(object):
row = {'platform': item[0],
'total_plays': item[1],
'last_play': item[2],
- 'platform_type': platform_type
+ 'platform_type': platform_type,
+ 'title': '',
+ 'thumb': '',
+ 'grandparent_thumb': '',
+ 'users_watched': '',
+ 'rating_key': '',
+ 'user': '',
+ 'friendly_name': ''
}
top_platform.append(row)
diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py
index 31b7fae4..b0b6bef8 100644
--- a/plexpy/pmsconnect.py
+++ b/plexpy/pmsconnect.py
@@ -409,17 +409,22 @@ class PmsConnect(object):
if metadata_type == 'show':
metadata = {'type': metadata_type,
- 'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
+ 'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
+ 'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
+ 'index': self.get_xml_attr(metadata_main, 'index'),
'studio': self.get_xml_attr(metadata_main, 'studio'),
'title': self.get_xml_attr(metadata_main, 'title'),
- 'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
+ 'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
'summary': self.get_xml_attr(metadata_main, 'summary'),
'rating': self.get_xml_attr(metadata_main, 'rating'),
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
'year': self.get_xml_attr(metadata_main, 'year'),
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
+ 'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
'art': self.get_xml_attr(metadata_main, 'art'),
- 'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
+ 'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
'writers': writers,
'directors': directors,
'genres': genres,
@@ -428,19 +433,22 @@ class PmsConnect(object):
metadata_list = {'metadata': metadata}
elif metadata_type == 'episode':
metadata = {'type': metadata_type,
- 'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
- 'grandparentTitle': self.get_xml_attr(metadata_main, 'grandparentTitle'),
- 'parentIndex': self.get_xml_attr(metadata_main, 'parentIndex'),
+ 'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
+ 'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
+ 'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
'index': self.get_xml_attr(metadata_main, 'index'),
+ 'studio': self.get_xml_attr(metadata_main, 'studio'),
'title': self.get_xml_attr(metadata_main, 'title'),
- 'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
+ 'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
'summary': self.get_xml_attr(metadata_main, 'summary'),
+ 'rating': self.get_xml_attr(metadata_main, 'rating'),
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
'year': self.get_xml_attr(metadata_main, 'year'),
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
- 'parentThumb': self.get_xml_attr(metadata_main, 'parentThumb'),
+ 'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
'art': self.get_xml_attr(metadata_main, 'art'),
- 'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
+ 'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
'writers': writers,
'directors': directors,
'genres': genres,
@@ -449,17 +457,22 @@ class PmsConnect(object):
metadata_list = {'metadata': metadata}
elif metadata_type == 'movie':
metadata = {'type': metadata_type,
- 'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
+ 'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
+ 'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
+ 'index': self.get_xml_attr(metadata_main, 'index'),
'studio': self.get_xml_attr(metadata_main, 'studio'),
'title': self.get_xml_attr(metadata_main, 'title'),
- 'contentRating': self.get_xml_attr(metadata_main, 'contentRating'),
+ 'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
'summary': self.get_xml_attr(metadata_main, 'summary'),
'rating': self.get_xml_attr(metadata_main, 'rating'),
'duration': helpers.convert_milliseconds_to_minutes(self.get_xml_attr(metadata_main, 'duration')),
'year': self.get_xml_attr(metadata_main, 'year'),
'thumb': self.get_xml_attr(metadata_main, 'thumb'),
+ 'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
'art': self.get_xml_attr(metadata_main, 'art'),
- 'originallyAvailableAt': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
+ 'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
'genres': genres,
'actors': actors,
'writers': writers,
@@ -470,16 +483,26 @@ class PmsConnect(object):
parent_rating_key = self.get_xml_attr(metadata_main, 'parentRatingKey')
show_details = self.get_metadata_details(parent_rating_key)
metadata = {'type': metadata_type,
- 'ratingKey': self.get_xml_attr(metadata_main, 'ratingKey'),
- 'parentTitle': self.get_xml_attr(metadata_main, 'parentTitle'),
+ 'rating_key': self.get_xml_attr(metadata_main, 'ratingKey'),
+ 'grandparent_title': self.get_xml_attr(metadata_main, 'grandparentTitle'),
+ 'parent_index': self.get_xml_attr(metadata_main, 'parentIndex'),
+ 'parent_title': self.get_xml_attr(metadata_main, 'parentTitle'),
'index': self.get_xml_attr(metadata_main, 'index'),
+ 'studio': self.get_xml_attr(metadata_main, 'studio'),
'title': self.get_xml_attr(metadata_main, 'title'),
- 'thumb': self.get_xml_attr(metadata_main, 'thumb'),
- 'art': self.get_xml_attr(metadata_main, 'art'),
+ 'content_rating': self.get_xml_attr(metadata_main, 'contentRating'),
'summary': show_details['metadata']['summary'],
- 'studio': show_details['metadata']['studio'],
+ 'rating': self.get_xml_attr(metadata_main, 'rating'),
'duration': show_details['metadata']['duration'],
- 'contentRating': show_details['metadata']['contentRating']
+ 'year': self.get_xml_attr(metadata_main, 'year'),
+ 'thumb': self.get_xml_attr(metadata_main, 'thumb'),
+ 'parent_thumb': self.get_xml_attr(metadata_main, 'parentThumb'),
+ 'art': self.get_xml_attr(metadata_main, 'art'),
+ 'originally_available_at': self.get_xml_attr(metadata_main, 'originallyAvailableAt'),
+ 'genres': genres,
+ 'actors': actors,
+ 'writers': writers,
+ 'directors': directors
}
metadata_list = {'metadata': metadata}
else:
@@ -580,29 +603,29 @@ class PmsConnect(object):
duration = self.get_xml_attr(media_info, 'duration')
progress = self.get_xml_attr(session, 'viewOffset')
- session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
+ session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
'art': self.get_xml_attr(session, 'art'),
- 'parentThumb': self.get_xml_attr(session, 'parentThumb'),
+ 'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
'thumb': self.get_xml_attr(session, 'thumb'),
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
'friendly_name': plex_watch.get_user_friendly_name(
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
- 'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
- 'parentTitle': self.get_xml_attr(session, 'parentTitle'),
+ 'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
+ 'parent_title': self.get_xml_attr(session, 'parentTitle'),
'title': self.get_xml_attr(session, 'title'),
- 'ratingKey': self.get_xml_attr(session, 'ratingKey'),
- 'audioDecision': audio_decision,
- 'audioChannels': audio_channels,
- 'audioCodec': audio_codec,
- 'videoDecision': '',
- 'videoCodec': '',
+ 'rating_key': self.get_xml_attr(session, 'ratingKey'),
+ 'audio_decision': audio_decision,
+ 'audio_channels': audio_channels,
+ 'audio_codec': audio_codec,
+ 'video_decision': '',
+ 'video_codec': '',
'height': '',
'width': '',
'duration': duration,
'progress': progress,
- 'progressPercent': str(helpers.get_percent(progress, duration)),
+ 'progress_percent': str(helpers.get_percent(progress, duration)),
'type': 'track',
'indexes': 0
}
@@ -650,59 +673,86 @@ class PmsConnect(object):
use_indexes = 0
if self.get_xml_attr(session, 'type') == 'episode':
- session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
+ session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
'art': self.get_xml_attr(session, 'art'),
- 'parentThumb': self.get_xml_attr(session, 'parentThumb'),
+ 'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
'thumb': thumb,
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
'friendly_name': plex_watch.get_user_friendly_name(
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
- 'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
- 'parentTitle': self.get_xml_attr(session, 'parentTitle'),
+ 'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
+ 'parent_title': self.get_xml_attr(session, 'parentTitle'),
'title': self.get_xml_attr(session, 'title'),
- 'ratingKey': self.get_xml_attr(session, 'ratingKey'),
- 'audioDecision': audio_decision,
- 'audioChannels': audio_channels,
- 'audioCodec': audio_codec,
- 'videoDecision': video_decision,
- 'videoCodec': video_codec,
+ 'rating_key': self.get_xml_attr(session, 'ratingKey'),
+ 'audio_decision': audio_decision,
+ 'audio_channels': audio_channels,
+ 'audio_codec': audio_codec,
+ 'video_decision': video_decision,
+ 'video_codec': video_codec,
'height': height,
'width': width,
'duration': duration,
'progress': progress,
- 'progressPercent': str(helpers.get_percent(progress, duration)),
+ 'progress_percent': str(helpers.get_percent(progress, duration)),
'type': self.get_xml_attr(session, 'type'),
'indexes': use_indexes
}
elif self.get_xml_attr(session, 'type') == 'movie':
- session_output = {'sessionKey': self.get_xml_attr(session, 'sessionKey'),
+ session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
'art': self.get_xml_attr(session, 'art'),
'thumb': thumb,
- 'parentThumb': self.get_xml_attr(session, 'parentThumb'),
+ 'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
'friendly_name': plex_watch.get_user_friendly_name(
self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
- 'grandparentTitle': self.get_xml_attr(session, 'grandparentTitle'),
- 'parentTitle': self.get_xml_attr(session, 'parentTitle'),
+ 'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
+ 'parent_title': self.get_xml_attr(session, 'parentTitle'),
'title': self.get_xml_attr(session, 'title'),
- 'ratingKey': self.get_xml_attr(session, 'ratingKey'),
- 'audioDecision': audio_decision,
- 'audioChannels': audio_channels,
- 'audioCodec': audio_codec,
- 'videoDecision': video_decision,
- 'videoCodec': video_codec,
+ 'rating_key': self.get_xml_attr(session, 'ratingKey'),
+ 'audio_decision': audio_decision,
+ 'audio_channels': audio_channels,
+ 'audio_codec': audio_codec,
+ 'video_decision': video_decision,
+ 'video_codec': video_codec,
'height': height,
'width': width,
'duration': duration,
'progress': progress,
- 'progressPercent': str(helpers.get_percent(progress, duration)),
+ 'progress_percent': str(helpers.get_percent(progress, duration)),
'type': self.get_xml_attr(session, 'type'),
'indexes': use_indexes
}
+ elif self.get_xml_attr(session, 'type') == 'clip':
+ session_output = {'session_key': self.get_xml_attr(session, 'sessionKey'),
+ 'art': self.get_xml_attr(session, 'art'),
+ 'thumb': thumb,
+ 'parent_thumb': self.get_xml_attr(session, 'parentThumb'),
+ 'user': self.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
+ 'friendly_name': plex_watch.get_user_friendly_name(
+ self.get_xml_attr(session.getElementsByTagName('User')[0], 'title')),
+ 'player': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
+ 'state': self.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
+ 'grandparent_title': self.get_xml_attr(session, 'grandparentTitle'),
+ 'parent_title': self.get_xml_attr(session, 'parentTitle'),
+ 'title': self.get_xml_attr(session, 'title'),
+ 'rating_key': self.get_xml_attr(session, 'ratingKey'),
+ 'audio_decision': audio_decision,
+ 'audio_channels': audio_channels,
+ 'audio_codec': audio_codec,
+ 'video_decision': video_decision,
+ 'video_codec': video_codec,
+ 'height': height,
+ 'width': width,
+ 'duration': duration,
+ 'progress': progress,
+ 'progress_percent': str(helpers.get_percent(progress, duration)),
+ 'type': self.get_xml_attr(session, 'type'),
+ 'indexes': 0
+ }
else:
logger.warn(u"No known stream types found in session list.")
@@ -743,7 +793,7 @@ class PmsConnect(object):
if a.getElementsByTagName('Video'):
result_data = a.getElementsByTagName('Video')
for result in result_data:
- episode_output = {'ratingKey': self.get_xml_attr(result, 'ratingKey'),
+ episode_output = {'rating_key': self.get_xml_attr(result, 'ratingKey'),
'index': self.get_xml_attr(result, 'index'),
'title': self.get_xml_attr(result, 'title'),
'thumb': self.get_xml_attr(result, 'thumb')