コード例 #1
0
    def _unshorten_viidme(self, uri):
        try:
            sts, html = self.cm.getPage(uri, {'header': HTTP_HEADER})

            session_id = re.findall(r'sessionId\:(.*?)\"\,', html)
            if len(session_id) > 0:
                session_id = re.sub(r'\s\"', '', session_id[0])

                http_header = copy.copy(HTTP_HEADER)
                http_header[
                    "Content-Type"] = "application/x-www-form-urlencoded"
                http_header["Host"] = "viid.me"
                http_header["Referer"] = uri
                http_header["Origin"] = "http://viid.me"
                http_header["X-Requested-With"] = "XMLHttpRequest"

                GetIPTVSleep().Sleep(5)

                payload = {'adSessionId': session_id, 'callback': 'c'}
                sts, response = self.cm.getPage(
                    'http://viid.me/shortest-url/end-adsession',
                    {'header': http_header}, payload)

                resp_uri = byteify(json.loads(
                    response[6:-2]))['destinationUrl']
                if resp_uri is not None:
                    uri = resp_uri

            return uri, 'OK'

        except Exception as e:
            printExc()
            return uri, str(e)
コード例 #2
0
    def getVideoLinks(self, url):
        printDBG("StreamingSeriesWatch.getVideoLinks [%s]" % url)
        urlTab = []

        if 'protect-stream.com' not in url: return []

        sts, data = self.getPage(url, self.defaultParams)
        if not sts: return []

        k = self.cm.ph.getSearchGroups(data,
                                       'var\s+?k[^"]*?=[^"]*?"([^"]+?)"')[0]
        secure = self.cm.ph.getSearchGroups(data,
                                            '''['"/](secur[^\.]*?)\.js''')[0]

        try:
            sts, tmp = self.getPage(
                'https://www.protect-stream.com/%s.js' % secure,
                self.defaultParams)
            count = self.cm.ph.getSearchGroups(
                tmp, 'var\s+?count\s*?=\s*?([0-9]+?);')[0]
            if int(count) < 15:
                GetIPTVSleep().Sleep(int(count))
        except Exception:
            printExc()
            return []

        header = dict(self.defaultParams['header'])
        params = dict(self.defaultParams)
        header['Referer'] = url
        header['Content-Type'] = "application/x-www-form-urlencoded"
        header['Accept-Encoding'] = 'gzip, deflate'
        params['header'] = header
        params['use_cookie'] = False

        sts, data = self.getPage(
            'https://www.protect-stream.com/%s.php' % secure, params, {'k': k})
        if not sts: return []
        printDBG('==========================================')
        printDBG(data)
        printDBG('==========================================')

        videoUrl = self.cm.ph.getSearchGroups(
            data, '''<iframe[^>]+?src=['"]([^'^"]+?)['"]''')[0]
        if not self.cm.isValidUrl(videoUrl):
            videoUrl = self.cm.ph.getSearchGroups(
                data, '''<a[^>]+?href=['"]([^'^"]+?)['"]''')[0]
        return self.up.getVideoLinkExt(videoUrl)
コード例 #3
0
    def getPage(self, baseUrl, addParams={}, post_data=None):
        while True:
            if addParams == {}: addParams = dict(self.defaultParams)
            origBaseUrl = baseUrl
            baseUrl = self.cm.iriToUri(baseUrl)

            def _getFullUrl(url):
                if self.cm.isValidUrl(url): return url
                else: return urlparse.urljoin(baseUrl, url)

            addParams['cloudflare_params'] = {
                'domain': self.up.getDomain(baseUrl),
                'cookie_file': self.COOKIE_FILE,
                'User-Agent': self.USER_AGENT,
                'full_url_handle': _getFullUrl
            }
            sts, data = self.cm.getPageCFProtection(baseUrl, addParams,
                                                    post_data)
            if sts and addParams.get('return_data',
                                     True) and 'class="loading"' in data:
                GetIPTVSleep().Sleep(5)
                continue
            break
        return sts, data
