Esempio n. 1
0
def decoder(data, fn):
    data = base64.b64decode(data)

    secretKey = {}
    url = ''
    temp = ''
    tempData = ''

    for i in xrange(len(data)):
        if isMatrix():
            tempData += ("%" + format(data[i], '02x'))
        else:
            tempData += ("%" + format(ord(data[i]), '02x'))

    data = Unquote(tempData)

    x = 0
    while x < 256:
        secretKey[x] = x
        x += 1

    y = 0
    x = 0
    while x < 256:
        y = (y + secretKey[x] + ord(fn[x % len(fn)])) % 256

        temp = secretKey[x]
        secretKey[x] = secretKey[y]
        secretKey[y] = temp
        x += 1

    x = 0
    y = 0
    i = 0

    if not isMatrix():
        data = data.decode('utf-8')

    while i < len(data):

        x = (x + 1) % 256
        y = (y + secretKey[x]) % 256

        temp = secretKey[x]
        secretKey[x] = secretKey[y]
        secretKey[y] = temp

        url += (chr(ord(data[i]) ^ secretKey[(secretKey[x] + secretKey[y]) % 256]))

        i += 1

    return url
Esempio n. 2
0
def showGenre():
    oGui = cGui()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.addHeaderEntry('User-Agent', UA)
    sHtmlContent = oRequestHandler.request(jsonDecode=True)

    sID = 1
    if sHtmlContent:
        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in sHtmlContent["categories"]:
            sTitle = aEntry["name"]
            if not isMatrix():
                sTitle = sTitle.encode('utf8')

            oOutputParameterHandler.addParameter('siteUrl', sUrl)
            oOutputParameterHandler.addParameter('sID', int(sID))
            sID = sID + 1

            oGui.addDir(SITE_IDENTIFIER, 'showVOD', sTitle, 'genres.png',
                        oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 3
0
def showTV():
    oGui = cGui()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')

    clientID, deviceID, sid = getData()

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.addHeaderEntry('User-Agent', UA)
    sHtmlContent = oRequestHandler.request(jsonDecode=True)

    if sHtmlContent:
        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in sHtmlContent:
            sThumb = aEntry["featuredImage"]["path"]
            sTitle = aEntry["name"]
            if not isMatrix():
                sTitle = sTitle.encode('utf8')

            sUrl2 = "https://boot.pluto.tv/v4/start?deviceId=" + deviceID
            sUrl2 += "&deviceMake=Firefox&deviceType=web&deviceVersion=87.0&deviceModel=web&DNT=0&appName=web"
            sUrl2 += "&appVersion=5.14.0-0f5ca04c21649b8c8aad4e56266a23b96d73b83a&serverSideAds=true&channelSlug="
            sUrl2 += aEntry[
                "slug"] + "&episodeSlugs=&clientID=" + clientID + "&clientModelNumber=na"

            oOutputParameterHandler.addParameter('siteUrl', sUrl2)
            oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
            oOutputParameterHandler.addParameter('sThumb', sThumb)
            oGui.addMisc(SITE_IDENTIFIER, 'showHosters', sTitle, 'tv.png',
                         sThumb, '', oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 4
0
    def titleWatched(self, title):
        if not isMatrix():
            if isinstance(title, str):
                # Must be encoded in UTF-8
                try:
                    title = title.decode('utf8')
                except AttributeError:
                    pass

            title = unicodedata.normalize('NFKD',
                                          title).encode('ascii', 'ignore')

        # cherche la saison et episode puis les balises [color]titre[/color]
        # title, saison = self.getSaisonTitre(title)
        # title, episode = self.getEpisodeTitre(title)
        # supprimer les balises
        title = re.sub(r'\[.*\]|\(.*\)', r'', str(title))
        title = title.replace('VF', '').replace('VOSTFR', '').replace('FR', '')
        # title = re.sub(r'[0-9]+?', r'', str(title))
        title = title.replace(
            '-', ' '
        )  # on garde un espace pour que Orient-express ne devienne pas Orientexpress pour la recherche tmdb
        title = title.replace('Saison', '').replace('saison', '').replace(
            'Season', '').replace('Episode', '').replace('episode', '')
        title = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), ' ',
                       title.lower())
        # title = QuotePlus(title)
        # title = title.decode('string-escape')
        return title
