|
| 1 | +""" |
| 2 | +##### Plex Media Server |
| 3 | +Connect to Plex Media Server and see current sessions details |
| 4 | +```ini |
| 5 | +[variable_name] |
| 6 | +platform = plex |
| 7 | +url = http://plex_host:plex_port |
| 8 | +token = plex_token |
| 9 | +value_template = {{ value_template }} |
| 10 | +``` |
| 11 | +> **Returns:** `value_template` as rendered string |
| 12 | +| Variable | Required | Description | Options | |
| 13 | +|-----------------|----------|-----------------------------------------------------------------|-------------------| |
| 14 | +| [variable_name] | Yes | Name for the data source. | [variable_name] | |
| 15 | +| platform | Yes | Name of the platform. | plex | |
| 16 | +| host | Yes | URL of Plex Media Server (include port, normally 32400) | url | |
| 17 | +| token | Yes | X-Plex-Token (See [here](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/) for how to find it.) | string | |
| 18 | +| value_template | Yes | Jinja template for how the returned data from API is displayed. | jinja template | |
| 19 | +<br /> |
| 20 | +###### **Available fields for value_template** |
| 21 | +* sessions |
| 22 | +* transcodes |
| 23 | +* libraries |
| 24 | +> **Example:** |
| 25 | +>```ini |
| 26 | +>[plex] |
| 27 | +>platform = plex |
| 28 | +>host = http://plex.example.com:32400 |
| 29 | +>token = abcde_fghi_jklmnopqr |
| 30 | +>value_template = Sessions: {{sessions}}<br />Transcodes: {{transcodes}} |
| 31 | +> |
| 32 | +>[Plex] |
| 33 | +>prefix = http:// |
| 34 | +>url = plex.example.com:32400 |
| 35 | +>icon = static/images/apps/plex.png |
| 36 | +>description = Plex data sources example |
| 37 | +>open_in = this_tab |
| 38 | +>data_sources = plex |
| 39 | +>``` |
| 40 | +""" |
| 41 | +import requests |
| 42 | +from flask import render_template_string |
| 43 | + |
| 44 | +json_header = {"Accept": "application/json"} |
| 45 | + |
| 46 | + |
| 47 | +class Plex(object): |
| 48 | + def __init__(self, url, token): |
| 49 | + self.url = url |
| 50 | + self.token = token |
| 51 | + |
| 52 | + def refresh(self): |
| 53 | + if self.token != None: |
| 54 | + sessions = requests.get( |
| 55 | + self.url + "/status/sessions?X-Plex-Token=" + self.token, |
| 56 | + headers=json_header, |
| 57 | + ).json() |
| 58 | + |
| 59 | + self.sessions = sessions["MediaContainer"]["size"] |
| 60 | + |
| 61 | + transcodes = requests.get( |
| 62 | + self.url + "/transcode/sessions?X-Plex-Token=" + self.token, |
| 63 | + headers=json_header, |
| 64 | + ).json() |
| 65 | + |
| 66 | + self.transcodes = transcodes["MediaContainer"]["size"] |
| 67 | + |
| 68 | + libraries = requests.get( |
| 69 | + self.url + "/library/sections?X-Plex-Token=" + self.token, |
| 70 | + headers=json_header, |
| 71 | + ).json() |
| 72 | + |
| 73 | + self.libraries = libraries["MediaContainer"]["size"] |
| 74 | + |
| 75 | + |
| 76 | +class Platform: |
| 77 | + def __init__(self, *args, **kwargs): |
| 78 | + # parse the user's options from the config entries |
| 79 | + for key, value in kwargs.items(): |
| 80 | + self.__dict__[key] = value |
| 81 | + |
| 82 | + if not hasattr(self, "token"): |
| 83 | + print( |
| 84 | + "Please add a token\nSee https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/ to find it." |
| 85 | + ) |
| 86 | + exit(1) |
| 87 | + else: |
| 88 | + self.plex = Plex(self.host, self.token) |
| 89 | + |
| 90 | + def process(self): |
| 91 | + self.plex.refresh() |
| 92 | + value_template = render_template_string( |
| 93 | + self.value_template, **self.plex.__dict__ |
| 94 | + ) |
| 95 | + return value_template |
0 commit comments