Changeset 40902


Ignore:
Timestamp:
09/04/17 00:34:38 (7 years ago)
Author:
obi
Message:

tithek fix openload

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/mediathek/localhoster/openload.py

    r40087 r40902  
     1# -*- coding: utf-8 -*-
     2# Based on (root)/trunk/xbmc-addons/src/plugin.video.polishtv.live/hosts/ @ 419 - Wersja 636
     3# encoding=utf8 
     4import sys 
     5
     6reload(sys) 
     7sys.setdefaultencoding('utf8')
    18
    29import os
     
    815import lib.common as common
    916import json
     17from lib import jsunpack
     18
     19###################################################
     20import re
     21import time
     22import urllib
     23import socket
     24import string
     25import base64
     26import math
     27import lib.jjdecode as JJDecoder
    1028
    1129#OL_SOURCE = 'https://offshoregit.com/tvaresolvers/ol_gmu.py'
     
    1836
    1937
     38import urllib
     39import urllib2
     40try: import ssl
     41except Exception: pass
     42import re
     43import string
     44import time
     45import htmlentitydefs
     46import cookielib
     47import unicodedata
     48#import urllib2_ssl
     49#try:    import json
     50#except Exception: import simplejson as json
     51#try:
     52#    try: from cStringIO import StringIO
     53#    except Exception: from StringIO import StringIO
     54#    import gzip
     55
    2056class OpenLoadResolver(object):
    2157    name = "openload"
     
    2561    def __init__(self):
    2662        self.net = Net()
     63        self.headers = {'User-Agent': common.ANDROID_USER_AGENT}
    2764        url = str(sys.argv[1])
    2865        host = self.get_host_and_id(url)[0]
     
    5693             print 'errormsg=Exception during openload code retrieve:'
    5794#            common.log_utils.log_warning('Exception during openload code retrieve: %s' % e)
     95
     96        def decode1(self, encoded):
     97            tab = encoded.split('\\')
     98            ret = ''
     99            for item in tab:
     100                try: ret += chr(int(item, 8))
     101                except Exception:
     102                    ret += item
     103            return ret
     104       
     105        def base10toN(self, num,n):
     106            num_rep={10:'a', 11:'b',12:'c',13:'d',14:'e',15:'f',16:'g',17:'h',18:'i',19:'j',20:'k',21:'l',22:'m',23:'n',24:'o',25:'p',26:'q',27:'r',28:'s',29:'t',30:'u',31:'v',32:'w',33:'x',34:'y',35:'z'}
     107            new_num_string=''
     108            current=num
     109            while current!=0:
     110                remainder=current%n
     111                if 36>remainder>9:
     112                    remainder_string=num_rep[remainder]
     113                elif remainder>=36:
     114                    remainder_string='('+str(remainder)+')'
     115                else:
     116                    remainder_string=str(remainder)
     117                new_num_string=remainder_string+new_num_string
     118                current=current/n
     119            return new_num_string
     120
     121    def decodeOpenLoad(self, aastring):
     122       # decodeOpenLoad made by mortael, please leave this line for proper credit :)
     123    #aastring = re.search(r"<video(?:.|\s)*?<script\s[^>]*?>((?:.|\s)*?)</script", html, re.DOTALL | re.IGNORECASE).group(1)
     124
     125        aastring = aastring.replace("(゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((c^_^o)-(c^_^o))+ (-~0)+ (゚Д゚) ['c']+ (-~-~1)+","")
     126        aastring = aastring.replace("((゚ー゚) + (゚ー゚) + (゚Θ゚))", "9")
     127        aastring = aastring.replace("((゚ー゚) + (゚ー゚))","8")
     128        aastring = aastring.replace("((゚ー゚) + (o^_^o))","7")
     129        aastring = aastring.replace("((c^_^o)-(c^_^o))","0")
     130        aastring = aastring.replace("((゚ー゚) + (゚Θ゚))","5")
     131        aastring = aastring.replace("(゚ー゚)","4")
     132        aastring = aastring.replace("((o^_^o) - (゚Θ゚))","2")
     133        aastring = aastring.replace("(o^_^o)","3")
     134        aastring = aastring.replace("(゚Θ゚)","1")
     135        aastring = aastring.replace("(+!+[])","1")
     136        aastring = aastring.replace("(c^_^o)","0")
     137        aastring = aastring.replace("(0+0)","0")
     138        aastring = aastring.replace("(゚Д゚)[゚ε゚]","\\") 
     139        aastring = aastring.replace("(3 +3 +0)","6")
     140        aastring = aastring.replace("(3 - 1 +0)","2")
     141        aastring = aastring.replace("(!+[]+!+[])","2")
     142        aastring = aastring.replace("(-~-~2)","4")
     143        aastring = aastring.replace("(-~-~1)","3")
     144        aastring = aastring.replace("(-~0)","1")
     145        aastring = aastring.replace("(-~1)","2")
     146        aastring = aastring.replace("(-~3)","4")
     147        aastring = aastring.replace("(0-0)","0")
     148   
     149        aastring = aastring.replace("(゚Д゚).゚ω゚ノ","10")
     150        aastring = aastring.replace("(゚Д゚).゚Θ゚ノ","11")
     151        aastring = aastring.replace("(゚Д゚)[\'c\']","12")
     152        aastring = aastring.replace("(゚Д゚).゚ー゚ノ","13")
     153        aastring = aastring.replace("(゚Д゚).゚Д゚ノ","14")
     154        aastring = aastring.replace("(゚Д゚)[゚Θ゚]","15")
     155#        print "aastring", aastring
     156        decodestring = re.search(r"\\\+([^(]+)", aastring, re.DOTALL | re.IGNORECASE).group(1)
     157#        decodestring = re.search(r"\\\+([^(]+)", aastring, re.DOTALL | re.IGNORECASE)
     158        decodestring = "\\+"+ decodestring
     159        decodestring = decodestring.replace("+","")
     160        decodestring = decodestring.replace(" ","")
     161
     162        decodestring = self.decode1(decodestring)
     163        decodestring = decodestring.replace("\\/","/")
     164   
     165        if 'toString' in decodestring:
     166            base = re.compile(r"toString\(a\+(\d+)", re.DOTALL | re.IGNORECASE).findall(decodestring)[0]
     167            base = int(base)
     168            match = re.compile(r"(\(\d[^)]+\))", re.DOTALL | re.IGNORECASE).findall(decodestring)
     169            for repl in match:
     170                match1 = re.compile(r"(\d+),(\d+)", re.DOTALL | re.IGNORECASE).findall(repl)
     171                base2 = base + int(match1[0][0])
     172                repl2 = self.base10toN(int(match1[0][1]),base2)
     173                decodestring = decodestring.replace(repl,repl2)
     174            decodestring = decodestring.replace("+","")
     175            decodestring = decodestring.replace("\"","")
     176        print "decodestring", decodestring
     177        return decodestring
     178
     179#    def OPENLOADIO_decryptPlayerParams(p, a, c, k, e, d):
     180    def decryptPlayerParams(self, p, a, c, k, e, d):
     181        def e1(c):
     182            return c
     183        def e2(t=None):
     184            return '\\w+'
     185        def k1(matchobj):
     186            return d[int(matchobj.group(0))]
     187        e = e1
     188        if True:
     189            while c != 0:
     190                c -= 1
     191                d[c] = k[c]
     192                if c < len(k):
     193                    d[c] = k[c]
     194                else:
     195                    d[c] = c
     196            c = 1
     197            k = [k1]
     198            e = e2
     199        while c != 0:
     200            c -= 1
     201            if k[c]:
     202                reg = '\\b' + e(c) + '\\b'
     203                p = re.sub(reg, k[c], p)
     204        return p
     205
     206    def getAllItemsBeetwenMarkers(self, data, marker1, marker2, withMarkers=True, caseSensitive=True):
     207        itemsTab = []
     208        if caseSensitive:
     209            sData = data
     210        else:
     211            sData = data.lower()
     212            marker1 = marker1.lower()
     213            marker2 = marker2.lower()
     214        idx1 = 0
     215        while True:
     216            idx1 = sData.find(marker1, idx1)
     217            if -1 == idx1: return itemsTab
     218            idx2 = sData.find(marker2, idx1 + len(marker1))
     219            if -1 == idx2: return itemsTab
     220            tmpIdx2 = idx2 + len(marker2)
     221            if withMarkers:
     222                idx2 = tmpIdx2
     223            else:
     224                idx1 = idx1 + len(marker1)
     225            itemsTab.append(data[idx1:idx2])
     226            idx1 = tmpIdx2
     227        return itemsTab
     228
     229    def getSearchGroups(self, data, pattern, grupsNum=1, ignoreCase=False):
     230        tab = []
     231        if ignoreCase:
     232            match = re.search(pattern, data, re.IGNORECASE)
     233        else:
     234            match = re.search(pattern, data)
     235       
     236        for idx in range(grupsNum):
     237            try:    value = match.group(idx + 1)
     238            except Exception: value = ''
     239            tab.append(value)
     240        return tab
     241       
     242    def getPage(self, url, addParams = {}, post_data = None):
     243        ''' wraps getURLRequestData '''
     244        try:
     245            addParams['url'] = url
     246            if 'return_data' not in addParams:
     247                addParams['return_data'] = True
     248            response = self.getURLRequestData(addParams, post_data)
     249            status = True
     250        except urllib2.HTTPError, e:
     251#            printExc()
     252            response = e
     253            status = False
     254        except Exception:
     255#            printExc()
     256            response = None
     257            status = False
     258       
     259        if addParams['return_data'] and status and not isinstance(response, basestring):
     260            status = False
    58261           
     262        return (status, response)
     263
     264    def GetTmpDir(self, file = ''):
     265        path = "/tmp/"
     266        path = path.replace('//', '/')
     267        self.mkdirs(path)
     268        return path + '/' + file
     269
     270    def GetDukPath(self):
     271#        return "/tmp/localhoster/bin/duk.arm"
     272        return "/tmp/localhoster/bin/duk.mipsel"
     273 #       return "/tmp/localhoster/bin/duk.sh4"
     274
     275#        return config.plugins.iptvplayer.dukpath.value
     276
     277    def iptv_js_execute(self, jscode):
     278        sts, tmpPath = self.CreateTmpFile('.iptv_js.js', jscode)
     279        if sts:
     280            cmd =  self.GetDukPath() + ' ' + tmpPath + ' 2> /dev/null'
     281 #           printDBG("iptv_js_execute cmd[%s]" % cmd)
     282 #           print "iptv_js_execute cmd[%s]" % cmd
     283 #           test = self.command(cmd);
     284 #           print "test", test
     285
     286            ret = self.command(cmd);
     287#            print "test3", os.system(cmd);
     288
     289 #           ret = iptv_execute()( cmd )
     290#            ret = {'sts':False, 'code':-12, 'data':''}
     291            # leave last script for debug purpose
     292 #           if getDebugMode() == '':
     293 #               rm(tmpPath)
     294        else:
     295            ret = {'sts':False, 'code':-12, 'data':''}
     296#        printDBG('iptv_js_execute cmd ret[%s]' % ret)
     297#        print 'iptv_js_execute cmd ret[%s]' % ret
     298
     299        return ret
     300
     301    def mkdirs(self, newdir):
     302        """ Create a directory and all parent folders.
     303            Features:
     304            - parent directories will be created
     305            - if directory already exists, then do nothing
     306            - if there is another filsystem object with the same name, raise an exception
     307        """
     308#        printDBG('mkdirs: "%s"' % newdir)
     309 #       print 'mkdirs: "%s"' % newdir
     310        try:
     311            if os.path.isdir(newdir):
     312                pass
     313            elif os.path.isfile(newdir):
     314#                raise OSError("cannot create directory, file already exists: '%s'" % newdir)
     315                raise #print "cannot create directory, file already exists: '%s'" % newdir
     316            else:
     317                head, tail = os.path.split(newdir)
     318                if head and not os.path.isdir(head) and not os.path.ismount(head) and not os.path.islink(head):
     319                   mkdirs(head)
     320                if tail:
     321                    os.mkdir(newdir)
     322            return True
     323        except Exception:
     324#            printExc('!!!!!!!!!! EXCEPTION mkdirs["%s"]' % newdir)
     325            print '!!!!!!!!!! EXCEPTION mkdirs["%s"]' % newdir
     326            return False
     327
     328    def CreateTmpFile(self, filename, data=''):
     329        sts = False
     330        filePath = self.GetTmpDir(filename)
     331        try:
     332            with open(filePath, 'w') as f:
     333                f.write(data)
     334                sts = True
     335        except Exception:
     336            printExc()
     337        return sts, filePath
     338
     339    def getDataBeetwenMarkers(self, data, marker1, marker2, withMarkers=True, caseSensitive=True):
     340        if caseSensitive:
     341            idx1 = data.find(marker1)
     342        else:
     343            idx1 = data.lower().find(marker1.lower())
     344        if -1 == idx1: return False, ''
     345        if caseSensitive:
     346            idx2 = data.find(marker2, idx1 + len(marker1))
     347        else:
     348            idx2 = data.lower().find(marker2.lower(), idx1 + len(marker1))
     349        if -1 == idx2: return False, ''
     350       
     351        if withMarkers:
     352            idx2 = idx2 + len(marker2)
     353        else:
     354            idx1 = idx1 + len(marker1)
     355
     356        return True, data[idx1:idx2]
     357
     358        # edit bb , touch commands.getouput with this def #
     359    def command(self, comandline, strip=1):
     360        comandline = comandline + " >/tmp/command.txt"
     361        os.system(comandline)
     362        text = ""
     363        if os.path.exists("/tmp/command.txt") is True:
     364            file = open("/tmp/command.txt", "r")
     365            if strip == 1:
     366                for line in file:
     367                    text = text + line.strip() + '\n'
     368            else:
     369                for line in file:
     370                    text = text + line
     371                    if text[-1:] != '\n': text = text + "\n"
     372            file.close
     373        # if one or last line then remove linefeed
     374        if text[-1:] == '\n': text = text[:-1]
     375        comandline = text
     376        os.system("rm /tmp/command.txt")
     377        return comandline
     378
    59379    def get_media_url(self, host, media_id):
    60         video_url = ""
    61  #       js_data = self.__get_json(GET_URL.format(media_id=media_id))
    62  #       print "js_data: %s" % (js_data)
    63         try:
    64  #           self._auto_update(self.get_setting('url'), OL_PATH, self.get_setting('key'))
    65             reload(ol_gmu)
    66             return ol_gmu.get_media_url(self.get_url(host, media_id))  # @UndefinedVariable
    67         except Exception as e:
    68 #            print "Exception during openload resolve parse: %s" % (e)
    69 #            common.log_utils.log_debug('Exception during openload resolve parse: %s' % (e))
     380        web_url = self.get_url(host, media_id)
     381#        web_url = "https://openload.co/embed/SVMiyZR_yM4/Game_of_Thrones_S07E07_Der_Drache_und_der_Wolf_German_AC3_Dubbed_AmazonHD.mkv"
     382        web_url = "https://openload.co/embed/8ATYb_yCakU/pso-atomic_ts.sd.mkv"
     383        headers = {
     384            'Referer': web_url
     385        }
     386        headers.update(self.headers)
     387        data = self.net.http_GET(web_url, headers=headers).content
     388#        print "data", data
     389        baseUrl = web_url
     390 #       baseUrl = "https://openload.co/embed/SVMiyZR_yM4/Game_of_Thrones_S07E07_Der_Drache_und_der_Wolf_German_AC3_Dubbed_AmazonHD.mkv"
     391        HTTP_HEADER= { 'User-Agent':"Mozilla/5.0", 'Referer':baseUrl}
     392        HTTP_HEADER = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
     393               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
     394               'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
     395               'Accept-Encoding': 'none',
     396               'Accept-Language': 'en-US,en;q=0.8',
     397               'Referer':baseUrl} #'Connection': 'keep-alive'
     398
     399#        sts, data = self.getPage(baseUrl, {'header':HTTP_HEADER})
     400 #       data = self.net.http_GET(web_url, headers=headers).content
     401
     402        orgData = data
     403 #       print "data", data
     404
     405#        print "222222222222222222222222"
     406
     407        subTracksData = self.getAllItemsBeetwenMarkers(data, '<track ', '>', False, False)
     408        subTracks = []
     409        for track in subTracksData:
     410            if 'kind="captions"' not in track: continue
     411            subUrl = self.getSearchGroups(track, 'src="([^"]+?)"')[0]
     412#            print "suburl", subUrl
     413            if subUrl.startswith('/'):
     414                subUrl = 'http://openload.co' + subUrl
     415            if subUrl.startswith('http'):
     416                subLang = self.getSearchGroups(track, 'srclang="([^"]+?)"')[0]
     417                subLabel = self.getSearchGroups(track, 'label="([^"]+?)"')[0]
     418                subTracks.append({'title':subLabel + '_' + subLang, 'url':subUrl, 'lang':subLang, 'format':'srt'})
     419       
     420#        print "33333333333333333333333"
     421 
     422        preDataTab = self.getAllItemsBeetwenMarkers(data, 'a="0%', '{}', withMarkers=True, caseSensitive=False)
     423#        print "preDataTab", preDataTab
     424 
     425        for item in preDataTab:
     426#            print "item", item
    70427            try:
    71                 video_url = self.__check_auth(media_id)
    72                 if not video_url:
    73                     video_url = self.__auth_ip(media_id)
    74             #except ResolverError:
    75             except Exception as e:
    76                 print "errormsg=IP address not authorized. Visit https://openload.co/pair"
    77                # raise
    78            
    79             if video_url:
    80                 print video_url
     428                dat = self.getSearchGroups(item, 'a\s*?=\s*?"([^"]+?)"', ignoreCase=True)[0]
     429#                print "dat1", dat
     430                z = self.getSearchGroups(item, '\}\(([0-9]+?)\)', ignoreCase=True)[0]
     431#                print "z1", z
     432                z = int(z)
     433#                print "z2", z
     434                def checkA(c):
     435                    code = ord(c.group(1))
     436                    if code <= ord('Z'):
     437                        tmp = 90
     438                    else:
     439                        tmp = 122
     440                    c = code + z
     441                    if tmp < c:
     442                        c -= 26
     443                    return chr(c)
     444                   
     445                dat = urllib.unquote( re.sub('([a-zA-Z])', checkA, dat) )
     446#                print "dat2", dat
     447                dat = self.decryptPlayerParams(dat, 4, 4, ['j', '_', '__', '___'], 0, {})
     448#                pageData = unpackJS(data[idx1:-3], VIDUPME_decryptPlayerParams)
     449#               dat = jsunpack.unpack(dat)
     450
     451#                print "dat3", dat
     452                data += dat
     453            except Exception:
     454                 print "preDataTab error"
     455#                printExc()
     456
     457
     458
     459
     460
     461        videoUrl = ''
     462        tmp = ''
     463
     464        encodedData = self.getAllItemsBeetwenMarkers(data, '゚ω゚', '</script>', withMarkers=False, caseSensitive=False)
     465#        encodedData = re.sub('゚ω゚', '</script>', data)
     466   #     encodedData = re.search(r'゚ω゚\.*?</script>', data, re.DOTALL)
     467  #      encodedData = re.search('''゚ω゚\(\s*)</script>''', data).group(1)
     468
     469#        print "encodedData1", encodedData
     470
     471        for item in encodedData:
     472#            print "item1", item
     473            tmpEncodedData = item.split('┻━┻')
     474#            print "tmpEncodedData1", tmpEncodedData
     475            for tmpItem in tmpEncodedData:
     476#                print "tmpItem", tmpItem
     477                try:
     478                    tmp += self.decodeOpenLoad(tmpItem)
     479#                    print "tmpItem1", tmpItem
     480                except Exception:
     481                    skip = 1
     482#                    printExc()
     483#                    print "encodedData1 error"
     484
     485        tmp2 = ''
     486        encodedData = self.getAllItemsBeetwenMarkers(data, "j=~[];", "())();", withMarkers=True, caseSensitive=False)
     487#        print "encodedData2", encodedData
     488        for item in encodedData:
     489#            print "item2", item
     490            try:
     491                if '' != item:
     492                    tmp2 += JJDecoder(item).decode()
     493#                    print "tmp2", tmp2
     494            except Exception:
     495                    skip = 1
     496#                printExc()
     497#                    print "encodedData2 error"
     498
     499       
     500#        printDBG('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
     501#        printDBG(tmp)
     502#        printDBG('BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB')
     503#        printDBG(tmp2)
     504#        printDBG('CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC')
     505#        print 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
     506#        print "tmp1:", tmp
     507#        print 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
     508#        print "tmp2:", tmp2
     509#        print 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
     510
     511        ##########################################################
     512        # new algo 2016-12-04 ;)
     513        ##########################################################
     514        varName = self.getSearchGroups(tmp, '''window.r=['"]([^'^"]+?)['"]''', ignoreCase=True)[0]
     515        encTab = re.compile('''<span[^>]+?id="%s[^"]*?"[^>]*?>([^<]+?)<\/span>''' % varName).findall(data)
     516#        printDBG(">>>>>>>>>>>> varName[%s] encTab[%s]" % (varName, encTab) )
     517#        print ">>>>>>>>>>>> varName[%s] encTab[%s]" % (varName, encTab)
     518
     519
     520        if varName == '':
     521            for e in encTab:
     522                if len(e) > 40:
     523                    encTab.insert(0, e)
     524                    break
     525       
     526        def __decode_k(enc, jscode):
     527            decoded = ''
     528            tmpPath = ''
     529            try:
     530                jscode = base64.b64decode('''ICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSAiJXMiDQogICAgICAgICAgICAgICAgICAgICAgLCBkZWNvZGVkDQogICAgICAgICAgICAgICAgICAgICAgLCBkb2N1bWVudCA9IHt9DQogICAgICAgICAgICAgICAgICAgICAgLCB3aW5kb3cgPSB0aGlzDQogICAgICAgICAgICAgICAgICAgICAgLCAkID0gZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbihhKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeTogZnVuY3Rpb24oYSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihkLCB3KXsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKCl7fTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZGYgPSBbJ2Nsb3NlJywnY3JlYXRlQXR0cmlidXRlJywnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCcsJ2NyZWF0ZUVsZW1lbnQnLCdjcmVhdGVFbGVtZW50TlMnLCdjcmVhdGVFdmVudCcsJ2NyZWF0ZU5TUmVzb2x2ZXInLCdjcmVhdGVSYW5nZScsJ2NyZWF0ZVRleHROb2RlJywnY3JlYXRlVHJlZVdhbGtlcicsJ2V2YWx1YXRlJywnZXhlY0NvbW1hbmQnLCdnZXRFbGVtZW50QnlJZCcsJ2dldEVsZW1lbnRzQnlOYW1lJywnZ2V0RWxlbWVudHNCeVRhZ05hbWUnLCdpbXBvcnROb2RlJywnb3BlbicsJ3F1ZXJ5Q29tbWFuZEVuYWJsZWQnLCdxdWVyeUNvbW1hbmRJbmRldGVybScsJ3F1ZXJ5Q29tbWFuZFN0YXRlJywncXVlcnlDb21tYW5kVmFsdWUnLCd3cml0ZScsJ3dyaXRlbG4nXTsNCiAgICAgICAgICAgICAgICAgICAgICBkZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RbZV09Zjt9KTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9fID0gWydhbmNob3JzJywnYXBwbGV0cycsJ2JvZHknLCdkZWZhdWx0VmlldycsJ2RvY3R5cGUnLCdkb2N1bWVudEVsZW1lbnQnLCdlbWJlZHMnLCdmaXJzdENoaWxkJywnZm9ybXMnLCdpbWFnZXMnLCdpbXBsZW1lbnRhdGlvbicsJ2xpbmtzJywnbG9jYXRpb24nLCdwbHVnaW5zJywnc3R5bGVTaGVldHMnXTsNCiAgICAgICAgICAgICAgICAgICAgICBkb18uZm9yRWFjaChmdW5jdGlvbihlKXtkW2VdPW87fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGRzID0gWydVUkwnLCdjaGFyYWN0ZXJTZXQnLCdjb21wYXRNb2RlJywnY29udGVudFR5cGUnLCdjb29raWUnLCdkZXNpZ25Nb2RlJywnZG9tYWluJywnbGFzdE1vZGlmaWVkJywncmVmZXJyZXInLCd0aXRsZSddOw0KICAgICAgICAgICAgICAgICAgICAgIGRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1zO30pOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciB3YiA9IFsnY2xvc2VkJywnaXNTZWN1cmVDb250ZXh0J107DQogICAgICAgICAgICAgICAgICAgICAgd2IuZm9yRWFjaChmdW5jdGlvbihlKXt3W2VdPWI7fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIHdmID0gWydhZGRFdmVudExpc3RlbmVyJywnYWxlcnQnLCdhdG9iJywnYmx1cicsJ2J0b2EnLCdjYW5jZWxBbmltYXRpb25GcmFtZScsJ2NhcHR1cmVFdmVudHMnLCdjbGVhckludGVydmFsJywnY2xlYXJUaW1lb3V0JywnY2xvc2UnLCdjb25maXJtJywnY3JlYXRlSW1hZ2VCaXRtYXAnLCdkaXNwYXRjaEV2ZW50JywnZmV0Y2gnLCdmaW5kJywnZm9jdXMnLCdnZXRDb21wdXRlZFN0eWxlJywnZ2V0U2VsZWN0aW9uJywnbWF0Y2hNZWRpYScsJ21vdmVCeScsJ21vdmVUbycsJ29wZW4nLCdwb3N0TWVzc2FnZScsJ3Byb21wdCcsJ3JlbGVhc2VFdmVudHMnLCdyZW1vdmVFdmVudExpc3RlbmVyJywncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywncmVzaXplQnknLCdyZXNpemVUbycsJ3Njcm9sbCcsJ3Njcm9sbEJ5Jywnc2Nyb2xsVG8nLCdzZXRJbnRlcnZhbCcsJ3NldFRpbWVvdXQnLCdzdG9wJ107DQogICAgICAgICAgICAgICAgICAgICAgd2YuZm9yRWFjaChmdW5jdGlvbihlKXt3W2VdPWY7fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIHduID0gWydkZXZpY2VQaXhlbFJhdGlvJywnaW5uZXJIZWlnaHQnLCdpbm5lcldpZHRoJywnbGVuZ3RoJywnb3V0ZXJIZWlnaHQnLCdvdXRlcldpZHRoJywncGFnZVhPZmZzZXQnLCdwYWdlWU9mZnNldCcsJ3NjcmVlblgnLCdzY3JlZW5ZJywnc2Nyb2xsWCcsJ3Njcm9sbFknXTsNCiAgICAgICAgICAgICAgICAgICAgICB3bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3dbZV09bjt9KTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgd28gPSBbJ2FwcGxpY2F0aW9uQ2FjaGUnLCdjYWNoZXMnLCdjcnlwdG8nLCdleHRlcm5hbCcsJ2ZyYW1lRWxlbWVudCcsJ2ZyYW1lcycsJ2hpc3RvcnknLCdpbmRleGVkREInLCdsb2NhbFN0b3JhZ2UnLCdsb2NhdGlvbicsJ2xvY2F0aW9uYmFyJywnbWVudWJhcicsJ25hdmlnYXRvcicsJ29uYWJvcnQnLCdvbmFuaW1hdGlvbmVuZCcsJ29uYW5pbWF0aW9uaXRlcmF0aW9uJywnb25hbmltYXRpb25zdGFydCcsJ29uYmVmb3JldW5sb2FkJywnb25ibHVyJywnb25jYW5wbGF5Jywnb25jYW5wbGF5dGhyb3VnaCcsJ29uY2hhbmdlJywnb25jbGljaycsJ29uY29udGV4dG1lbnUnLCdvbmRibGNsaWNrJywnb25kZXZpY2Vtb3Rpb24nLCdvbmRldmljZW9yaWVudGF0aW9uJywnb25kcmFnJywnb25kcmFnZW5kJywnb25kcmFnZW50ZXInLCdvbmRyYWdsZWF2ZScsJ29uZHJhZ292ZXInLCdvbmRyYWdzdGFydCcsJ29uZHJvcCcsJ29uZHVyYXRpb25jaGFuZ2UnLCdvbmVtcHRpZWQnLCdvbmVuZGVkJywnb25lcnJvcicsJ29uZm9jdXMnLCdvbmhhc2hjaGFuZ2UnLCdvbmlucHV0Jywnb25pbnZhbGlkJywnb25rZXlkb3duJywnb25rZXlwcmVzcycsJ29ua2V5dXAnLCdvbmxhbmd1YWdlY2hhbmdlJywnb25sb2FkJywnb25sb2FkZWRkYXRhJywnb25sb2FkZWRtZXRhZGF0YScsJ29ubG9hZHN0YXJ0Jywnb25tZXNzYWdlJywnb25tb3VzZWRvd24nLCdvbm1vdXNlZW50ZXInLCdvbm1vdXNlbGVhdmUnLCdvbm1vdXNlbW92ZScsJ29ubW91c2VvdXQnLCdvbm1vdXNlb3ZlcicsJ29ubW91c2V1cCcsJ29ub2ZmbGluZScsJ29ub25saW5lJywnb25wYWdlaGlkZScsJ29ucGFnZXNob3cnLCdvbnBhdXNlJywnb25wbGF5Jywnb25wbGF5aW5nJywnb25wb3BzdGF0ZScsJ29ucHJvZ3Jlc3MnLCdvbnJhdGVjaGFuZ2UnLCdvbnJlc2V0Jywnb25yZXNpemUnLCdvbnNjcm9sbCcsJ29uc2Vla2VkJywnb25zZWVraW5nJywnb25zZWxlY3QnLCdvbnNob3cnLCdvbnN0YWxsZWQnLCdvbnN0b3JhZ2UnLCdvbnN1Ym1pdCcsJ29uc3VzcGVuZCcsJ29udGltZXVwZGF0ZScsJ29udG9nZ2xlJywnb250cmFuc2l0aW9uZW5kJywnb251bmxvYWQnLCdvbnZvbHVtZWNoYW5nZScsJ29ud2FpdGluZycsJ29ud2Via2l0YW5pbWF0aW9uZW5kJywnb253ZWJraXRhbmltYXRpb25pdGVyYXRpb24nLCdvbndlYmtpdGFuaW1hdGlvbnN0YXJ0Jywnb253ZWJraXR0cmFuc2l0aW9uZW5kJywnb253aGVlbCcsJ29wZW5lcicsJ3BhcmVudCcsJ3BlcmZvcm1hbmNlJywncGVyc29uYWxiYXInLCdzY3JlZW4nLCdzY3JvbGxiYXJzJywnc2VsZicsJ3Nlc3Npb25TdG9yYWdlJywnc3BlZWNoU3ludGhlc2lzJywnc3RhdHVzYmFyJywndG9vbGJhcicsJ3RvcCddOw0KICAgICAgICAgICAgICAgICAgICAgIHdvLmZvckVhY2goZnVuY3Rpb24oZSl7d1tlXT1vO30pOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciB3cyA9IFsnbmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgIHdzLmZvckVhY2goZnVuY3Rpb24oZSl7d1tlXT1zO30pOw0KICAgICAgICAgICAgICAgICAgICB9KShkb2N1bWVudCwgd2luZG93KTsNCiAgICAgICAgICAgICAgICAgICAgJXM7DQogICAgICAgICAgICAgICAgICAgIHByaW50KGRlY29kZWQpOw==''') % (enc, jscode)                     
     531#                printDBG("+++++++++++++++++++++++  CODE  ++++++++++++++++++++++++")
     532#                printDBG(jscode)
     533#                printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++")
     534#                print "+++++++++++++++++++++++  CODE  ++++++++++++++++++++++++"
     535#                print jscode
     536#                print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
     537#                return self.iptv_js_execute( jscode )
     538                return self.iptv_js_execute( jscode )
     539
     540#                ret = self.iptv_js_execute( jscode )
     541#                if ret['sts'] and 0 == ret['code']:
     542#                    decoded = ret['data'].strip()
     543#                    printDBG('DECODED DATA -> [%s]' % decoded)
     544            except Exception:
     545#                printExc()
     546                print "__decode_k error"
     547
     548            #rm(tmpPath)
     549            return decoded
     550
     551#        marker = '゚ω゚ノ= /`m´)ノ'
     552        marker = '゚ω゚ノ= /`m'
     553
     554#        marker = '゚ω゚'
     555
     556        orgData = marker + self.getDataBeetwenMarkers(orgData, marker, marker, False)[1]
     557        orgData = re.sub('''if\s*\([^\}]+?typeof[^\}]+?\}''', '', orgData)
     558        orgData = re.sub('''if\s*\([^\}]+?document[^\}]+?\}''', '', orgData)
     559#        dec = self.__decode_k(encTab[0], orgData)
     560        dec = __decode_k(encTab[0], orgData)
     561       
     562        videoUrl = 'https://openload.co/stream/{0}?mime=true'.format(dec)
     563        params = dict(HTTP_HEADER)
     564        params['external_sub_tracks'] = subTracks
     565        print videoUrl
     566#        print "params:", params
    81567
    82568    def get_url(self, host, media_id):
    83         return 'http://openload.co/embed/%s' % (media_id)
     569        return 'https://openload.co/embed/%s' % (media_id)
    84570
    85571    def __auth_ip(self, media_id):
     
    100586        except ResolverError as e:
    101587#        except Exception as e:
    102             status, msg = e
     588            status, mscommandg = e
    103589            if status == 403:
    104590                print "errormsg=%s" % (e)
Note: See TracChangeset for help on using the changeset viewer.