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
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()
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
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
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
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
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(" ", "") if self.__enableDNS: socket.getaddrinfo = self.save_getaddrinfo self.__enableDNS = False return sContent
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(" ", "") if self.__enableDNS: socket.getaddrinfo = self.save_getaddrinfo self.__enableDNS = False return sContent