def get_plex_access_token(plex_server: PServer, force_update: bool = False) -> Union[str, None]: """ Get the access token for a Plex server :param plex_server: plexapi.server.PlexServer to get access token from :type plex_server: plexapi.server.PlexServer :param force_update: ignore cached results, force an update :type force_update: bool, optional :return: Access token string or None :rtype: str | None """ if not force_update: return plex_server._token headers = { 'Accept': 'application/json', 'X-Plex-Product': 'dizqueTV-Python', 'X-Plex-Version': 'Plex OAuth', 'X-Plex-Client-Identifier': 'dizqueTV-Python', 'X-Plex-Model': 'Plex OAuth', 'X-Plex-Token': plex_server._token } response = requests.get(url="https://plex.tv/api/v2/resources?includeHttps=1", headers=headers) if response: json_data = response.json() for server in json_data: if server['name'] == plex_server.friendlyName: return server['accessToken'] return None
def get_plex_indirect_uri(plex_server: PServer, force_update: bool = False) -> Union[str, None]: """ Get the indirect URI (ex. http://192.168.1.1-xxxxxxxxxxxxxxxx.plex.direct) for a Plex server :param plex_server: plexapi.server.PlexServer to get URI from :type plex_server: plexapi.server.PlexServer :param force_update: ignore cached results, force an update :type force_update: bool, optional :return: URI string or None :rtype: str | None """ if _uris.get(plex_server.friendlyName) and not force_update: return _uris[plex_server.friendlyName] headers = { 'Accept': 'application/json', 'X-Plex-Product': 'dizqueTV-Python', 'X-Plex-Version': 'Plex OAuth', 'X-Plex-Client-Identifier': 'dizqueTV-Python', 'X-Plex-Model': 'Plex OAuth', 'X-Plex-Token': plex_server._token } response = requests.get(url="https://plex.tv/api/v2/resources?includeHttps=1", headers=headers) if response: json_data = response.json() for server in json_data: if server['name'] == plex_server.friendlyName: _uris[plex_server.friendlyName] = server['connections'][0]['uri'] return server['connections'][0]['uri'] return None
def _get(self, endpoint: str, params: dict = None, headers: dict = None, timeout: int = 2) -> Union[Response, None]: if not endpoint.startswith('/'): endpoint = f"/{endpoint}" url = f"{self.url}/api{endpoint}" return requests.get(url=url, params=params, headers=headers, timeout=timeout, log='info')
def get_ffmpeg_urls_raw(self, channel_number: int) -> str: """ Get raw FFMPEG URL list for channel :param channel_number: Number of channel to get playlist for :type channel_number: int :return: Raw text of list of FFMPEG URLs :rtype: str """ if channel_number not in self._dizque_instance.channel_numbers: raise Exception(f"Channel {channel_number} does not exist.") url = f"{self._dizque_instance.url}/playlist?channel={channel_number}" response = requests.get(url=url, log='info') if not response: return "" return response.text