コード例 #4
0
    def processCaptcha(self, sitekey, referer=''):
        sleepObj = None
        token = ''
        errorMsgTab = []
        apiKey = config.plugins.iptvplayer.api_key_9kweu.value
        apiUrl = self.getFullUrl(
            '/index.cgi?apikey='
        ) + apiKey + '&action=usercaptchaupload&interactive=1&json=1&file-upload-01=' + sitekey + '&oldsource=recaptchav2&pageurl=' + urllib.quote(
            referer)
        try:
            token = ''
            sts, data = self.cm.getPage(apiUrl)
            if sts:
                printDBG('API DATA:\n%s\n' % data)
                data = byteify(json.loads(data))
                if 'captchaid' in data:
                    captchaid = data['captchaid']
                    sleepObj = GetIPTVSleep()
                    sleepObj.Sleep(300, False)
                    tries = 0
                    while True:
                        tries += 1
                        timeout = sleepObj.getTimeout()
                        if tries == 1:
                            timeout = 10
                        elif timeout > 10:
                            timeout = 5
                        time.sleep(timeout)

                        apiUrl = self.getFullUrl(
                            '/index.cgi?apikey='
                        ) + apiKey + '&action=usercaptchacorrectdata&json=1&id=' + captchaid
                        sts, data = self.cm.getPage(apiUrl)
                        if not sts:
                            continue
                            # maybe simple continue here ?
                            errorMsgTab.append(_('Network failed %s.') % '2')
                            break
                        else:
                            printDBG('API DATA:\n%s\n' % data)
                            data = byteify(json.loads(data))
                            token = data['answer']
                            if token != '':
                                break
                        if sleepObj.getTimeout() == 0:
                            errorMsgTab.append(
                                _('%s timeout.') % self.getMainUrl())
                            break
                else:
                    errorMsgTab.append(data['error'])
            else:
                errorMsgTab.append(_('Network failed %s.') % '1')
        except Exception as e:
            errorMsgTab.append(str(e))
            printExc()

        if sleepObj != None:
            sleepObj.Reset()

        if token == '':
            self.sessionEx.waitForFinishOpen(
                MessageBox,
                (_('Resolving reCaptcha with %s failed!\n\n') %
                 self.getMainUrl()) + '\n'.join(errorMsgTab),
                type=MessageBox.TYPE_ERROR,
                timeout=10)
        return token
コード例 #5
0
    def processCaptcha(self, sitekey, referer=''):
        sleepObj = None
        token = ''
        errorMsgTab = []
        apiKey = config.plugins.iptvplayer.api_key_2captcha.value
        apiUrl = self.getFullUrl(
            '/in.php?key='
        ) + apiKey + '&method=userrecaptcha&invisible=1&googlekey=' + sitekey + '&json=1&pageurl=' + urllib.quote(
            referer)
        try:
            token = ''
            sts, data = self.cm.getPage(apiUrl)
            if sts:
                printDBG('API DATA:\n%s\n' % data)
                data = byteify(json.loads(data), '', True)
                if data['status'] == '1':
                    captchaid = data['request']
                    sleepObj = GetIPTVSleep()
                    sleepObj.Sleep(300, False)
                    tries = 0
                    while True:
                        tries += 1
                        timeout = sleepObj.getTimeout()
                        if tries == 1:
                            timeout = 10
                        elif timeout > 10:
                            timeout = 5
                        time.sleep(timeout)

                        apiUrl = self.getFullUrl(
                            '/res.php?key='
                        ) + apiKey + '&action=get&json=1&id=' + captchaid
                        sts, data = self.cm.getPage(apiUrl)
                        if not sts:
                            continue
                            # maybe simple continue here ?
                            errorMsgTab.append(_('Network failed %s.') % '2')
                            break
                        else:
                            printDBG('API DATA:\n%s\n' % data)
                            data = byteify(json.loads(data), '', True)
                            if data['status'] == '1' and data['request'] != '':
                                token = data['request']
                                break
                        if sleepObj.getTimeout() == 0:
                            errorMsgTab.append(
                                _('%s timeout.') % self.getMainUrl())
                            break
                else:
                    errorMsgTab.append(data['request'])
            else:
                errorMsgTab.append(_('Network failed %s.') % '1')
        except Exception as e:
            errorMsgTab.append(str(e))
            printExc()

        if sleepObj != None:
            sleepObj.Reset()

        if token == '':
            self.sessionEx.waitForFinishOpen(
                MessageBox,
                (_('Resolving reCaptcha with %s failed!\n\n') %
                 self.getMainUrl()) + '\n'.join(errorMsgTab),
                type=MessageBox.TYPE_ERROR,
                timeout=10)
        return token