Esempio n. 5
0
def sDecode(r, o):
    t = []
    e = []
    n = 0
    a = ""
    for f in range(256):
        e.append(f)

    for f in range(256):
        n = (n + e[f] + ord(r[f % len(r)])) % 256
        t = e[f]
        e[f] = e[n]
        e[n] = t

    f = 0
    n = 0
    for h in range(len(o)):
        f = f + 1
        n = (n + e[f % 256]) % 256
        if not f in e:
            f = 0
        t = e[f]
        e[f] = e[n]
        e[n] = t

        if isMatrix():
            a += chr(o[h] ^ e[(e[f] + e[n]) % 256])
        else:
            a += chr(ord(o[h]) ^ e[(e[f] + e[n]) % 256])
    return a
Esempio n. 6
0
def showEpisode():
    oGui = cGui()
    oParser = cParser()
    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    sThumb = oInputParameterHandler.getValue('sThumb')

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.addHeaderEntry('User-Agent', UA)
    oRequestHandler.addHeaderEntry('Referer', RandomReferer())
    sHtmlContent = oRequestHandler.request()

    try:
        sDesc = oParser.parse(
            sHtmlContent,
            '</headline15>.+?<font style=.+?>([^"]+)</font')[1][0]
    except:
        sDesc = ""

    if 'HTML/JavaScript Encoder' in sHtmlContent:
        sHtmlContent = ICDecode(sHtmlContent)

    sPattern = '<headline11>(.+?)</headline11></a>|href="*([^"]+)"* title="([^"]+)"[^>]+style="*text-decoration:none;"'
    aResult = oParser.parse(sHtmlContent, sPattern)

    if (aResult[0] == True):
        isPython3 = isMatrix()

        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in aResult[1]:

            if not isPython3:
                sTitle = unicode(aEntry[2], 'iso-8859-1')
                sTitle = unicodedata.normalize('NFD', sTitle).encode(
                    'ascii', 'ignore')
                sTitle = sTitle.encode('ascii',
                                       'ignore').decode('ascii').replace(
                                           ' VF', '').replace(' VOSTFR', '')
            else:
                sTitle = aEntry[2]

            sTitle = cUtil().unescape(sTitle)

            sUrl2 = cUtil().unescape(aEntry[1])
            if not sUrl2.startswith('http'):
                sUrl2 = URL_MAIN + sUrl2

            if aEntry[0]:
                oGui.addText(SITE_IDENTIFIER,
                             '[COLOR red]' + aEntry[0] + '[/COLOR]')

            else:
                oOutputParameterHandler.addParameter('siteUrl', sUrl2)
                oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
                oOutputParameterHandler.addParameter('sThumb', sThumb)
                oOutputParameterHandler.addParameter('sDesc', sDesc)
                oGui.addEpisode(SITE_IDENTIFIER, 'showHosters', sTitle, '',
                                sThumb, sDesc, oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 7
0
    def notifyUpnext(self, data):

        try:
            next_data = json.dumps(data)
            # if not isinstance(next_data, bytes):
            next_data = next_data.encode('utf-8')
            data = b64encode(next_data)
            if isMatrix():
                data = data.decode('ascii')

            jsonrpc_request = {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "JSONRPC.NotifyAll",
                "params": {
                    "sender": "%s.SIGNAL" % 'plugin.video.vStream',
                    "message": 'upnext_data',
                    "data": [data],
                }
            }

            request = json.dumps(jsonrpc_request)
            response = xbmc.executeJSONRPC(request)
            response = json.loads(response)
            return response['result'] == 'OK'

        except Exception as e:
            import traceback
            traceback.print_exc()
            return False
Esempio n. 8
0
    def str_conv(self, data):
        # Pas d'autre solution pour le moment que de faire comme ca.
        if not isMatrix():
            if isinstance(data, str):
                # Must be encoded in UTF-8
                try:
                    data = data.decode('utf8')
                except AttributeError:
                    pass

            data = unicodedata.normalize('NFKD',
                                         data).encode('ascii', 'ignore')

        # cherche la saison et episode puis les balises [color]titre[/color]
        # data, saison = self.getSaisonTitre(data)
        # data, episode = self.getEpisodeTitre(data)
        # supprimer les balises
        data = re.sub(r'\[.*\]|\(.*\)', r'', str(data))
        data = data.replace('VF', '').replace('VOSTFR', '').replace('FR', '')
        # data = re.sub(r'[0-9]+?', r'', str(data))
        data = data.replace(
            '-', ' '
        )  # on garde un espace pour que Orient-express ne devienne pas Orientexpress pour la recherche tmdb
        data = data.replace('Saison', '').replace('saison', '').replace(
            'Season', '').replace('Episode', '').replace('episode', '')
        data = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), ' ',
                      data.lower())
        # data = QuotePlus(data)

        # data = data.decode('string-escape')
        return data
