Пример #1
0
    def __init__(self, api_key='', debug=False, lang='fr'):

        self.ADDON = addon()

        self.api_key = self.ADDON.getSetting('api_tmdb')
        self.debug = debug
        self.lang = lang
        self.poster = 'https://image.tmdb.org/t/p/%s' % self.ADDON.getSetting(
            'poster_tmdb')
        self.fanart = 'https://image.tmdb.org/t/p/%s' % self.ADDON.getSetting(
            'backdrop_tmdb')

        try:
            if not xbmcvfs.exists(self.CACHE):
                # f = open(self.cache, 'w')
                # f.close()
                self.db = sqlite.connect(self.REALCACHE)
                self.db.row_factory = sqlite.Row
                self.dbcur = self.db.cursor()
                self.__createdb()
                return
        except:
            VSlog('Error: Unable to write on %s' % self.REALCACHE)
            pass

        try:
            self.db = sqlite.connect(self.REALCACHE)
            self.db.row_factory = sqlite.Row
            self.dbcur = self.db.cursor()
        except:
            VSlog('Error: Unable to connect to %s' % self.REALCACHE)
            pass
Пример #2
0
def showIptvSite():
    oGui = cGui()

    # test f4mTester
    sPath = 'special://home/addons/plugin.video.f4mTester/default.py'

    if not xbmcvfs.exists(sPath) and not xbmc.getInfoLabel(
            'system.buildversion')[0:2] >= '19':
        oGui.addText(
            SITE_IDENTIFIER,
            "[COLOR red]plugin.video.f4mTester: L'addon n'est pas présent[/COLOR]"
        )

    liste = []
    #liste.append(['IptvGratuit', 'iptv_gratuit'])
    #liste.append(['IptvSource', 'iptv_source'])
    #liste.append(['Iptv4Sat', 'iptv_four_sat'])
    #liste.append(['Daily Iptv List', 'daily_iptv_list'])
    #liste.append(['Extinf', 'iptv'])
    liste.append(['ChannelStream', 'channelstream'])

    oOutputParameterHandler = cOutputParameterHandler()
    for sTitle, fName in liste:
        oOutputParameterHandler.addParameter('siteUrl', 'http://venom')
        oGui.addDir(fName, 'load', sTitle, 'tv.png', oOutputParameterHandler)

    oGui.setEndOfDirectory()
Пример #3
0
def parseWebM3U():  # Traite les m3u
    playlist = []
    # song = track(None, None, None, None)
    sFile = '/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/addons/resources/extra/radio.xspf'

    if not xbmcvfs.exists(sFile):
        return

    f = xbmcvfs.File(sFile, 'rb')
    sHtmlContent = f.read()
    f.close()

    line = re.compile(
        '<location>([^<]+).+?title>([^<]+).+?image>([^<]+).+?identifier>([^<]+)',
        re.MULTILINE | re.IGNORECASE | re.DOTALL).findall(sHtmlContent)

    if line:
        # total = len(line)

        for result in line:
            # sUrl2 = result[0].replace('\r', '')
            song = track(result[0], result[1], result[2], result[3])
            playlist.append(song)

    return playlist
Пример #4
0
    def __getFileNamesFromFolder(self, sFolder):
        aNameList = []
        folder, items = xbmcvfs.listdir(sFolder)
        items.sort()
        for sItemName in items:
            sFilePath = "/".join([sFolder, sItemName])
            sFilePath = sFilePath.replace('\\', '/')

            if (xbmcvfs.exists(sFilePath) == True):
                if (sFilePath.lower().endswith('py')):
                    sItemName = sItemName.replace('.py', '')
                    aNameList.append(sItemName)
        return aNameList
Пример #5
0
    def __getFileNamesFromFolder(self, sFolder):
        aNameList = []
        folder, items = xbmcvfs.listdir(sFolder)
        items.sort()
        for sItemName in items:

            if not sItemName.endswith(".py"):
                continue

            sFilePath = "/".join([sFolder, sItemName])

            # xbox hack
            sFilePath = sFilePath.replace('\\', '/')

            VSlog("Load Plugin %s" % sItemName)

            if (xbmcvfs.exists(sFilePath) == True):
                if (sFilePath.lower().endswith('py')):
                    sItemName = sItemName.replace('.py', '')
                    aNameList.append(sItemName)
        return aNameList
Пример #6
0
    def __init__(self):

        VSlog('DB engine for db : ' + sqlite.__name__)

        try:
            if not xbmcvfs.exists(self.DB):
                self.db = sqlite.connect(self.REALDB)
                self.db.row_factory = sqlite.Row
                self.dbcur = self.db.cursor()
                self._create_tables()
                return
        except:
            VSlog('Error: Unable to write to %s' % self.REALDB)
            pass

        try:
            self.db = sqlite.connect(self.REALDB)
            self.db.row_factory = sqlite.Row
            self.dbcur = self.db.cursor()
        except:
            VSlog('Error: Unable to access to %s' % self.REALDB)
            pass
