diff --git a/channels/cineblog01.py b/channels/cineblog01.py index ccd73513..38ab963a 100644 --- a/channels/cineblog01.py +++ b/channels/cineblog01.py @@ -259,34 +259,4 @@ def findvid_serie(item): def play(item): support.log() - itemlist = [] - ### Handling new cb01 wrapper - if host[9:] + "/film/" in item.url: - iurl = httptools.downloadpage(item.url, only_headers=True, follow_redirects=False).headers.get("location", "") - support.log("/film/ wrapper: ", iurl) - if iurl: - item.url = iurl - - if '/goto/' in item.url: - item.url = item.url.split('/goto/')[-1].decode('base64') - - item.url = item.url.replace('http://cineblog01.uno', 'http://k4pp4.pw') - - logger.debug("##############################################################") - if "go.php" in item.url: - data = httptools.downloadpage(item.url).data - if "window.location.href" in data: - try: - data = scrapertools.find_single_match(data, 'window.location.href = "([^"]+)";') - except IndexError: - data = httptools.downloadpage(item.url, only_headers=True, follow_redirects=False).headers.get( - "location", "") - data, c = unshortenit.unwrap_30x_only(data) - else: - data = scrapertools.find_single_match(data, r'.*?licca.*?') - - logger.debug("##### play go.php data ##\n%s\n##" % data) - else: - data = support.swzz_get_url(item) - - return servertools.find_video_items(data=data) + return servertools.find_video_items(data=item.url) diff --git a/core/support.py b/core/support.py index 5338625f..77d533f0 100755 --- a/core/support.py +++ b/core/support.py @@ -573,13 +573,16 @@ def dooplay_menu(item, type): def swzz_get_url(item): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0'} - + # dbg() if "/link/" in item.url: data = httptools.downloadpage(item.url, headers=headers).data if "link =" in data: data = scrapertools.find_single_match(data, 'link = "([^"]+)"') if 'http' not in data: data = 'https:' + data + elif 'linkId = ' in data: + id = scrapertools.find_single_match(data, 'linkId = "([^"]+)"') + data = stayonline(id) else: match = scrapertools.find_single_match(data, r'') if not match else match @@ -604,24 +607,26 @@ def swzz_get_url(item): if not "vcrypt" in data: data = httptools.downloadpage(data).data logger.debug("##### play /link/ data ##\n%s\n##" % data) + elif 'stayonline.pro' in item.url: - # dbg() id = item.url.split('/')[-2] - reqUrl = 'https://stayonline.pro/ajax/linkView.php' - p = urlencode({"id": id}) - data = httptools.downloadpage(reqUrl, post=p).data - try: - import json - data = json.loads(data)['data']['value'] - except: - data = scrapertools.find_single_match(data, r'"value"\s*:\s*"([^"]+)"') - else: - return '' + data = stayonline(id) else: data = item.url return data.replace('\\','') +def stayonline(id): + reqUrl = 'https://stayonline.pro/ajax/linkView.php' + p = urlencode({"id": id}) + data = httptools.downloadpage(reqUrl, post=p).data + try: + import json + data = json.loads(data)['data']['value'] + except: + data = scrapertools.find_single_match(data, r'"value"\s*:\s*"([^"]+)"') + return data + def menuItem(itemlist, filename, title='', action='', url='', contentType='movie', args=[]): # Function to simplify menu creation diff --git a/lib/unshortenit.py b/lib/unshortenit.py index f13938cc..fbae681c 100644 --- a/lib/unshortenit.py +++ b/lib/unshortenit.py @@ -13,7 +13,7 @@ import time import urllib from base64 import b64decode -from core import httptools +from core import httptools, scrapertools from platformcode import config, logger @@ -38,11 +38,14 @@ class UnshortenIt(object): _vcrypt_regex = r'vcrypt\.net|vcrypt\.pw' _linkup_regex = r'linkup\.pro|buckler.link' _linkhub_regex = r'linkhub\.icu' + _swzz_regex = r'swzz\.xyz' + _stayonline_regex = r'stayonline\.pro' # for services that only include real link inside iframe _simple_iframe_regex = r'cryptmango|xshield\.net|vcrypt\.club' listRegex = [_adfly_regex, _linkbucks_regex, _adfocus_regex, _lnxlu_regex, _shst_regex, _hrefli_regex, _anonymz_regex, - _shrink_service_regex, _rapidcrypt_regex, _simple_iframe_regex, _vcrypt_regex, _linkup_regex, _linkhub_regex] + _shrink_service_regex, _rapidcrypt_regex, _simple_iframe_regex, _vcrypt_regex, _linkup_regex, _linkhub_regex, + _swzz_regex, _stayonline_regex] _maxretries = 5 @@ -88,10 +91,16 @@ class UnshortenIt(object): uri, code = self._unshorten_linkup(uri) if re.search(self._linkhub_regex, uri, re.IGNORECASE): uri, code = self._unshorten_linkhub(uri) + if re.search(self._swzz_regex, uri, re.IGNORECASE): + uri, code = self._unshorten_swzz(uri) + if re.search(self._stayonline_regex, uri, re.IGNORECASE): + uri, code = self._unshorten_stayonline(uri) if oldUri == uri: break + logger.info(uri) + return uri, code def unwrap_30x(self, uri, timeout=10): @@ -582,6 +591,59 @@ class UnshortenIt(object): except Exception as e: return uri, str(e) + def _unshorten_swzz(self, uri): + try: + r = httptools.downloadpage(uri) + if r.url != uri: + return r.url, r.code + data = r.data + if "link =" in data or 'linkId = ' in data: + uri = scrapertools.find_single_match(data, 'link(?:Id)? = "([^"]+)"') + if 'http' not in data: + uri = 'https:' + uri + else: + match = scrapertools.find_single_match(data, r'') if not match else match + + if not match: + from lib import jsunpack + + try: + data = scrapertools.find_single_match(data.replace('\n', ''), + r"(eval\s?\(function\(p,a,c,k,e,d.*?)") + data = jsunpack.unpack(data) + + logger.debug("##### play /link/ unpack ##\n%s\n##" % data) + except: + logger.debug("##### The content is yet unpacked ##\n%s\n##" % data) + + uri = scrapertools.find_single_match(data, r'var link(?:\s)?=(?:\s)?"([^"]+)";') + else: + uri = match + if uri.startswith('/'): + uri = "http://swzz.xyz" + uri + if not "vcrypt" in data: + uri = httptools.downloadpage(data).data + return uri, r.code + except Exception as e: + return uri, str(e) + + def _unshorten_stayonline(self, uri): + try: + id = uri.split('/')[-2] + reqUrl = 'https://stayonline.pro/ajax/linkView.php' + p = urllib.urlencode({"id": id}) + r = httptools.downloadpage(reqUrl, post=p) + data = r.data + try: + import json + uri = json.loads(data)['data']['value'] + except: + uri = scrapertools.find_single_match(data, r'"value"\s*:\s*"([^"]+)"') + return uri, r.code + except Exception as e: + return uri, str(e) + def unwrap_30x_only(uri, timeout=10): unshortener = UnshortenIt() @@ -612,6 +674,7 @@ def findlinks(text): regex = '(?:https?://(?:[\w\d]+\.)?)?(?:' + regex + ')/[a-zA-Z0-9_=/]+' for match in re.findall(regex, text): matches.append(match) + logger.info('matches=' + str(matches)) if len(matches) == 1: text += '\n' + unshorten(matches[0])[0] elif matches: diff --git a/servers/akvideo.json b/servers/akvideo.json index cfda3456..1a75b82c 100644 --- a/servers/akvideo.json +++ b/servers/akvideo.json @@ -4,8 +4,8 @@ "ignore_urls": ["http://akvideo.stream/video", "http://akvideo.stream/video/api"], "patterns": [ { - "pattern": "(https?://akvideo.stream/swembedid/\\d+)", - "url": "\\1" + "pattern": "akvideo\\.stream/((?:api/vcmod/fastredirect/streaming\\.php\\?id=|swembedid/)[$0-9]+)", + "url": "http://akvideo.stream/\\1" }, { "pattern": "(https://akvideo\\.stream/api/vcmod/fastredirect/embed_ak\\.php\\?id=[0-9]+)", diff --git a/servers/akvideo.py b/servers/akvideo.py index 040ae55f..61660480 100644 --- a/servers/akvideo.py +++ b/servers/akvideo.py @@ -7,20 +7,24 @@ from core import httptools from core import scrapertools from platformcode import logger, config +headers = [['User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0']] def test_video_exists(page_url): logger.info("(page_url='%s')" % page_url) # page_url = re.sub('akvideo.stream/(?:video/|video\\.php\\?file_code=)?(?:embed-)?([a-zA-Z0-9]+)','akvideo.stream/video/\\1',page_url) global data - page = httptools.downloadpage(page_url) + page = httptools.downloadpage(page_url, headers=headers) if 'embed_ak.php' in page_url or '/embed-' in page.url: code = scrapertools.find_single_match(page.url, '/embed-([0-9a-z]+)\.html') if not code: code = scrapertools.find_single_match(page.data, r"""input\D*id=(?:'|")[^'"]+(?:'|").*?value='([a-z0-9]+)""") if code: - page = httptools.downloadpage('http://akvideo.stream/video/' + code) + page = httptools.downloadpage('http://akvideo.stream/video/' + code, headers=headers) else: return False, config.get_localized_string(70449) % "Akvideo" + + if 'video.php?file_code=' in page.url: + page = httptools.downloadpage(page.url.replace('video.php?file_code=', 'video/'), headers=headers) data = page.data # ID, code = scrapertools.find_single_match(data, r"""input\D*id=(?:'|")([^'"]+)(?:'|").*?value='([a-z0-9]+)""")