Esempio n. 9
0
def decodex(x):
    from itertools import chain
    import base64

    x = x.replace('https://www.youtube.com/embed/', '')

    missing_padding = len(x) % 4
    if missing_padding:
        x += '=' * (4 - missing_padding)

    VSlog(x)

    try:
        e = base64.b64decode(x)
        t = ''
        r = "ETEfazefzeaZa13MnZEe"
        a = 0

        px = chain(e)
        for y in list(px):
            if isMatrix():
                t += chr(int(175 ^ y) - ord(r[a]))
            else:
                t += chr(int(175 ^ ord(y[0])) - ord(r[a]))
            a = 0 if a > len(r) - 2 else a + 1
        return t
    except:
        return ''

    return ''
Esempio n. 10
0
def loadTypelist(typemovie, typelist):
    # typelist genre ou year
    # <select name="genre"
    # <select name="year"
    sUrl = URL_MAIN + 'series-0-1/' + typemovie

    oRequestHandler = cRequestHandler(sUrl)
    sHtmlContent = oRequestHandler.request()
    oParser = cParser()

    sPattern = '<select name="([^"]+)|<option value=\'([^\']+).*?>([^<]+)'
    aResult = oParser.parse(sHtmlContent, sPattern)

    list_typelist = {}

    if (aResult[0] == True):
        for aEntry in aResult[1]:
            if aEntry[0]:
                if aEntry[0] == typelist:
                    bfind = True
                else:
                    bfind = False

            if bfind and aEntry[1]:
                if not isMatrix():
                    title = aEntry[2].decode('iso-8859-1').encode('utf8')
                else:
                    title = aEntry[2]
                title = title.replace('e', 'E').strip()
                list_typelist[title] = aEntry[1]

    list_typelist = sorted(list_typelist.items(),
                           key=lambda typeList: typeList[0])

    return list_typelist
Esempio n. 11
0
def showVOD():
    oGui = cGui()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    sID = oInputParameterHandler.getValue('sID')

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.addHeaderEntry('User-Agent', UA)
    sHtmlContent = oRequestHandler.request(jsonDecode=True)

    if sHtmlContent:
        items = sHtmlContent["categories"][int(sID) - 1]["items"]
        total = len(items)
        progress_ = progress().VScreate(SITE_NAME)

        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in items:
            progress_.VSupdate(progress_, total)
            if progress_.iscanceled():
                break

            sThumb = aEntry["featuredImage"]["path"]
            sTitle = aEntry["name"]
            # /!\ ces replace sont différent
            sTitle = sTitle.replace(' : Saison',
                                    ' Saison').replace(' : Saison', ' Saison')
            ids = aEntry["_id"]
            sDesc = aEntry["description"]
            if not isMatrix():
                sTitle = sTitle.encode('utf8')
                sDesc = sDesc.encode('utf8')

            oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
            oOutputParameterHandler.addParameter('sThumb', sThumb)
            oOutputParameterHandler.addParameter('sDesc', sDesc)

            VOD_SERIES = "https://service-vod.clusters.pluto.tv/v3/vod/series/"
            if aEntry["type"] == "series":
                sUrl = VOD_SERIES + ids + "/seasons?includeItems=true&deviceType=web"
                oOutputParameterHandler.addParameter('siteUrl', sUrl)
                oGui.addTV(SITE_IDENTIFIER, 'showSerieSxE', sTitle, '', sThumb,
                           sDesc, oOutputParameterHandler)
            elif aEntry["type"] == "Anime":
                sUrl = VOD_SERIES + ids + "/seasons?includeItems=true&deviceType=web"
                oOutputParameterHandler.addParameter('siteUrl', sUrl)
                oGui.addAnime(SITE_IDENTIFIER, 'showSerieSxE', sTitle, '',
                              sThumb, sDesc, oOutputParameterHandler)
            else:
                siteUrl = "https://service-stitcher.clusters.pluto.tv/stitch/hls/episode/" + ids + "/master.m3u8"
                oOutputParameterHandler.addParameter('siteUrl', siteUrl)
                oGui.addMovie(SITE_IDENTIFIER, 'seriesHosters', sTitle, '',
                              sThumb, sDesc, oOutputParameterHandler)

        progress_.VSclose(progress_)

    oGui.setEndOfDirectory()