Пример #7
0
    def __callRequest(self, jsonDecode=False):
        if self.__enableDNS:
            import socket
            self.save_getaddrinfo = socket.getaddrinfo
            socket.getaddrinfo = self.new_getaddrinfo

        if self.__aParamatersLine:
            sParameters = self.__aParamatersLine
        else:
            sParameters = self.__aParamaters

        if (self.__cType == cRequestHandler.REQUEST_TYPE_GET):
            if (len(sParameters) > 0):
                if (self.__sUrl.find('?') == -1):
                    self.__sUrl = self.__sUrl + '?' + str(sParameters)
                    sParameters = ''
                else:
                    self.__sUrl = self.__sUrl + '&' + str(sParameters)
                    sParameters = ''

        sContent = ''

        if self.BUG_SSL == True:
            self.verify = False

        if self.__cType == cRequestHandler.REQUEST_TYPE_GET:
            method = "GET"
        else:
            method = "POST"

        oResponse = None
        try:
            _request = Request(method,
                               self.__sUrl,
                               headers=self.__aHeaderEntries)
            if method in ['POST']:
                _request.data = sParameters

            if self.__Cookie:
                _request.cookies = self.__Cookie

            if self.json:
                _request.json = self.json

            prepped = _request.prepare()
            self.s.headers.update(self.__aHeaderEntries)

            oResponse = self.s.send(prepped,
                                    timeout=self.__timeout,
                                    allow_redirects=self.redirects,
                                    verify=self.verify)
            self.__sResponseHeader = oResponse.headers
            self.__sRealUrl = oResponse.url

            if jsonDecode == False:
                sContent = oResponse.content

                #Necessaire pour Python 3
                if isMatrix() and not 'youtube' in oResponse.url:
                    try:
                        sContent = sContent.decode('unicode-escape')
                    except:
                        try:
                            sContent = sContent.decode()
                        except:
                            pass
            else:
                sContent = oResponse.json()

        except ConnectionError as e:
            # Retry with DNS only if addon is present
            from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib import xbmcvfs
            if xbmcvfs.exists('special://home/addons/script.module.dnspython/'
                              ) and self.__enableDNS == False:
                self.__enableDNS = True
                return self.__callRequest()
            else:
                error_msg = addon().VSlang(30470)

        except RequestException as e:
            if 'CERTIFICATE_VERIFY_FAILED' in str(e) and self.BUG_SSL == False:
                self.BUG_SSL = True
                return self.__callRequest()
            elif 'getaddrinfo failed' in str(e) and self.__enableDNS == False:
                # Retry with DNS only if addon is present
                from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib import xbmcvfs
                if xbmcvfs.exists(
                        'special://home/addons/script.module.dnspython/'):
                    self.__enableDNS = True
                    return self.__callRequest()
                else:
                    error_msg = addon().VSlang(30470)
            else:
                error_msg = "%s (%s),%s" % (addon().VSlang(30205), e,
                                            self.__sUrl)

            dialog().VSerror(error_msg)
            sContent = ''

        if oResponse.status_code in [503, 403]:
            if not "Forbidden" in sContent:
                #Default
                CLOUDPROXY_ENDPOINT = 'http://localhost:8191/v1'
                try:
                    json_session = post(CLOUDPROXY_ENDPOINT,
                                        headers=self.__aHeaderEntries,
                                        data=dumps({'cmd': 'sessions.list'}))
                except:
                    dialog().VSerror("%s" % (
                        "Page protege par Cloudflare, veuillez executer  FlareSolverr."
                    ))

                #On regarde si une session existe deja.
                if json_session.json()['sessions']:
                    cloudproxy_session = json_session.json()['sessions'][0]
                else:
                    json_session = post(CLOUDPROXY_ENDPOINT,
                                        headers=self.__aHeaderEntries,
                                        data=dumps({'cmd': 'sessions.create'}))
                    response_session = loads(json_session.text)
                    cloudproxy_session = response_session['session']

                self.__aHeaderEntries[
                    'Content-Type'] = 'application/x-www-form-urlencoded' if (
                        method == 'post') else 'application/json'

                #Ont fait une requete.
                json_response = post(CLOUDPROXY_ENDPOINT,
                                     headers=self.__aHeaderEntries,
                                     data=dumps({
                                         'cmd':
                                         'request.%s' % method.lower(),
                                         'url':
                                         self.__sUrl,
                                         'session':
                                         cloudproxy_session,
                                         'postData':
                                         '%s' % urlEncode(sParameters) if
                                         (method.lower() == 'post') else ''
                                     }))

                http_code = json_response.status_code
                response = loads(json_response.text)
                if 'solution' in response:
                    if self.__sUrl != response['solution']['url']:
                        self.__sRealUrl = response['solution']['url']

                    sContent = response['solution']['response']

        if oResponse and not sContent:
            #Ignorer ces deux codes erreurs.
            ignoreStatus = [200, 302]
            if oResponse.status_code not in ignoreStatus:
                dialog().VSerror("%s (%d),%s" %
                                 (addon().VSlang(30205), oResponse.status_code,
                                  self.__sUrl))

        if sContent:
            if (self.__bRemoveNewLines == True):
                sContent = sContent.replace("\n", "")
                sContent = sContent.replace("\r\t", "")

            if (self.__bRemoveBreakLines == True):
                sContent = sContent.replace("&nbsp;", "")

        if self.__enableDNS:
            socket.getaddrinfo = self.save_getaddrinfo
            self.__enableDNS = False

        return sContent
