示例#1
0
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
示例#2
0
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
示例#3
0
 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')
示例#4
0
    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