コード例 #6
0
    def _unshorten_iivpl(self, baseUri):
        baseUri = strwithmeta(baseUri)
        ref = baseUri.meta.get('Referer', baseUri)
        USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0'
        HTTP_HEADER = {
            'User-Agent': USER_AGENT,
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate',
            'Referer': ref
        }
        HTTP_HEADER_AJAX = {
            'User-Agent': USER_AGENT,
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate',
            'Referer': baseUri,
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'X-Requested-With': 'XMLHttpRequest'
        }

        COOKIE_FILE = GetCookieDir('iit.pl')
        tries = 0
        retUri, retSts = '', 'KO'
        while tries < 2 and retSts != 'OK':
            tries += 1
            rm(COOKIE_FILE)
            try:
                params = {
                    'header': HTTP_HEADER,
                    'use_cookie': True,
                    'load_cookie': True,
                    'save_cookie': True,
                    'cookiefile': COOKIE_FILE
                }

                sts, data = self.cm.getPage(baseUri, params)

                sts, headers = self.cm.getPage(
                    'http://iiv.pl/modules/system/assets/js/framework.js',
                    params)

                headers = self.cm.ph.getDataBeetwenMarkers(
                    headers, 'headers', '}')[1]
                headers = re.compile('''['"]([^'^"]+?)['"]''').findall(headers)
                salt = self.cm.ph.getSearchGroups(
                    data, '''data\-salt="([^"]+?)"''')[0]
                time = self.cm.ph.getSearchGroups(
                    data, '''data\-time="([^"]+?)"''')[0]
                action = self.cm.ph.getSearchGroups(
                    data, '''data\-action="([^"]+?)"''')[0]
                banner = self.cm.ph.getSearchGroups(
                    data, '''data\-banner="([^"]+?)"''')[0]
                component = self.cm.ph.getSearchGroups(
                    data, '''data\-component="([^"]+?)"''')[0]
                if tries > 1: GetIPTVSleep().Sleep(int(time))

                sts, partials = self.cm.getPage(
                    'http://iiv.pl/themes/cutso/assets/javascript/shortcut/shortcut.js',
                    params)
                partials = self.cm.ph.getDataBeetwenMarkers(
                    partials, 'update:', '}')[1]
                partials = self.cm.ph.getSearchGroups(
                    partials, '''['"]([^'^"]+?)['"]''')[0]
                if partials == '': partials = 'shortcut/link_show'
                for header in headers:
                    if 'HANDLER' in header:
                        HTTP_HEADER_AJAX[header] = action
                    elif 'PARTIALS' in header:
                        HTTP_HEADER_AJAX[header] = partials

                post_data = {'salt': salt, 'banner': banner, 'blocker': 0}
                params['header'] = HTTP_HEADER_AJAX
                sts, data = self.cm.getPage(baseUri, params, post_data)
                data = byteify(json.loads(data))
                printDBG(">>>%s<<<" % data)
                uri = self.cm.ph.getSearchGroups(
                    data[partials], '''href="(https?://[^"]+?)"''')[0]
                retUri, retSts = uri, 'OK'

            except Exception as e:
                retUri, retSts = baseUri, str(e)
                printExc()

        return retUri, retSts