Esempio n. 12
0
    def do_GET(self):
        p = urlparse(self.path)
        q = dict(parse_qsl(p.query))
        url = q['u']

        if '?msKey=' in url:  # Remove the PNG header
            res = requests.get(url).content[8:]
        else:  # Redirect play list to proxy
            res = requests.get(url).content
            if isMatrix(): res = res.decode()
            res = res.replace('http', 'http://127.0.0.1:2424?u=http')
            if isMatrix(): res = res.encode()
        ret = res
        self.send_response_only(200)
        self.send_header('Content-Length', len(ret))
        self.send_header('Content-Type', 'application/vnd.apple.mpegurl')
        self.end_headers()
        self.wfile.write(ret)
def showEpisodes():
    oGui = cGui()
    oParser = cParser()
    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
    sThumb = oInputParameterHandler.getValue('sThumb')
    sDesc = oInputParameterHandler.getValue('sDesc')

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.disableSSL()
    sHtmlContent = oRequestHandler.request()

    # On recupere l'id de l'anime dans l'url
    serieID = re.search('fiche-.+?-(\d+)-.+?.html', sUrl).group(1)
    sPattern = 'class="(?:download cell_impaire|download)" id="([^"]+)".+?(\d+).+?class="cell".+?>([^<]+)</td'

    aResult = oParser.parse(sHtmlContent, sPattern)

    if (aResult[0] == False):
        oGui.addText(SITE_IDENTIFIER)

    if (aResult[0] == True):
        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in sorted(aResult[1], key=lambda aResult: aResult[1]):
            sQual = aEntry[2]

            if isMatrix():
                sQual = sQual.encode('latin-1').decode()

            # Changemement de formats ...x... -> ....P
            if '1920×' in sQual or '1440×' in sQual or '1904×' in sQual:
                sQual = re.sub('(\d+×\d+)px', '[1080P]', sQual)
            elif '1728×' in sQual:
                sQual = re.sub('(\d+×\d+)px', '[800P]', sQual)
            elif '1280×' in sQual:
                # VSlog(sQual)
                sQual = re.sub('(\d+×\d+)px', '[720P]', sQual)
            elif '1024×' in sQual:
                sQual = re.sub('(\d+×\d+)px', '[600P]', sQual)
            elif '480×' in sQual:
                sQual = re.sub('(\d+×\d+)px', '[360P]', sQual)
            else:
                sQual = re.sub('(\d+×\d+)px', '[480P]', sQual)

            sTitle = 'E' + aEntry[1] + ' ' + sMovieTitle + ' ' + sQual
            idEpisode = aEntry[0]

            oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
            oOutputParameterHandler.addParameter('siteUrl', sUrl)
            oOutputParameterHandler.addParameter('sThumb', sThumb)
            oOutputParameterHandler.addParameter('serieID', serieID)
            oOutputParameterHandler.addParameter('idEpisode', idEpisode)
            oGui.addEpisode(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 14
0
def showMovies():
    oGui = cGui()
    oParser = cParser()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    sFiltre = oInputParameterHandler.getValue('sFiltre')
    bAdulte = oInputParameterHandler.getValue('bAdulte')

    oRequestHandler = cRequestHandler(sUrl)
    sHtmlContent = oRequestHandler.request()
    if isMatrix():
        sHtmlContent = sHtmlContent.replace('î', 'î').replace('é', 'é')

    sHtmlContent = oParser.abParse(sHtmlContent, sFiltre,
                                   '<!-- Type Chaîne -->')

    sPattern = 'location.href = \'\.(.+?)\'.+?src=\'(.+?)\'.+?<div align="center">(.+?)</div>'

    aResult = oParser.parse(sHtmlContent, sPattern)

    try:
        EPG = cePg().get_epg('', 'direct')
    except:
        EPG = ""

    if (aResult[0] == True):
        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in aResult[1]:

            # Trie des chaines adultes
            if "+18" in str(aEntry[2]):
                if not bAdulte:
                    continue
            elif bAdulte:
                continue

            sTitle = aEntry[2]
            if "<" in sTitle:
                sTitle = sTitle.split('<')[0]

            if 'Canal + Série' in sTitle:
                sTitle = 'Canal + Séries'

            sUrl2 = URL_MAIN + aEntry[0]
            sThumb = URL_MAIN + '/' + aEntry[1]
            sDesc = getEPG(EPG, sTitle)

            oOutputParameterHandler.addParameter('siteUrl', sUrl2)
            oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
            oOutputParameterHandler.addParameter('sThumb', sThumb)

            oGui.addMisc(SITE_IDENTIFIER, 'showHoster', sTitle, sThumb, sThumb,
                         sDesc, oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 15
0
 def setDescription(self, sDescription):
     #Py3
     if isMatrix():
         try:
             self.__sDescription = str(sDescription.encode('latin-1'),
                                       'utf-8')
         except:
             pass
     else:
         self.__sDescription = sDescription
Esempio n. 16
0
    def getSerieTitre(self, sTitle):
        serieTitle = re.sub(r'\[.*\]|\(.*\)', r'', sTitle)
        serieTitle = re.sub('[- –]+$', '', serieTitle)

        if '|' in serieTitle:
            serieTitle = serieTitle[:serieTitle.index('|')]

        # on repasse en utf-8
        if not isMatrix():
            return serieTitle.encode('utf-8')
        return serieTitle
Esempio n. 17
0
 def setDescription(self, sDescription):
     #Py3
     if isMatrix():
         try:
             if 'Ã' in sDescription or '\\xc' in sDescription:
                 self.__sDescription = str(sDescription.encode('latin-1'),'utf-8')
             else:
                 self.__sDescription = sDescription
         except:
             self.__sDescription = sDescription
     else:
         self.__sDescription = sDescription
Esempio n. 18
0
    def do_GET(self):
        url = self.parseUrl()

        res = requests.get(url, headers=ProxyHTTPRequestHandler.headers)

        if '?msKey=' in url:
            ret = res.content[8:]
        else:
            if isMatrix(): res = res.content.decode()
            res = res.replace('http', 'http://127.0.0.1:2424?u=http')

            if res.endswith("=="):
                ret = base64.b64decode(res)
            else:
                if isMatrix(): ret = res.encode()

        self.send_response_only(200)
        self.send_header('Content-Length', len(ret))
        self.send_header('Content-Type', 'application/vnd.apple.mpegurl')
        self.end_headers()
        self.wfile.write(ret)
Esempio n. 19
0
def showVOD():
    oGui = cGui()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')
    sID = oInputParameterHandler.getValue('sID')

    oRequestHandler = cRequestHandler(sUrl)
    oRequestHandler.addHeaderEntry('User-Agent', UA)
    sHtmlContent = oRequestHandler.request(jsonDecode=True)

    if sHtmlContent:
        items = sHtmlContent["categories"][int(sID) - 1]["items"]
        total = len(items)
        progress_ = progress().VScreate(SITE_NAME)

        oOutputParameterHandler = cOutputParameterHandler()
        for aEntry in items:
            progress_.VSupdate(progress_, total)
            if progress_.iscanceled():
                break

            sThumb = aEntry["featuredImage"]["path"]
            sTitle = aEntry["name"]
            ids = aEntry["_id"]
            sDesc = aEntry["description"]
            if not isMatrix():
                sTitle = sTitle.encode('utf8')
                sDesc = sDesc.encode('utf8')

            oOutputParameterHandler.addParameter('sID', ids)
            oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
            oOutputParameterHandler.addParameter('sThumb', sThumb)
            oOutputParameterHandler.addParameter('sDesc', sDesc)

            if aEntry["type"] == "series":
                oGui.addTV(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle,
                           '', sThumb, sDesc, oOutputParameterHandler)
            elif aEntry["type"] == "Anime":
                oGui.addAnime(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes',
                              sTitle, '', sThumb, sDesc,
                              oOutputParameterHandler)
            else:
                oGui.addMovie(SITE_IDENTIFIER, 'seriesHosters', sTitle, '',
                              sThumb, sDesc, oOutputParameterHandler)

        progress_.VSclose(progress_)

    oGui.setEndOfDirectory()
Esempio n. 20
0
    def _clean_title(self, title):
        # vire accent
        try:
            title = unicode(title, 'utf-8')
            title = unicodedata.normalize('NFD', title).encode(
                'ascii', 'ignore').decode('unicode_escape')
            if not isMatrix():
                title = title.encode('utf-8')  # on repasse en utf-8
        except Exception as e:
            pass

        # Vire tous les caracteres non alphabetiques
        title = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), '',
                       title.lower())
        return title