Пример #8
0
    def __callRequest(self, jsonDecode=False):
        if self.__enableDNS:
            import socket
            self.save_getaddrinfo = socket.getaddrinfo
            socket.getaddrinfo = self.new_getaddrinfo

        if self.__aParamatersLine:
            sParameters = self.__aParamatersLine            
        else:
            sParameters = self.__aParamaters

        if (self.__cType == cRequestHandler.REQUEST_TYPE_GET):
            if (len(sParameters) > 0):
                if (self.__sUrl.find('?') == -1):
                    self.__sUrl = self.__sUrl + '?' + str(sParameters)
                    sParameters = ''
                else:
                    self.__sUrl = self.__sUrl + '&' + str(sParameters)
                    sParameters = ''

        sContent = ''

        if self.BUG_SSL == True:
            self.verify = False

        if self.__cType == cRequestHandler.REQUEST_TYPE_GET:
            method = "GET"
        else:
            method = "POST"

        try:
            _request = Request(method, self.__sUrl, headers=self.__aHeaderEntries)
            if method in ['POST', 'PATCH', 'PUT']:
                _request.data = sParameters

            if self.__Cookie:
                _request.cookies = self.__Cookie

            if self.json:
                _request.json = self.json

            prepped = _request.prepare()
            self.s.headers.update(self.__aHeaderEntries)

            oResponse = self.s.send(prepped, timeout=self.__timeout, allow_redirects=self.redirects, verify=self.verify)
            self.__sResponseHeader = oResponse.headers
            self.__sRealUrl = oResponse.url

            if jsonDecode==False:
                sContent = oResponse.content

                #Necessaire pour Python 3
                if isMatrix():
                    try:
                       sContent = sContent.decode('unicode-escape')
                    except:
                        try:
                            sContent = sContent.decode()
                        except:
                            pass
            else:
                sContent = oResponse.json()

        except RequestException  as e:
            if 'CERTIFICATE_VERIFY_FAILED' in str(e) and self.BUG_SSL == False:
                self.BUG_SSL = True
                return self.__callRequest()
            elif 'getaddrinfo failed' in str(e) and self.__enableDNS == False:
                # Retry with DNS only if addon is present
                from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib import xbmcvfs
                if xbmcvfs.exists('special://home/addons/script.module.dnspython/'):
                    self.__enableDNS = True
                    return self.__callRequest()
                else:
                    error_msg = addon().VSlang(30470)
            else:
                error_msg = "%s (%s),%s" % (addon().VSlang(30205), e.reason, self.__sUrl)

            dialog().VSerror(error_msg)
            sContent = ''

        if oResponse.status_code == 5013:

            # Protected by cloudFlare ?
            from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib import cloudflare
            if cloudflare.CheckIfActive(sContent):
                cookies = self.GetCookies()
                VSlog('Page protegee par cloudflare')
                CF = cloudflare.CloudflareBypass()
                sContent = CF.GetHtml(self.__sUrl, sContent, cookies, sParameters, oResponse.headers)
                self.__sRealUrl, self.__sResponseHeader = CF.GetReponseInfo()

        if not sContent:
            #Ignorer ces deux codes erreurs.
            ignoreStatus = [200,302]
            if oResponse.status_code not in ignoreStatus:
                dialog().VSerror("%s (%d),%s" % (addon().VSlang(30205), oResponse.status_code, self.__sUrl))

        if sContent:
            if (self.__bRemoveNewLines == True):
                sContent = sContent.replace("\n", "")
                sContent = sContent.replace("\r\t", "")

            if (self.__bRemoveBreakLines == True):
                sContent = sContent.replace("&nbsp;", "")

        if self.__enableDNS:
            socket.getaddrinfo = self.save_getaddrinfo
            self.__enableDNS = False

        return sContent