diff --git a/core/scrapertools.py b/core/scrapertools.py index a8466832..07b59bea 100644 --- a/core/scrapertools.py +++ b/core/scrapertools.py @@ -504,3 +504,49 @@ def title_unify(title): u_title = spl[0] if len(spl[0]) > 5 else spl[1] return u_title.strip() + + +def girc(page_data, url, co): + """ + Code adapted from https://github.com/vb6rocod/utils/ + Copyright (C) 2019 vb6rocod + and https://github.com/addon-lab/addon-lab_resolver_Project + Copyright (C) 2021 ADDON-LAB, KAR10S + """ + import re + from core import httptools + hdrs = {'Referer': url} + rurl = 'https://www.google.com/recaptcha/api.js' + aurl = 'https://www.google.com/recaptcha/api2' + key = re.search(r'(?:src="{0}\?.*?render|data-sitekey)="?([^"]+)'.format(rurl), page_data) + if key: + key = key.group(1) + rurl = '{0}?render={1}'.format(rurl, key) + page_data1 = httptools.downloadpage(rurl, headers=hdrs).data + v = re.findall('releases/([^/]+)', page_data1)[0] + rdata = {'ar': 1, + 'k': key, + 'co': co, + 'hl': 'en', + 'v': v, + 'size': 'invisible', + 'cb': '123456789'} + page_data2 = httptools.downloadpage('{0}/anchor?{1}'.format(aurl, httptools.urlparse.urlencode(rdata)), headers=hdrs).data + rtoken = re.search('recaptcha-token.+?="([^"]+)', page_data2) + if rtoken: + rtoken = rtoken.group(1) + else: + return '' + pdata = {'v': v, + 'reason': 'q', + 'k': key, + 'c': rtoken, + 'sa': '', + 'co': co} + hdrs.update({'Referer': aurl}) + page_data3 = httptools.downloadpage('{0}/reload?k={1}'.format(aurl, key), post=pdata, headers=hdrs).data + gtoken = re.search('rresp","([^"]+)', page_data3) + if gtoken: + return gtoken.group(1) + + return '' diff --git a/servers/streamsb.json b/servers/streamsb.json index e1d2783d..195264b5 100644 --- a/servers/streamsb.json +++ b/servers/streamsb.json @@ -4,12 +4,12 @@ "ignore_urls": [], "patterns": [ { - "pattern": "(?:streamsb|sbembed|sbembed1|sbplay1|sbplay|pelistop|tubesb|playersb|embedsb|watchsb).\\w{2,4}/(?:embed-|d/|e/)?([A-z0-9]+)", - "url": "https://streamsb.net/\\1" + "pattern": "(?:streamsb|sbembed|sbembed1|sbplay1|sbplay|pelistop|tubesb|playersb|embedsb|watchsb|streamas).\\w{2,5}/(?:embed-|d/|e/)?([A-z0-9]+)", + "url": "https://streamsb.net/d/\\1" }, { "pattern": "(?:cloudemb.com)/([A-z0-9]+)", - "url": "https://streamsb.net/\\1" + "url": "https://streamsb.net/d/\\1" } ] }, diff --git a/servers/streamsb.py b/servers/streamsb.py index 63592615..9ee2c514 100644 --- a/servers/streamsb.py +++ b/servers/streamsb.py @@ -2,10 +2,8 @@ # https://github.com/tvaddonsco/script.module.urlresolver/blob/master/lib/urlresolver/plugins/streamsb.py from core import httptools, scrapertools -from platformcode import config, logger -import time - -host = 'streamsb.net' +from platformcode import config +import base64 def test_video_exists(page_url): @@ -21,8 +19,8 @@ def test_video_exists(page_url): def get_video_url(page_url, premium=False, user="", password="", video_password=""): video_urls = [] global data + host = scrapertools.get_domain_from_url(page_url) sources = scrapertools.find_multiple_matches(data, r'download_video([^"]+)[^\d]+\d+x(\d+)') - time.sleep(1) if sources: sources.sort(key=lambda x: int(x[1]), reverse=True) sources = [(x[1] + 'p', x[0]) for x in sources] @@ -30,9 +28,14 @@ def get_video_url(page_url, premium=False, user="", password="", video_password= code, mode, hash = eval(s[1]) dl_url = 'https://{0}/dl?op=download_orig&id={1}&mode={2}&hash={3}'.format(host, code, mode, hash) data = httptools.downloadpage(dl_url).data - media_url = scrapertools.find_single_match(data, 'href="([^"]+)">Direct') - if media_url: - video_urls.append([s[0], media_url]) + + captcha = scrapertools.girc(data, 'https://{0}/'.format(host), base64.b64encode('https://{0}:443'.format(host).encode('utf-8')).decode('utf-8').replace('=', '')) + if captcha: + data = httptools.downloadpage(dl_url, post={'op': 'download_orig', 'id': code, 'mode': mode, + 'hash': hash, 'g-recaptcha-response': captcha}, timeout=10).data + media_url = scrapertools.find_single_match(data, 'href="([^"]+)">Direct') + if media_url: + video_urls.append([s[0], media_url]) return video_urls