Merge pull request #268 from drwahl/plexstatus

plexstatus: initial commit
This commit is contained in:
enkore 2015-10-23 16:29:30 +02:00
commit 8bd6fb45e3

62
i3pystatus/plexstatus.py Normal file
View File

@ -0,0 +1,62 @@
import xml.etree.ElementTree as ET
from i3pystatus import IntervalModule
from urllib.request import urlopen
class Plexstatus(IntervalModule):
"""
Displays what is currently being streamed from your Plex Media Server.
"""
settings = (
("apikey", "Your Plex API authentication key "
"(https://support.plex.tv/hc/en-us/articles/204059436-Finding-your-"
"account-token-X-Plex-Token) ."),
("address", "Hostname or IP address of the Plex Media Server."),
("port", "Port which Plex Media Server is running on."),
("interval", "Update interval (in seconds)."),
("format_no_streams", "String that is shown if nothing is being "
"streamed."),
"format"
)
required = ("apikey", "address")
color = "#00FF00" # green
no_stream_color = "#FF0000" # red
port = 32400
interval = 120
format_no_streams = None
format = "{platform}: {title}"
def run(self):
PMS_URL = '%s%s%s%s' % ('http://', self.address, ':', self.port)
PMS_STATUS_URI = '/status/sessions/?X-Plex-Token='
PMS_STATUS_URL = PMS_URL + PMS_STATUS_URI + self.apikey
response = urlopen(PMS_STATUS_URL)
xml_response = response.read()
tree = ET.fromstring(xml_response)
cdict = {'title': '',
'platform': ''}
for vid in tree.iter('Video'):
try:
cdict['title'] = vid.attrib['title']
except AttributeError:
pass
for play in tree.iter('Player'):
try:
cdict['platform'] = play.attrib['platform']
except AttributeError:
pass
if not cdict['title'] or not cdict['platform']:
self.output = {} if not self.format_no_streams else {
"full_text": self.format_no_stream,
"color": self.no_stream_color
}
else:
self.output = {
"full_text": self.format.format(**cdict),
"color": self.color
}