Esempio n. 21
0
    def __getMediaLinkForGuest(self):

        api_call = ''
        url = self.__sUrl

        oRequest = cRequestHandler(url)
        oRequest.addHeaderEntry('User-Agent', UA)
        oRequest.addHeaderEntry(
            'Accept',
            'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
        oRequest.addHeaderEntry('Accept-Language',
                                'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
        sHtmlContent = oRequest.request()

        oParser = cParser()
        sPattern = '<script type="text/javascript" src="(.+?)"'
        aResult = oParser.parse(sHtmlContent, sPattern)[1][1]

        oRequest = cRequestHandler(aResult)
        oRequest.addHeaderEntry('User-Agent', UA)
        oRequest.addHeaderEntry(
            'Accept',
            'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
        oRequest.addHeaderEntry('Accept-Language',
                                'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
        sHtmlContent = oRequest.request()

        sPattern = '(?:parseJSON|atob).+?ey(.+?)"'
        code = oParser.parse(sHtmlContent, sPattern)

        for i in code[1]:
            try:
                if isMatrix():
                    code = base64.b64decode("ey" + i).decode('ascii')
                else:
                    code = base64.b64decode("ey" + i)
                break
            except:
                pass

        api_call = json.loads(code)['url']

        if (api_call):
            return True, api_call + '|' + urlEncode(headers)

        return False, False
Esempio n. 22
0
def __randy_boundary(length=10, reshuffle=False):
    import string
    import random

    if isMatrix():
        character_string = string.ascii_letters + string.digits
    else:
        character_string = string.letters + string.digits

    boundary_string = []
    for i in range(0, length):
        rand_index = random.randint(0, len(character_string) - 1)
        boundary_string.append(character_string[rand_index])
    if reshuffle:
        random.shuffle(boundary_string)
    else:
        pass
    return ''.join(boundary_string)
Esempio n. 23
0
    def CleanName(self, name):
        if not isMatrix():
            # vire accent et '\'
            try:
                name = unicode(
                    name,
                    'utf-8')  # converti en unicode pour aider aux convertions
            except:
                pass

            try:
                name = unicodedata.normalize('NFD', name).encode(
                    'ascii', 'ignore').decode('unicode_escape')
                name = name.encode('utf-8')  # on repasse en utf-8
            except TypeError:
                # name = unicodedata.normalize('NFKD', name.decode("utf-8")).encode('ASCII', 'ignore')
                pass

        # on cherche l'annee
        annee = ''
        m = re.search('(\([0-9]{4}\))', name)
        if m:
            annee = str(m.group(0))
            name = name.replace(annee, '')

        # vire tag
        name = re.sub('[\(\[].+?[\)\]]', '', name)
        # les apostrophes remplacer par des espaces
        name = name.replace("'", " ")
        # vire caractere special
        # name = re.sub('[^a-zA-Z0-9 ]', '', name)
        name = re.sub('[^a-zA-Z0-9 : -]', '', name)
        # tout en minuscule
        name = name.lower()
        # vire espace debut et fin
        name = name.strip()
        # vire espace double au milieu
        name = re.sub(' +', ' ', name)

        # on remet l'annee
        if annee:
            name = name + ' ' + annee

        return name
Esempio n. 24
0
    def str_conv(self, data):
        if not isMatrix():
            if isinstance(data, str):
                # Must be encoded in UTF-8
                try:
                    data = data.decode('utf8')
                except AttributeError:
                    pass
            import unicodedata
            data = unicodedata.normalize('NFKD', data).encode('ascii', 'ignore')
            
            try:
                data = data.decode('string-escape')  # ATTENTION: provoque des bugs pour les chemins a cause du caractere '/'
            except:
                pass

        else:
            data = data.encode().decode()

        return data
Esempio n. 25
0
    def setTitle(self, sTitle):
        #Convertie les bytes en strs pour le replace.
        self.__sCleanTitle = sTitle.replace('[]', '').replace('()', '').strip()

        if isMatrix():
            #Python 3 decode sTitle
            try:
                sTitle = str(sTitle.encode('latin-1'), 'utf-8')
            except:
                pass
        else:
            try:
                sTitle = sTitle.strip().decode('utf-8')
            except:
                pass

        if not sTitle.startswith('[COLOR'):
            self.__sTitle = self.TraiteTitre(sTitle)
        else:
            self.__sTitle = sTitle
Esempio n. 26
0
    def __getMediaLinkForGuest(self):
        api_call = False
        oParser = cParser()
        sPattern = 'return decodeURIComponent\(escape\(r\)\)}\("([^,]+)",([^,]+),"([^,]+)",([^,]+),([^,]+),([^,\))]+)\)'

        oRequest = cRequestHandler(self.__sUrl)
        oRequest.addHeaderEntry('Cookie', 'popads2=opened')
        sHtmlContent = oRequest.request()
        
        aResult = oParser.parse(sHtmlContent, sPattern)
        
        #Get decode page
        #oRequest = cRequestHandler("https://upvideo.to/assets/js/tabber.js")
        #oRequest.addHeaderEntry('Referer', self.__sUrl)
        #sHtmlContent2 = oRequest.request()
        #aResult2 = oParser.parse(sHtmlContent2, sPattern)

        #if (aResult2[0] == True):
        #    j = aResult2[1][0]
        #    decoder = hunter(j[0],int(j[1]),j[2],int(j[3]),int(j[4]),int(j[5]))
        #    VSlog("Decoder ok")
            
        if (aResult[0] == True):
            l = aResult[1]
            for j in l:
                data = hunter(j[0],int(j[1]),j[2],int(j[3]),int(j[4]),int(j[5]))
                if "fcbbbdddebad" in data:                    
                    r = re.search('var fcbbbdddebad *= *"([^"]+)" *;', data)
                    if not r:
                        VSlog('er2')
                    v2 = r.group(1).split('aHR0')[1].split('YTk0NT')[0]

                    if isMatrix():
                        api_call = "htt" + (base64.b64decode(v2).decode())
                    else:
                        api_call = "htt" + base64.b64decode(v2)

        if (api_call):
            return True, api_call

        return False, False
Esempio n. 27
0
def showGenreMovie():
    oGui = cGui()
    grab = cTMDb()

    oInputParameterHandler = cInputParameterHandler()
    sUrl = oInputParameterHandler.getValue('siteUrl')

    result = grab.getUrl(sUrl)
    total = len(result)
    if (total > 0):
        oOutputParameterHandler = cOutputParameterHandler()
        for i in result['genres']:
            sId, sTitle = i['id'], i['name']

            if not isMatrix():
                sTitle = sTitle.encode("utf-8")
            sUrl = 'genre/' + str(sId) + '/movies'
            oOutputParameterHandler.addParameter('siteUrl', sUrl)
            oGui.addDir(SITE_IDENTIFIER, 'showMovies', str(sTitle), 'genres.png', oOutputParameterHandler)

    oGui.setEndOfDirectory()
Esempio n. 28
0
    def setTitle(self, sTitle):
        # Nom en clair sans les langues, qualités, et autres décorations
        self.__sCleanTitle = re.sub('\[.*\]|\(.*\)','', sTitle)
        if not self.__sCleanTitle:
            self.__sCleanTitle = re.sub('\[.+?\]|\(.+?\)','', sTitle)

        if isMatrix():
            #Python 3 decode sTitle
            try:
                sTitle = str(sTitle.encode('latin-1'),'utf-8')
            except:
                pass
        else:
            try:
                sTitle = str(sTitle.strip().decode('utf-8'))
            except:
                pass

        if not sTitle.startswith('[COLOR'):
            self.__sTitle = self.TraiteTitre(sTitle)
        else:
            self.__sTitle = sTitle
Esempio n. 29
0
    def new_getaddrinfo(self, *args):
        try:
            import sys
            import dns.resolver

            if isMatrix():
                path = VSPath(
                    'special://home/addons/script.module.dnspython/lib/')
            else:
                path = VSPath(
                    'special://home/addons/script.module.dnspython/lib/'
                ).decode('utf-8')

            if path not in sys.path:
                sys.path.append(path)
            host = args[0]
            port = args[1]
            # Keep the domain only: http://example.com/foo/bar => example.com
            if "//" in host:
                host = host[host.find("//"):]
            if "/" in host:
                host = host[:host.find("/")]
            resolver = dns.resolver.Resolver(configure=False)
            # Résolveurs DNS ouverts: https://www.fdn.fr/actions/dns/
            resolver.nameservers = [
                '80.67.169.12', '2001:910:800::12', '80.67.169.40',
                '2001:910:800::40'
            ]
            answer = resolver.query(host, 'a')
            host_found = str(answer[0])
            VSlog("new_getaddrinfo found host %s" % host_found)
            # Keep same return schema as socket.getaddrinfo (family, type, proto, canonname, sockaddr)
            return [(2, 1, 0, '', (host_found, port)),
                    (2, 1, 0, '', (host_found, port))]
        except Exception as e:
            VSlog("new_getaddrinfo ERROR: {0}".format(e))
            return self.save_getaddrinfo(*args)
Esempio n. 30
0
    def getFav(self):
        oGui = cGui()
        oInputParameterHandler = cInputParameterHandler()

        row = cDb().get_bookmark()

        if (oInputParameterHandler.exist('sCat')):
            sCat = oInputParameterHandler.getValue('sCat')

            # Série, Animes, Saison et Episodes sont visibles dans les marques-page "Séries"
            catList = ('2', '3', '4', '8')
            if sCat in catList:
                sCat = 2
                cGui.CONTENT = 'tvshows'
            else:
                catList = ('1', '7')  # films, saga
                cGui.CONTENT = 'movies'
                if sCat in catList:
                    sCat = 1
                else:
                    catList = sCat
                    cGui.CONTENT = 'videos'
            gen = (x for x in row if x['cat'] in catList)
        else:
            oGui.setEndOfDirectory()
            return

        for data in gen:

            try:
                title = data['title'].encode('utf-8')
            except:
                title = data['title']

            try:
                thumbnail = data['icon'].encode('utf-8')
            except:
                thumbnail = data['icon']

            try:
                try:
                    siteurl = data['siteurl'].encode('utf-8')
                except:
                    siteurl = data['siteurl']

                if isMatrix():
                    siteurl = UnquotePlus(siteurl.decode('utf-8'))
                    title = str(title, 'utf-8')
                else:
                    siteurl = UnquotePlus(siteurl)

                site = data['site']
                function = data['fav']
                cat = data['cat']
                fanart = data['fanart']

                if thumbnail == '':
                    thumbnail = 'False'

                oOutputParameterHandler = cOutputParameterHandler()
                oOutputParameterHandler.addParameter('siteUrl', siteurl)
                oOutputParameterHandler.addParameter('sMovieTitle', title)
                oOutputParameterHandler.addParameter('searchtext', title)
                oOutputParameterHandler.addParameter('sThumbnail', thumbnail)
                # Dans ajouter source c'est bien sThumb donc...
                oOutputParameterHandler.addParameter('sThumb', thumbnail)

                if (function == 'play'):
                    oHoster = cHosterGui().checkHoster(siteurl)
                    oOutputParameterHandler.addParameter(
                        'sHosterIdentifier', oHoster.getPluginIdentifier())
                    oOutputParameterHandler.addParameter(
                        'sFileName', oHoster.getFileName())
                    oOutputParameterHandler.addParameter('sMediaUrl', siteurl)

                oGuiElement = cGuiElement()
                oGuiElement.setSiteName(site)
                oGuiElement.setFunction(function)
                oGuiElement.setTitle(title)
                oGuiElement.setFileName(title)
                oGuiElement.setIcon("mark.png")
                if (cat == '1'):  # Films
                    oGuiElement.setMeta(1)
                    oGuiElement.setCat(1)
                elif (cat == '2'):  # Séries
                    oGuiElement.setMeta(2)
                    oGuiElement.setCat(2)
                elif (cat == '3'):  # Anime
                    oGuiElement.setMeta(4)
                    oGuiElement.setCat(3)
                elif (cat == '4'):  # Saisons
                    oGuiElement.setMeta(5)
                    oGuiElement.setCat(4)
                elif (cat == '5'):  # Divers
                    oGuiElement.setMeta(0)
                    oGuiElement.setCat(5)
                elif (cat == '6'):  # TV (Officiel)
                    oGuiElement.setMeta(0)
                    oGuiElement.setCat(6)
                elif (cat == '7'):  # Saga
                    oGuiElement.setMeta(3)
                    oGuiElement.setCat(7)
                elif (cat == '8'):  # Episodes
                    oGuiElement.setMeta(6)
                    oGuiElement.setCat(8)
                else:
                    oGuiElement.setMeta(0)
                    oGuiElement.setCat(cat)
                oGuiElement.setThumbnail(thumbnail)
                oGuiElement.setFanart(fanart)
                oGuiElement.addItemProperties('isBookmark', True)

                oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler,
                                      'cFav', 'cFav', 'delBookmark',
                                      self.ADDON.VSlang(30412))

                if (function == 'play'):
                    oGui.addHost(oGuiElement, oOutputParameterHandler)
                else:
                    oGui.addFolder(oGuiElement, oOutputParameterHandler)

            except:
                oOutputParameterHandler = cOutputParameterHandler()
                oGui.addDir(SITE_IDENTIFIER, 'DoNothing',
                            '[COLOR red]ERROR[/COLOR]', 'films.png',
                            oOutputParameterHandler)

        # La suppression n'est pas accessible lors de l'utilisation en Widget
        if not xbmc.getCondVisibility('Window.IsActive(home)'):
            oOutputParameterHandler = cOutputParameterHandler()
            oOutputParameterHandler.addParameter('sCat', sCat)
            oGui.addDir(SITE_IDENTIFIER, 'delBookmark',
                        self.ADDON.VSlang(30211), 'trash.png',
                        oOutputParameterHandler)

        oGui.setEndOfDirectory()

        return