コード例 #7
0
    def _unshorten_linkbucks(self, uri):
        '''
        (Attempt) to decode linkbucks content. HEAVILY based on the OSS jDownloader codebase.
        This has necessidated a license change.

        '''

        r = requests.get(uri, headers=HTTP_HEADER, timeout=self._timeout)

        firstGet = time.time()

        baseloc = r.url

        if "/notfound/" in r.url or \
            "(>Link Not Found<|>The link may have been deleted by the owner|To access the content, you must complete a quick survey\.)" in r.text:
            return uri, 'Error: Link not found or requires a survey!'

        link = None

        content = r.text

        regexes = [
            r"<div id=\"lb_header\">.*?/a>.*?<a.*?href=\"(.*?)\".*?class=\"lb",
            r"AdBriteInit\(\"(.*?)\"\)",
            r"Linkbucks\.TargetUrl = '(.*?)';",
            r"Lbjs\.TargetUrl = '(http://[^<>\"]*?)'",
            r"src=\"http://static\.linkbucks\.com/tmpl/mint/img/lb\.gif\" /></a>.*?<a href=\"(.*?)\"",
            r"id=\"content\" src=\"([^\"]*)",
        ]

        for regex in regexes:
            if self.inValidate(link):
                link = find_in_text(regex, content)

        if self.inValidate(link):
            match = find_in_text(r"noresize=\"[0-9+]\" src=\"(http.*?)\"",
                                 content)
            if match:
                link = find_in_text(r"\"frame2\" frameborder.*?src=\"(.*?)\"",
                                    content)

        if self.inValidate(link):
            scripts = re.findall(
                "(<script type=\"text/javascript\">[^<]+</script>)", content)
            if not scripts:
                return uri, "No script bodies found?"

            js = False

            for script in scripts:
                # cleanup
                script = re.sub(r"[\r\n\s]+\/\/\s*[^\r\n]+", "", script)
                if re.search(
                        r"\s*var\s*f\s*=\s*window\['init'\s*\+\s*'Lb'\s*\+\s*'js'\s*\+\s*''\];[\r\n\s]+",
                        script):
                    js = script

            if not js:
                return uri, "Could not find correct script?"

            token = find_in_text(r"Token\s*:\s*'([a-f0-9]{40})'", js)
            if not token:
                token = find_in_text(r"\?t=([a-f0-9]{40})", js)

            assert token

            authKeyMatchStr = r"A(?:'\s*\+\s*')?u(?:'\s*\+\s*')?t(?:'\s*\+\s*')?h(?:'\s*\+\s*')?K(?:'\s*\+\s*')?e(?:'\s*\+\s*')?y"
            l1 = find_in_text(
                r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s*(\d+?);", js)
            l2 = find_in_text(
                r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s?params\['" +
                authKeyMatchStr + r"'\]\s*\+\s*(\d+?);", js)

            if any([not l1, not l2, not token]):
                return uri, "Missing required tokens?"

            print(l1, l2)

            authkey = int(l1) + int(l2)

            p1_url = urljoin(baseloc, "/director/?t={tok}".format(tok=token))
            print(p1_url)
            r2 = requests.get(p1_url,
                              headers=HTTP_HEADER,
                              timeout=self._timeout,
                              cookies=r.cookies)

            p1_url = urljoin(
                baseloc, "/scripts/jquery.js?r={tok}&{key}".format(tok=token,
                                                                   key=l1))
            print(p1_url)
            r2_1 = requests.get(p1_url,
                                headers=HTTP_HEADER,
                                timeout=self._timeout,
                                cookies=r.cookies)

            time_left = 5.033 - (time.time() - firstGet)
            GetIPTVSleep().Sleep(max(time_left, 0))

            p3_url = urljoin(
                baseloc,
                "/intermission/loadTargetUrl?t={tok}&aK={key}&a_b=false".
                format(tok=token, key=str(authkey)))
            r3 = requests.get(p3_url,
                              headers=HTTP_HEADER,
                              timeout=self._timeout,
                              cookies=r2.cookies)

            resp_json = json.loads(r3.text)
            if "Url" in resp_json:
                return resp_json['Url'], r3.status_code

            print(p3_url)
            print(r3)
            print(r3.text)
            print(resp_json)

        return "Wat", "wat"
コード例 #8
0
 def getPageCFProtection(self, baseUrl, params={}, post_data=None):
     cfParams = params.get('cloudflare_params', {})
     
     def _getFullUrlEmpty(url):
         return url
     _getFullUrl  = cfParams.get('full_url_handle', _getFullUrlEmpty)
     _getFullUrl2 = cfParams.get('full_url_handle2', _getFullUrlEmpty)
     
     url = baseUrl
     header = {'Referer':url, 'User-Agent':cfParams.get('User-Agent', ''), 'Accept-Encoding':'text'}
     header.update(params.get('header', {}))
     params.update({'with_metadata':True, 'use_cookie': True, 'save_cookie': True, 'load_cookie': True, 'cookiefile': cfParams.get('cookie_file', ''), 'header':header})
     sts, data = self.getPage(url, params, post_data)
     
     current = 0
     while current < 5:
         #if True:
         if not sts and None != data:
             start_time = time.time()
             current += 1
             doRefresh = False
             try:
                 domain = self.getBaseUrl(data.fp.geturl())
                 verData = data.fp.read() 
                 if data.fp.info().get('Content-Encoding', '') == 'gzip':
                     verData = DecodeGzipped(verData)
                 printDBG("------------------")
                 printDBG(verData)
                 printDBG("------------------")
                 if 'sitekey' not in verData and 'challenge' not in verData: break
                 
                 printDBG(">>")
                 printDBG(verData)
                 printDBG("<<")
                 
                 sitekey = self.ph.getSearchGroups(verData, 'data-sitekey="([^"]+?)"')[0]
                 id = self.ph.getSearchGroups(verData, 'data-ray="([^"]+?)"')[0]
                 if sitekey != '':
                     from Plugins.Extensions.IPTVPlayer.libs.recaptcha_v2 import UnCaptchaReCaptcha
                     # google captcha
                     recaptcha = UnCaptchaReCaptcha(lang=GetDefaultLang())
                     recaptcha.HTTP_HEADER['Referer'] = baseUrl
                     if '' != cfParams.get('User-Agent', ''): recaptcha.HTTP_HEADER['User-Agent'] = cfParams['User-Agent']
                     token = recaptcha.processCaptcha(sitekey)
                     if token == '': return False, None
                     
                     sts, tmp = self.ph.getDataBeetwenMarkers(verData, '<form', '</form>', caseSensitive=False)
                     if not sts: return False, None
                     
                     url = self.ph.getSearchGroups(tmp, 'action="([^"]+?)"')[0]
                     if url != '': url = _getFullUrl( url )
                     else: url = data.fp.geturl()
                     actionType = self.ph.getSearchGroups(tmp, 'method="([^"]+?)"', 1, True)[0].lower()
                     post_data2 = dict(re.findall(r'<input[^>]*name="([^"]*)"[^>]*value="([^"]*)"[^>]*>', tmp))
                     #post_data2['id'] = id
                     if '' != token:
                         post_data2['g-recaptcha-response'] = token
                     else:
                         continue
                     params2 = dict(params)
                     params2['header']= dict(params['header'])
                     params2['header']['Referer'] = baseUrl
                     if actionType == 'get':
                         if '?' in url:
                             url += '&'
                         else:
                             url += '?'
                         url += urllib.urlencode(post_data2)
                         post_data2 = None
                         
                     sts, data = self.getPage(url, params2, post_data2)
                     printDBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                     printDBG(sts)
                     printDBG("------------------------------------------------------------------")
                     printDBG(data)
                     printDBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                 else:
                     dat = self.ph.getAllItemsBeetwenNodes(verData, ('<script', '>'), ('</script', '>'), False)
                     for item in dat:
                         if 'setTimeout' in item and 'submit()' in item:
                             dat = item
                             break
                     decoded = ''
                     jscode = base64.b64decode('''ZnVuY3Rpb24gc2V0VGltZW91dCh0LGUpe2lwdHZfcmV0LnRpbWVvdXQ9ZSx0KCl9dmFyIGlwdHZfcmV0PXt9LGlwdHZfZnVuPW51bGwsZG9jdW1lbnQ9e30sd2luZG93PXRoaXMsZWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLl9uYW1lPXQsdGhpcy5fc3JjPSIiLHRoaXMuX2lubmVySFRNTD0iIix0aGlzLl9wYXJlbnRFbGVtZW50PSIiLHRoaXMuc2hvdz1mdW5jdGlvbigpe30sdGhpcy5hdHRyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuInNyYyI9PXQmJiIjdmlkZW8iPT10aGlzLl9uYW1lJiZpcHR2X3NyY2VzLnB1c2goZSksdGhpc30sdGhpcy5maXJzdENoaWxkPXtocmVmOmlwdHZfZG9tYWlufSx0aGlzLnN0eWxlPXtkaXNwbGF5OiIifSx0aGlzLnN1Ym1pdD1mdW5jdGlvbigpe3ByaW50KEpTT04uc3RyaW5naWZ5KGlwdHZfcmV0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzcmMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3JjfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fc3JjPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlubmVySFRNTCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbm5lckhUTUx9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbm5lckhUTUw9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sc2V0OmZ1bmN0aW9uKHQpe2lwdHZfcmV0LmFuc3dlcj10fX0pfSwkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWxlbWVudCh0KX07ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlbGVtZW50KHQpfSxkb2N1bWVudC5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWxlbWVudCh0KX0sZG9jdW1lbnQuYXR0YWNoRXZlbnQ9ZnVuY3Rpb24oKXtpcHR2X2Z1bj1hcmd1bWVudHNbMV19Ow==''')
                     jscode = "var location = {hash:''}; var iptv_domain='%s';\n%s\n%s\niptv_fun();" % (domain, jscode, dat) #cfParams['domain']
                     printDBG("+ CODE +")
                     printDBG(jscode)
                     printDBG("++++++++")
                     ret = iptv_js_execute( jscode )
                     decoded = byteify(json.loads(ret['data'].strip()))
                     
                     verData = self.ph.getDataBeetwenReMarkers(verData, re.compile('<form[^>]+?id="challenge-form"'), re.compile('</form>'), False)[1]
                     printDBG(">>")
                     printDBG(verData)
                     printDBG("<<")
                     verUrl =  _getFullUrl( self.ph.getSearchGroups(verData, 'action="([^"]+?)"')[0] )
                     get_data = dict(re.findall(r'<input[^>]*name="([^"]*)"[^>]*value="([^"]*)"[^>]*>', verData))
                     get_data['jschl_answer'] = decoded['answer']
                     verUrl += '?'
                     for key in get_data:
                         verUrl += '%s=%s&' % (key, get_data[key])
                     verUrl = _getFullUrl( self.ph.getSearchGroups(verData, 'action="([^"]+?)"')[0] ) + '?jschl_vc=%s&pass=%s&jschl_answer=%s' % (get_data['jschl_vc'], get_data['pass'], get_data['jschl_answer'])
                     verUrl = _getFullUrl2( verUrl )
                     params2 = dict(params)
                     params2['load_cookie'] = True
                     params2['save_cookie'] = True
                     params2['header'] = dict(params.get('header', {}))
                     params2['header'].update({'Referer':url, 'User-Agent':cfParams.get('User-Agent', ''), 'Accept-Encoding':'text'})
                     printDBG("Time spent: [%s]" % (time.time() - start_time))
                     if current == 1:
                         GetIPTVSleep().Sleep(1 + (decoded['timeout'] / 1000.0)-(time.time() - start_time))
                     else:
                         GetIPTVSleep().Sleep((decoded['timeout'] / 1000.0))
                     printDBG("Time spent: [%s]" % (time.time() - start_time))
                     printDBG("Timeout: [%s]" % decoded['timeout'])
                     sts, data = self.getPage(verUrl, params2, post_data)
             except Exception:
                 printExc()
                 break
         else:
             break
     return sts, data
コード例 #9
0
    def getVideoLinks(self, baseUrl):
        printDBG("AkoAm.getVideoLinks [%s]" % baseUrl)
        baseUrl = strwithmeta(baseUrl)
        urlTab = []

        # mark requested link as used one
        if len(self.cacheLinks.keys()):
            for key in self.cacheLinks:
                for idx in range(len(self.cacheLinks[key])):
                    if baseUrl in self.cacheLinks[key][idx]['url']:
                        if not self.cacheLinks[key][idx]['name'].startswith(
                                '*'):
                            self.cacheLinks[key][idx][
                                'name'] = '*' + self.cacheLinks[key][idx][
                                    'name'] + '*'
                        break

        if 1 != self.up.checkHostSupport(baseUrl):
            paramsUrl = {'header': dict(self.HTTP_HEADER)}
            paramsUrl['header']['Referer'] = baseUrl.meta.get(
                'Referer', self.getMainUrl())
            paramsUrl['return_data'] = False
            try:
                sts, response = self.getPage(baseUrl, paramsUrl)
                cUrl = response.geturl()
                if 'Set-Cookie' in response.info():
                    data = self.cm.ph.getDataBeetwenMarkers(
                        response.info()['Set-Cookie'], 'golink=', ';',
                        False)[1]
                    response.close()
                    printDBG(data)
                    data = urllib.unquote(data)
                    data = byteify(json.loads(data))
                    baseUrl = data['route']

                    paramsUrl = dict(self.defaultParams)
                    paramsUrl['header'] = dict(self.HTTP_HEADER)
                    paramsUrl['header']['Referer'] = cUrl
                    sts, data = self.getPage(baseUrl, paramsUrl)
                    if sts:
                        cUrl = data.meta['url']
                        url = self.getFullUrl(
                            self.cm.ph.getSearchGroups(
                                data,
                                '''<iframe[^>]+?src=['"]([^"^']+?)['"]''', 1,
                                True)[0])
                        if url == '':
                            time = self.cleanHtmlStr(
                                self.cm.ph.getDataBeetwenNodes(
                                    data, ('<div', '>', 'timerHolder'),
                                    ('</div', '>'), False)[1])
                            GetIPTVSleep().Sleep(int(time))
                            paramsUrl = dict(self.defaultParams)
                            paramsUrl['header'] = dict(self.AJAX_HEADER)
                            paramsUrl['header']['Referer'] = cUrl
                            sts, data = self.getPage(cUrl, paramsUrl, {})
                            if sts:
                                printDBG(data)
                                data = byteify(json.loads(data))
                                urlTab.append({
                                    'name':
                                    'direct_link',
                                    'url':
                                    self.getFullUrl(data['direct_link'])
                                })
                        else:
                            baseUrl = strwithmeta(url, {'Referer': cUrl})
            except Exception:
                printExc()

        urlTab.extend(self.up.getVideoLinkExt(baseUrl))
        return urlTab