./ 0000775 0001754 0001752 00000000000 14601227364 010546 5 ustar atemio atemio ./mixdrop.py 0000664 0001754 0001752 00000010656 14601227212 012602 0 ustar atemio atemio import re import sys import time from lib.net import Net import re, urllib, json from lib import helpers import lib.common as common from lib import jsunpack class MixdropResolver(object): name = "mixdrop" domains = ["mixdrop.co", "mixdrop.to"] pattern = r'(?://|\.)(mixdrop\.[ct]o)/(?:f|e)/(\w+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.FF_USER_AGENT} response = self.net.http_GET(web_url, headers=headers) html = self.net.http_GET(web_url, headers=headers).content # print "html", html js_data = re.findall('(eval\(function.*?)', html.replace('\n', '')) # print "js_data1", js_data for i in js_data: html += jsunpack.unpack(i) # print "html", html #MDCore.poster="//s-delivery10.mxdcontent.net/thumbs/18a6675ac1932f50e07887c3daf25a8b.jpg";MDCore.furl="//s-delivery10.mxdcontent.net/v/18a6675ac1932f50e07887c3daf25a8b.mp4?s=1W53dLLMYoBJ_x-Nv73_FA&e=1578351242";MDCore.vfile="18a6675ac1932f50e07887c3daf25a8b.mp4";MDCore.vserver="s-delivery10";MDCore.remotesub="";MDCore.chromeInject="0";MDCore.referrer="";$(document).ready(function(){setTimeout(function(){$("body").append("")},120000);setTimeout(function(){$("body").append("")},120000);setTimeout(function(){$("body").append("")},120000);setTimeout(function(){$("body").append("")},120000);setTimeout(function(){$("body").append("")},120000);setTimeout(function(){$("body").append("")},120000)}); match = re.search('MDCore.furl="([^"].*)";MDCore.vfile=', html) if match: match = re.search('MDCore.wurl="([^"].*)";MDCore.vfile=', html).group(1) if match: headers = {'User-Agent': common.RAND_UA} if 'http:' not in match: print "https:%s" % (match) + helpers.append_headers(headers) else: print "%s" % (match) + helpers.append_headers(headers) return match = re.search('MDCore.furl="([^"].*)";MDCore.vfile=', html).group(1) if match: headers = {'User-Agent': common.RAND_UA} if 'http:' not in match: print "https:%s" % (match) + helpers.append_headers(headers) else: print "%s" % (match) + helpers.append_headers(headers) return if '(p,a,c,k,e,d)' in html: html = helpers.get_packed_data(html) r = re.search(r'vsr[^=]+=\s*"([^"]+)', html) if r: headers = {'User-Agent': common.RAND_UA} print "https:" + r.group(1) + helpers.append_headers(headers) else: print 'errormsg=File Not Found or removed' def get_url(self, host, media_id): return 'https://%s/e/%s' % (host, media_id) sys.stdout = MixdropResolver() ./nowvideo.py 0000664 0001754 0001752 00000004413 14601227212 012744 0 ustar atemio atemio import sys import re from lib.net import Net import lib.common as common from lib import helpers class NowvideoResolver(object): name = "nowvideo" domains = ['nowvideo.eu', 'nowvideo.ch', 'nowvideo.sx', 'nowvideo.co', 'nowvideo.li', 'nowvideo.fo', 'nowvideo.at', 'nowvideo.ec'] pattern = '(?://|\.)(nowvideo\.(?:eu|ch|sx|co|li|fo|at|ec))/(?:video/|embed\.php\?\S*v=|embed/\?v=)([A-Za-z0-9]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.FF_USER_AGENT} stream_url = '' html = self.net.http_GET(web_url, headers=headers).content try: r = re.search('flashvars.filekey=(.+?);', html) if r: r = r.group(1) try: filekey = re.compile('\s+%s="(.+?)"' % r).findall(html)[-1] except: filekey = r player_url = 'http://www.nowvideo.sx/api/player.api.php?key=%s&file=%s' % (filekey, media_id) html = self.net.http_GET(player_url).content r = re.search('url=(.+?)&', html) if r: stream_url = r.group(1) except: print "no embedded urls found using first method" try: r = re.search('id="player".*?src="(.*?)"', html, re.DOTALL) if r: stream_url = r.group(1) except: print "no embedded urls found using second method" if stream_url: headers.update({'Referer': web_url, }) print stream_url + helpers.append_headers(headers) # print stream_url + helpers.append_headers({'Referer': web_url}) def get_url(self, host, media_id): return 'http://embed.nowvideo.sx/embed/?v=%s' % media_id sys.stdout = NowvideoResolver() ./streamz.py 0000664 0001754 0001752 00000003644 14601227212 012604 0 ustar atemio atemio import sys import re from lib import jsunpack from lib.net import Net class StreamzResolver(object): name = "streamz" domains = ['streamz.cc|streamcrypt.net'] pattern = r'(?://|\.)(streamz\.cc|streamcrypt\.net)/([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id, url) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id, url): web_url = self.get_url(host, media_id, url) # print "web_url", web_url html = self.net.http_GET(web_url).content js_data = re.findall('(eval\(function.*?)', html.replace('\n', '')) # print "js_data1", js_data for i in js_data: html += jsunpack.unpack(i) # print "js_data2", js_data # print "html", html #var video=videojs("video_1");video.src({type:\'video/mp4\',src:\'https://streamz.cc/getlink-197df2a579744943a23671891d481fa3.dll\'});var # var = re.search('video.src.*\[([^;]+)\];', html) match = re.findall('''["']?src:['"]?\s*:\s*\[(.*?)\]''', html) # print "match", match match = re.findall("var video(.+?)'", html) # print "match", match match = re.findall("var video(.+?)\}\);var", html) # print "match", match match = re.findall(",src:\\\\'(.+?)\\\\'", html) print match[0] # if match: # stream_url = re.findall('''['"]?file['"]?\s*:\s*['"]?([^'"]+)''', match[0]) # if stream_url: # print stream_url[-1] def get_url(self, host, media_id, url): # return 'http://%s/%s' % (host,media_id) return '%s' % (url) sys.stdout = StreamzResolver() ./openload.py 0000664 0001754 0001752 00000073142 14601227212 012720 0 ustar atemio atemio # -*- coding: utf-8 -*- # Based on (root)/trunk/xbmc-addons/src/plugin.video.polishtv.live/hosts/ @ 419 - Wersja 636 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8') import os import hashlib import sys from lib.net import Net import re import lib.ol_gmu as ol_gmu import lib.common as common import json from lib import jsunpack ################################################### import re import time import urllib import socket import string import base64 import math import lib.jjdecode as JJDecoder #OL_SOURCE = 'https://offshoregit.com/tvaresolvers/ol_gmu.py' OL_PATH = '' API_BASE_URL = 'https://api.openload.co/1' INFO_URL = API_BASE_URL + '/streaming/info' GET_URL = API_BASE_URL + '/streaming/get?file={media_id}' #OL_PATH = os.path.join(common.plugins_path, 'ol_gmu.py') import urllib import urllib2 try: import ssl except Exception: pass import re import string import time import htmlentitydefs import cookielib import unicodedata #import urllib2_ssl #try: import json #except Exception: import simplejson as json #try: # try: from cStringIO import StringIO # except Exception: from StringIO import StringIO # import gzip class OpenLoadResolver(object): name = "openload" # domains = ["openload.io", "openload.co"] # pattern = '(?://|\.)(openload\.(?:io|co))/(?:embed|f)/([0-9a-zA-Z-_]+)' domains = ["openload.io", "openload.co", "oload.tv", "oload.stream"] pattern = '(?://|\.)(o(?:pen)??load\.(?:io|co|tv|stream))/(?:embed|f)/([0-9a-zA-Z-_]+)' def __init__(self): self.net = Net(cookie_file='/mnt/network/cookies', cloudflare=True) self.headers = {'User-Agent': common.ANDROID_USER_AGENT} url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def i18n(string_id): try: return addon.getLocalizedString(strings.STRINGS[string_id]).encode('utf-8', 'ignore') except Exception as e: # log_utils.log('Failed String Lookup: %s (%s)' % (string_id, e)) return string_id def get_ol_code(self): try: new_py = self.net.http_GET(OL_SOURCE).content # common.log_utils.log('new_py: %s' % (new_pya)) if new_py: with open(OL_PATH, 'w') as f: f.write(new_py) except Exception as e: print 'errormsg=Exception during openload code retrieve:' # common.log_utils.log_warning('Exception during openload code retrieve: %s' % e) def decode1(self, encoded): tab = encoded.split('\\') ret = '' for item in tab: try: ret += chr(int(item, 8)) except Exception: ret += item return ret def base10toN(self, num,n): 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'} new_num_string='' current=num while current!=0: remainder=current%n if 36>remainder>9: remainder_string=num_rep[remainder] elif remainder>=36: remainder_string='('+str(remainder)+')' else: remainder_string=str(remainder) new_num_string=remainder_string+new_num_string current=current/n return new_num_string def decodeOpenLoad(self, aastring): # decodeOpenLoad made by mortael, please leave this line for proper credit :) #aastring = re.search(r"]*?>((?:.|\s)*?) 2: n1P = node1[2] else: n1P = None n2S = node2[0] n2E = node2[1] if len(node2) > 2: n2P = node2[2] else: n2P = None lastIdx = 0 search = 1 if caseSensitive: sData = data else: sData = data.lower() n1S = n1S.lower() n1E = n1E.lower() if n1P != None: n1P = n1P.lower() n2S = n2S.lower() n2E = n2E.lower() if n2P != None: n2P = n2P.lower() while True: if search == 1: # node 1 - start idx1 = sData.find(n1S, lastIdx) if -1 == idx1: return itemsTab lastIdx = idx1 + len(n1S) idx2 = sData.find(n1E, lastIdx) if -1 == idx2: return itemsTab lastIdx = idx2 + len(n1E) if n1P != None and sData.find(n1P, idx1 + len(n1S), idx2) == -1: continue search = 2 else: # node 2 - end tIdx1 = sData.find(n2S, lastIdx) if -1 == tIdx1: return itemsTab lastIdx = tIdx1 + len(n2S) tIdx2 = sData.find(n2E, lastIdx) if -1 == tIdx2: return itemsTab lastIdx = tIdx2 + len(n2E) if n2P != None and sData.find(n2P, tIdx1 + len(n2S), tIdx2) == -1: continue if withNodes: idx2 = tIdx2 + len(n2E) else: idx1 = idx2 + len(n1E) idx2 = tIdx1 search = 1 itemsTab.append(data[idx1:idx2]) if numNodes > 0 and len(itemsTab) == numNodes: break return itemsTab def getAllItemsBeetwenMarkers(self, data, marker1, marker2, withMarkers=True, caseSensitive=True): itemsTab = [] if caseSensitive: sData = data else: sData = data.lower() marker1 = marker1.lower() marker2 = marker2.lower() idx1 = 0 while True: idx1 = sData.find(marker1, idx1) if -1 == idx1: return itemsTab idx2 = sData.find(marker2, idx1 + len(marker1)) if -1 == idx2: return itemsTab tmpIdx2 = idx2 + len(marker2) if withMarkers: idx2 = tmpIdx2 else: idx1 = idx1 + len(marker1) itemsTab.append(data[idx1:idx2]) idx1 = tmpIdx2 return itemsTab def getSearchGroups(self, data, pattern, grupsNum=1, ignoreCase=False): tab = [] if ignoreCase: match = re.search(pattern, data, re.IGNORECASE) else: match = re.search(pattern, data) for idx in range(grupsNum): try: value = match.group(idx + 1) except Exception: value = '' tab.append(value) return tab def getPage(self, url, addParams = {}, post_data = None): ''' wraps getURLRequestData ''' try: addParams['url'] = url if 'return_data' not in addParams: addParams['return_data'] = True response = self.getURLRequestData(addParams, post_data) status = True except urllib2.HTTPError, e: # printExc() response = e status = False except Exception: # printExc() response = None status = False if addParams['return_data'] and status and not isinstance(response, basestring): status = False return (status, response) def GetTmpDir(self, file = ''): path = "/tmp/" path = path.replace('//', '/') self.mkdirs(path) return path + '/' + file def GetDukPath(self): # return "/tmp/localhoster/bin/duk.arm" arch = self.command("cat /etc/.arch") # print "arch", arch return "/tmp/localhoster/bin/duk.%s" % (arch) # return "/tmp/localhoster/bin/duk.sh4" # return config.plugins.iptvplayer.dukpath.value def iptv_js_execute(self, jscode): sts, tmpPath = self.CreateTmpFile('.iptv_js.js', jscode) if sts: cmd = self.GetDukPath() + ' ' + tmpPath + ' 2> /dev/null' # printDBG("iptv_js_execute cmd[%s]" % cmd) # print "iptv_js_execute cmd[%s]" % cmd # test = self.command(cmd); # print "test", test ret = self.command(cmd); # print "test3", os.system(cmd); # ret = iptv_execute()( cmd ) # ret = {'sts':False, 'code':-12, 'data':''} # leave last script for debug purpose # if getDebugMode() == '': # rm(tmpPath) else: ret = {'sts':False, 'code':-12, 'data':''} # printDBG('iptv_js_execute cmd ret[%s]' % ret) # print 'iptv_js_execute cmd ret[%s]' % ret return ret def mkdirs(self, newdir): """ Create a directory and all parent folders. Features: - parent directories will be created - if directory already exists, then do nothing - if there is another filsystem object with the same name, raise an exception """ # printDBG('mkdirs: "%s"' % newdir) # print 'mkdirs: "%s"' % newdir try: if os.path.isdir(newdir): pass elif os.path.isfile(newdir): # raise OSError("cannot create directory, file already exists: '%s'" % newdir) raise #print "cannot create directory, file already exists: '%s'" % newdir else: head, tail = os.path.split(newdir) if head and not os.path.isdir(head) and not os.path.ismount(head) and not os.path.islink(head): mkdirs(head) if tail: os.mkdir(newdir) return True except Exception: # printExc('!!!!!!!!!! EXCEPTION mkdirs["%s"]' % newdir) print '!!!!!!!!!! EXCEPTION mkdirs["%s"]' % newdir return False def CreateTmpFile(self, filename, data=''): sts = False filePath = self.GetTmpDir(filename) try: with open(filePath, 'w') as f: f.write(data) sts = True except Exception: printExc() return sts, filePath def getDataBeetwenMarkers(self, data, marker1, marker2, withMarkers=True, caseSensitive=True): if caseSensitive: idx1 = data.find(marker1) else: idx1 = data.lower().find(marker1.lower()) if -1 == idx1: return False, '' if caseSensitive: idx2 = data.find(marker2, idx1 + len(marker1)) else: idx2 = data.lower().find(marker2.lower(), idx1 + len(marker1)) if -1 == idx2: return False, '' if withMarkers: idx2 = idx2 + len(marker2) else: idx1 = idx1 + len(marker1) return True, data[idx1:idx2] # edit bb , touch commands.getouput with this def # def command(self, comandline, strip=1): comandline = comandline + " >/tmp/command.txt" os.system(comandline) text = "" if os.path.exists("/tmp/command.txt") is True: file = open("/tmp/command.txt", "r") if strip == 1: for line in file: text = text + line.strip() + '\n' else: for line in file: text = text + line if text[-1:] != '\n': text = text + "\n" file.close # if one or last line then remove linefeed if text[-1:] == '\n': text = text[:-1] comandline = text os.system("rm /tmp/command.txt") return comandline def decode(self,code, parseInt, _0x59ce16, _1x4bfb36): import math _0x1bf6e5 = '' ke = [] for i in range(0, len(code[0:9*8]),8): ke.append(int(code[i:i+8],16)) _0x439a49 = 0 _0x145894 = 0 while _0x439a49 < len(code[9*8:]): _0x5eb93a = 64 _0x896767 = 0 _0x1a873b = 0 _0x3c9d8e = 0 while True: if _0x439a49 + 1 >= len(code[9*8:]): _0x5eb93a = 143; _0x3c9d8e = int(code[9*8+_0x439a49:9*8+_0x439a49+2], 16) _0x439a49 +=2 if _0x1a873b < 6*5: _0x332549 = _0x3c9d8e & 63 _0x896767 += _0x332549 << _0x1a873b else: _0x332549 = _0x3c9d8e & 63 _0x896767 += int(_0x332549 * math.pow(2, _0x1a873b)) _0x1a873b += 6 if not _0x3c9d8e >= _0x5eb93a: break # _0x30725e = _0x896767 ^ ke[_0x145894 % 9] ^ _0x59ce16 ^ parseInt ^ _1x4bfb36 _0x30725e = _0x896767 ^ ke[_0x145894 % 9] ^ parseInt ^ _1x4bfb36 _0x2de433 = _0x5eb93a * 2 + 127 for i in range(4): _0x3fa834 = chr(((_0x30725e & _0x2de433) >> (9*8/ 9)* i) - 1) if _0x3fa834 != '$': _0x1bf6e5 += _0x3fa834 _0x2de433 = (_0x2de433 << (9*8/ 9)) _0x145894 += 1 url = "https://openload.co/stream/%s?mime=true" % _0x1bf6e5 return url def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) # web_url = "https://openload.co/embed/SVMiyZR_yM4/Game_of_Thrones_S07E07_Der_Drache_und_der_Wolf_German_AC3_Dubbed_AmazonHD.mkv" # web_url = "https://openload.co/embed/8ATYb_yCakU/pso-atomic_ts.sd.mkv" headers = { 'Referer': web_url } headers.update(self.headers) data = self.net.http_GET(web_url, headers=headers).content ret = self.net.save_cookies('/mnt/network/cookies') # print "data", data baseUrl = web_url # baseUrl = "https://openload.co/embed/SVMiyZR_yM4/Game_of_Thrones_S07E07_Der_Drache_und_der_Wolf_German_AC3_Dubbed_AmazonHD.mkv" HTTP_HEADER= { 'User-Agent':"Mozilla/5.0", 'Referer':baseUrl} 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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Referer':baseUrl} #'Connection': 'keep-alive' # sts, data = self.getPage(baseUrl, {'header':HTTP_HEADER}) # data = self.net.http_GET(web_url, headers=headers).content orgData = data # print "data", data #################### videoTab = [] code = self.getSearchGroups(data, '(.*?)' )[0] _0x59ce16 = eval(self.getSearchGroups(data, '_0x59ce16=([^;]+)')[0].replace('parseInt', 'int')) _1x4bfb36 = eval(self.getSearchGroups(data, '_1x4bfb36=([^;]+)')[0].replace('parseInt', 'int')) parseInt = eval(self.getSearchGroups(data, '_0x30725e,(\(parseInt.*?)\),')[0].replace('parseInt', 'int')) url = self.decode(code, parseInt, _0x59ce16, _1x4bfb36) print url return None #url2 = self.cm.getPage(url).headers.get('location') #print "url2",url2 #videoTab.append(('mp4',url)) #videoTab.append({'url': url, 'name': 'openload.co (mp4)'}) #print "videoTab",videoTab #return videoTab # sts, data = self.cm.getPage(url, defaultParams) # print "data",data #################### # print "222222222222222222222222" if re.search('Sorry!', data): print 'errormsg=%s %s' % (str(re.compile('(.*)').findall(data)[0]), str(re.compile('(.*)').findall(data)[0])) subTracksData = self.getAllItemsBeetwenMarkers(data, '', False, False) subTracks = [] for track in subTracksData: if 'kind="captions"' not in track: continue subUrl = self.getSearchGroups(track, 'src="([^"]+?)"')[0] # print "suburl", subUrl if subUrl.startswith('/'): subUrl = 'http://openload.co' + subUrl if subUrl.startswith('http'): subLang = self.getSearchGroups(track, 'srclang="([^"]+?)"')[0] subLabel = self.getSearchGroups(track, 'label="([^"]+?)"')[0] subTracks.append({'title':subLabel + '_' + subLang, 'url':subUrl, 'lang':subLang, 'format':'srt'}) videoUrl = '' tmp = self.getAllItemsBeetwenNodes(data, ('', 'display:none'), ('')) for item in tmp: encTab = re.compile('''<[^>]+?id="[^"]*?"[^>]*?>([^<]+?)<''').findall(data) for e in encTab: if len(e) > 40: encTab.insert(0, e) break def __decode_k(enc, jscode): decoded = '' tmpPath = '' try: jscode = base64.b64decode('''ICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSAiJXMiDQogICAgICAgICAgICAgICAgICAgICAgLCBkZWNvZGVkDQogICAgICAgICAgICAgICAgICAgICAgLCBkb2N1bWVudCA9IHt9DQogICAgICAgICAgICAgICAgICAgICAgLCB3aW5kb3cgPSB0aGlzDQogICAgICAgICAgICAgICAgICAgICAgLCAkID0gZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbihhKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBhOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeTogZnVuY3Rpb24oYSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihkLCB3KXsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKCl7fTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZGYgPSBbJ2Nsb3NlJywnY3JlYXRlQXR0cmlidXRlJywnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCcsJ2NyZWF0ZUVsZW1lbnQnLCdjcmVhdGVFbGVtZW50TlMnLCdjcmVhdGVFdmVudCcsJ2NyZWF0ZU5TUmVzb2x2ZXInLCdjcmVhdGVSYW5nZScsJ2NyZWF0ZVRleHROb2RlJywnY3JlYXRlVHJlZVdhbGtlcicsJ2V2YWx1YXRlJywnZXhlY0NvbW1hbmQnLCdnZXRFbGVtZW50QnlJZCcsJ2dldEVsZW1lbnRzQnlOYW1lJywnZ2V0RWxlbWVudHNCeVRhZ05hbWUnLCdpbXBvcnROb2RlJywnb3BlbicsJ3F1ZXJ5Q29tbWFuZEVuYWJsZWQnLCdxdWVyeUNvbW1hbmRJbmRldGVybScsJ3F1ZXJ5Q29tbWFuZFN0YXRlJywncXVlcnlDb21tYW5kVmFsdWUnLCd3cml0ZScsJ3dyaXRlbG4nXTsNCiAgICAgICAgICAgICAgICAgICAgICBkZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RbZV09Zjt9KTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9fID0gWydhbmNob3JzJywnYXBwbGV0cycsJ2JvZHknLCdkZWZhdWx0VmlldycsJ2RvY3R5cGUnLCdkb2N1bWVudEVsZW1lbnQnLCdlbWJlZHMnLCdmaXJzdENoaWxkJywnZm9ybXMnLCdpbWFnZXMnLCdpbXBsZW1lbnRhdGlvbicsJ2xpbmtzJywnbG9jYXRpb24nLCdwbHVnaW5zJywnc3R5bGVTaGVldHMnXTsNCiAgICAgICAgICAgICAgICAgICAgICBkb18uZm9yRWFjaChmdW5jdGlvbihlKXtkW2VdPW87fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGRzID0gWydVUkwnLCdjaGFyYWN0ZXJTZXQnLCdjb21wYXRNb2RlJywnY29udGVudFR5cGUnLCdjb29raWUnLCdkZXNpZ25Nb2RlJywnZG9tYWluJywnbGFzdE1vZGlmaWVkJywncmVmZXJyZXInLCd0aXRsZSddOw0KICAgICAgICAgICAgICAgICAgICAgIGRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1zO30pOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciB3YiA9IFsnY2xvc2VkJywnaXNTZWN1cmVDb250ZXh0J107DQogICAgICAgICAgICAgICAgICAgICAgd2IuZm9yRWFjaChmdW5jdGlvbihlKXt3W2VdPWI7fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIHdmID0gWydhZGRFdmVudExpc3RlbmVyJywnYWxlcnQnLCdhdG9iJywnYmx1cicsJ2J0b2EnLCdjYW5jZWxBbmltYXRpb25GcmFtZScsJ2NhcHR1cmVFdmVudHMnLCdjbGVhckludGVydmFsJywnY2xlYXJUaW1lb3V0JywnY2xvc2UnLCdjb25maXJtJywnY3JlYXRlSW1hZ2VCaXRtYXAnLCdkaXNwYXRjaEV2ZW50JywnZmV0Y2gnLCdmaW5kJywnZm9jdXMnLCdnZXRDb21wdXRlZFN0eWxlJywnZ2V0U2VsZWN0aW9uJywnbWF0Y2hNZWRpYScsJ21vdmVCeScsJ21vdmVUbycsJ29wZW4nLCdwb3N0TWVzc2FnZScsJ3Byb21wdCcsJ3JlbGVhc2VFdmVudHMnLCdyZW1vdmVFdmVudExpc3RlbmVyJywncmVxdWVzdEFuaW1hdGlvbkZyYW1lJywncmVzaXplQnknLCdyZXNpemVUbycsJ3Njcm9sbCcsJ3Njcm9sbEJ5Jywnc2Nyb2xsVG8nLCdzZXRJbnRlcnZhbCcsJ3NldFRpbWVvdXQnLCdzdG9wJ107DQogICAgICAgICAgICAgICAgICAgICAgd2YuZm9yRWFjaChmdW5jdGlvbihlKXt3W2VdPWY7fSk7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIHduID0gWydkZXZpY2VQaXhlbFJhdGlvJywnaW5uZXJIZWlnaHQnLCdpbm5lcldpZHRoJywnbGVuZ3RoJywnb3V0ZXJIZWlnaHQnLCdvdXRlcldpZHRoJywncGFnZVhPZmZzZXQnLCdwYWdlWU9mZnNldCcsJ3NjcmVlblgnLCdzY3JlZW5ZJywnc2Nyb2xsWCcsJ3Njcm9sbFknXTsNCiAgICAgICAgICAgICAgICAgICAgICB3bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3dbZV09bjt9KTsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgd28gPSBbJ2FwcGxpY2F0aW9uQ2FjaGUnLCdjYWNoZXMnLCdjcnlwdG8nLCdleHRlcm5hbCcsJ2ZyYW1lRWxlbWVudCcsJ2ZyYW1lcycsJ2hpc3RvcnknLCdpbmRleGVkREInLCdsb2NhbFN0b3JhZ2UnLCdsb2NhdGlvbicsJ2xvY2F0aW9uYmFyJywnbWVudWJhcicsJ25hdmlnYXRvcicsJ29uYWJvcnQnLCdvbmFuaW1hdGlvbmVuZCcsJ29uYW5pbWF0aW9uaXRlcmF0aW9uJywnb25hbmltYXRpb25zdGFydCcsJ29uYmVmb3JldW5sb2FkJywnb25ibHVyJywnb25jYW5wbGF5Jywnb25jYW5wbGF5dGhyb3VnaCcsJ29uY2hhbmdlJywnb25jbGljaycsJ29uY29udGV4dG1lbnUnLCdvbmRibGNsaWNrJywnb25kZXZpY2Vtb3Rpb24nLCdvbmRldmljZW9yaWVudGF0aW9uJywnb25kcmFnJywnb25kcmFnZW5kJywnb25kcmFnZW50ZXInLCdvbmRyYWdsZWF2ZScsJ29uZHJhZ292ZXInLCdvbmRyYWdzdGFydCcsJ29uZHJvcCcsJ29uZHVyYXRpb25jaGFuZ2UnLCdvbmVtcHRpZWQnLCdvbmVuZGVkJywnb25lcnJvcicsJ29uZm9jdXMnLCdvbmhhc2hjaGFuZ2UnLCdvbmlucHV0Jywnb25pbnZhbGlkJywnb25rZXlkb3duJywnb25rZXlwcmVzcycsJ29ua2V5dXAnLCdvbmxhbmd1YWdlY2hhbmdlJywnb25sb2FkJywnb25sb2FkZWRkYXRhJywnb25sb2FkZWRtZXRhZGF0YScsJ29ubG9hZHN0YXJ0Jywnb25tZXNzYWdlJywnb25tb3VzZWRvd24nLCdvbm1vdXNlZW50ZXInLCdvbm1vdXNlbGVhdmUnLCdvbm1vdXNlbW92ZScsJ29ubW91c2VvdXQnLCdvbm1vdXNlb3ZlcicsJ29ubW91c2V1cCcsJ29ub2ZmbGluZScsJ29ub25saW5lJywnb25wYWdlaGlkZScsJ29ucGFnZXNob3cnLCdvbnBhdXNlJywnb25wbGF5Jywnb25wbGF5aW5nJywnb25wb3BzdGF0ZScsJ29ucHJvZ3Jlc3MnLCdvbnJhdGVjaGFuZ2UnLCdvbnJlc2V0Jywnb25yZXNpemUnLCdvbnNjcm9sbCcsJ29uc2Vla2VkJywnb25zZWVraW5nJywnb25zZWxlY3QnLCdvbnNob3cnLCdvbnN0YWxsZWQnLCdvbnN0b3JhZ2UnLCdvbnN1Ym1pdCcsJ29uc3VzcGVuZCcsJ29udGltZXVwZGF0ZScsJ29udG9nZ2xlJywnb250cmFuc2l0aW9uZW5kJywnb251bmxvYWQnLCdvbnZvbHVtZWNoYW5nZScsJ29ud2FpdGluZycsJ29ud2Via2l0YW5pbWF0aW9uZW5kJywnb253ZWJraXRhbmltYXRpb25pdGVyYXRpb24nLCdvbndlYmtpdGFuaW1hdGlvbnN0YXJ0Jywnb253ZWJraXR0cmFuc2l0aW9uZW5kJywnb253aGVlbCcsJ29wZW5lcicsJ3BhcmVudCcsJ3BlcmZvcm1hbmNlJywncGVyc29uYWxiYXInLCdzY3JlZW4nLCdzY3JvbGxiYXJzJywnc2VsZicsJ3Nlc3Npb25TdG9yYWdlJywnc3BlZWNoU3ludGhlc2lzJywnc3RhdHVzYmFyJywndG9vbGJhcicsJ3RvcCddOw0KICAgICAgICAgICAgICAgICAgICAgIHdvLmZvckVhY2goZnVuY3Rpb24oZSl7d1tlXT1vO30pOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciB3cyA9IFsnbmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgIHdzLmZvckVhY2goZnVuY3Rpb24oZSl7d1tlXT1zO30pOw0KICAgICAgICAgICAgICAgICAgICB9KShkb2N1bWVudCwgd2luZG93KTsNCiAgICAgICAgICAgICAgICAgICAgJXM7DQogICAgICAgICAgICAgICAgICAgIHByaW50KGRlY29kZWQpOw==''') % (enc, jscode) # printDBG("+++++++++++++++++++++++ CODE ++++++++++++++++++++++++") # printDBG(jscode) # printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++") # print "+++++++++++++++++++++++ CODE ++++++++++++++++++++++++" # print jscode # print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++" # return self.iptv_js_execute( jscode ) return self.iptv_js_execute( jscode ) # ret = self.iptv_js_execute( jscode ) # if ret['sts'] and 0 == ret['code']: # decoded = ret['data'].strip() # printDBG('DECODED DATA -> [%s]' % decoded) except Exception: # printExc() print "__decode_k error" #rm(tmpPath) return decoded # marker = '゚ω゚ノ= /`m´)ノ' marker = '゚ω゚ノ= /`m' # marker = '゚ω゚' orgData = marker + self.getDataBeetwenMarkers(orgData, marker, marker, False)[1] orgData = re.sub('''if\s*\([^\}]+?typeof[^\}]+?\}''', '', orgData) orgData = re.sub('''if\s*\([^\}]+?document[^\}]+?\}''', '', orgData) # dec = self.__decode_k(encTab[0], orgData) dec = __decode_k(encTab[0], orgData) videoUrl = 'https://openload.co/stream/{0}?mime=true'.format(dec) params = dict(HTTP_HEADER) params['external_sub_tracks'] = subTracks print videoUrl # print "params:", params def get_url(self, host, media_id): return 'https://openload.co/embed/%s' % (media_id) def __auth_ip(self, media_id): js_data = self.__get_json(INFO_URL) pair_url = js_data.get('result', {}).get('auth_url', '') if pair_url: pair_url = pair_url.replace('\/', '/') header = i18n('ol_auth_header') line1 = i18n('auth_required') line2 = i18n('visit_link') line3 = i18n('click_pair') % (pair_url) with common.kodi.CountdownDialog(header, line1, line2, line3) as cd: return cd.start(self.__check_auth, [media_id]) def __check_auth(self, media_id): try: js_data = self.__get_json(GET_URL.format(media_id=media_id)) except ResolverError as e: # except Exception as e: status, mscommandg = e if status == 403: print "errormsg=%s" % (e) return else: print "errormsg=%s" % (msg) # raise ResolverError(msg) return js_data.get('result', {}).get('url') def __get_json(self, url): result = self.net.http_GET(url).content js_result = json.loads(result) # common.log_utils.log_debug(js_result) # if js_result['status'] != 200: # raise ResolverError(js_result['status'], js_result['msg']) return js_result sys.stdout = OpenLoadResolver() ./nosvideo.py 0000664 0001754 0001752 00000002737 14601227212 012747 0 ustar atemio atemio import sys import re from lib.net import Net class NosvideoResolver(object): name = "nosvideo" domains = ["nosvideo.com", "noslocker.com"] pattern = '(?://|\.)(nosvideo.com|noslocker.com)/(?:\?v\=|embed/|.+?\u=)?([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content if 'File Not Found' in html: raise ResolverError('File Not Found') web_url = 'http://nosvideo.com/vj/video.php?u=%s&w=&h=530' % media_id html = self.net.http_GET(web_url).content smil_url = re.compile('\':\'(.+?)\'').findall(html) smil_url = [i for i in smil_url if '.smil' in i][0] html = self.net.http_GET(smil_url).content streamer = re.findall('base\s*=\s*"(.+?)"', html)[0] playpath = re.findall('src\s*=\s*"(.+?)"', html)[0] stream_url = '%s playpath=%s' % (streamer, playpath) print stream_url def get_url(self, host, media_id): return 'http://nosvideo.com/%s' % media_id sys.stdout = NosvideoResolver() ./pylist.tmp 0000664 0001754 0001752 00000000147 14601227364 012616 0 ustar atemio atemio common.py embedthumbnail.py execafterdownload.py ffmpeg.py __init__.py metadatafromtitle.py xattrpp.py ./streamango.py 0000664 0001754 0001752 00000010050 14601227212 013244 0 ustar atemio atemio import sys from lib.net import Net import re, urllib, json from lib import helpers import lib.common as common class StreamangoResolver(object): name = "streamango" domains = ['streamango.com', "streamcherry.com"] pattern = '(?://|\.)(stream(?:ango|cherry)\.com)/(?:v/d|f|embed)/([0-9a-zA-Z]+)' def __init__(self): # self.net = Net() # self.net = Net(cookie_file='/mnt/network/cookies', http_debug = True) self.net = Net(cookie_file='/mnt/network/cookies', http_debug = False) url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url1(self, host, media_id): web_url = self.get_url(host, media_id) link = self.net.http_GET(web_url).content if 'FILE WAS DELETED' in link: print 'File deleted.' else: video_link = str(re.compile('file[: ]*"(.+?)"').findall(link)[0]) if len(video_link) > 0: print video_link else: print 'errormsg=No playable video found.' def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.RAND_UA} # headers = {'User-Agent': common.FF_USER_AGENT} html = self.net.http_GET(web_url, headers=headers).content if html: # srces.push( {type:"video/mp4",src:d('keDN2p3bx6LdzqrO1JcSxaDTkZoRyuDbzaLN0KzR2qHQza7NyJ/U4N8Lld4IltoMlN3Cn98Sl90JkN=SlpHQ/K3YnqnW3uENltwA',93),height:360,bitrate:576}); encoded = re.search('''srces\.push\({type:"video/mp4",src:\w+\('([^']+)',(\d+)''', html) if not encoded: encoded = re.search('''srces\.push\( {type:"video/mp4",src:\w+\('([^']+)',(\d+)''', html) if encoded: source = self.decode(encoded.group(1), int(encoded.group(2))) if source: source = "http:%s" % source if source.startswith("//") else source source = source.split("/") if not source[-1].isdigit(): source[-1] = re.sub('[^\d]', '', source[-1]) source = "/".join(source) headers.update({'Referer': web_url}) print source + helpers.append_headers(headers) #Sorry! #We are unable to find the video you're looking for. There could be several reasons for this, for example it got removed by the owner. # # def decode(self, encoded, code): _0x59b81a = "" k = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' k = k[::-1] count = 0 for index in range(0, len(encoded) - 1): while count <= len(encoded) - 1: _0x4a2f3a = k.index(encoded[count]) count += 1 _0x29d5bf = k.index(encoded[count]) count += 1 _0x3b6833 = k.index(encoded[count]) count += 1 _0x426d70 = k.index(encoded[count]) count += 1 _0x2e4782 = ((_0x4a2f3a << 2) | (_0x29d5bf >> 4)) _0x2c0540 = (((_0x29d5bf & 15) << 4) | (_0x3b6833 >> 2)) _0x5a46ef = ((_0x3b6833 & 3) << 6) | _0x426d70 _0x2e4782 = _0x2e4782 ^ code _0x59b81a = str(_0x59b81a) + chr(_0x2e4782) if _0x3b6833 != 64: _0x59b81a = str(_0x59b81a) + chr(_0x2c0540) if _0x3b6833 != 64: _0x59b81a = str(_0x59b81a) + chr(_0x5a46ef) return _0x59b81a def get_url(self, host, media_id): if host.lower() == 'streamango.com': host = 'fruitstreams.com' return 'http://%s/embed/%s' % (host, media_id) sys.stdout = StreamangoResolver() ./videoweed.py 0000664 0001754 0001752 00000003066 14601227212 013070 0 ustar atemio atemio import re import sys from lib.net import Net class VideoweedResolver(object): name = 'videoweed.es' domains = ['bitvid.sx', 'videoweed.es', 'videoweed.com'] pattern = '(?://|\.)(bitvid.sx|videoweed.es|videoweed.com)/(?:mobile/video\.php\?id=|video/|embed/\?v=|embed\.php\?v=|file/)([0-9a-z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) html = self.net.http_GET(web_url).content stream_url = '' r = re.search('flashvars.filekey=(.+?);', html) if r: r = r.group(1) try: filekey = re.compile('\s+%s="(.+?)"' % r).findall(html)[-1] except: filekey = r player_url = 'http://www.bitvid.sx/api/player.api.php?key=%s&file=%s' % (filekey, media_id) html = self.net.http_GET(player_url).content r = re.search('url=(.+?)&', html) if r: stream_url = r.group(1) # else: # raise ResolverError('File Not Found or removed') print stream_url def get_url(self, host, media_id): return 'http://www.bitvid.sx/embed/?v=%s' % media_id sys.stdout = VideoweedResolver() ./vidto.py 0000664 0001754 0001752 00000003015 14601227212 012234 0 ustar atemio atemio import re import sys from lib.net import Net from lib import helpers import lib.common as common class VidtoResolver(object): name = "vidto" domains = ["vidto.me"] pattern = '(?://|\.)(vidto\.me)/(?:embed-)?([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.FF_USER_AGENT} html = self.net.http_GET(web_url, headers=headers).content html = helpers.add_packed_data(html) sources = [] for match in re.finditer('label:\s*"([^"]+)"\s*,\s*file:\s*"([^"]+)', html): label, stream_url = match.groups() sources.append((label, stream_url)) sources = sorted(sources, key=lambda x: x[0])[::-1] print helpers.pick_source(sources) + helpers.append_headers(headers) # print helpers.pick_source(sources) # raise ResolverError("File Link Not Found") # def get_url(self, host, media_id): # return self._default_get_url(host, media_id) def get_url(self, host, media_id): return 'http://%s/embed-%s.html' % (host, media_id) sys.stdout = VidtoResolver() ./vivo.py 0000664 0001754 0001752 00000002337 14601227212 012100 0 ustar atemio atemio import re import urllib from lib import jsunpack import sys from lib.net import Net import base64 import json from lib import helpers class VivoResolver(object): name = "vivosx" domains = ["vivo.sx"] pattern = '(?://|\.)(vivo\.sx)/([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) # get landing page resp = self.net.http_GET(web_url, headers={'Referer': web_url}) html = resp.content r = re.search(r'Core\.InitializeStream \(\'(.*?)\'\)', html) if not r: print 'page structure changed' b = base64.b64decode(r.group(1)) j = json.loads(b) if len(j) == 0: print 'video not found' print j[0] def get_url(self, host, media_id): return 'http://%s/%s' % (host, media_id) sys.stdout = VivoResolver() ./upstream.py 0000664 0001754 0001752 00000004040 14601227212 012746 0 ustar atemio atemio """ Plugin for UrlResolver Copyright (C) 2020 gujal, Anis3 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ #from urlresolver.plugins.__generic_resolver__ import GenericResolver #from urlresolver.plugins.lib import helpers import re import sys import time from lib.net import Net import re, urllib, json from lib import helpers import lib.common as common class UpStreamResolver(object): name = "upstream.to" domains = ['upstream.to'] pattern = r'(?://|\.)(upstream\.to)/(?:embed-)?([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): print helpers.get_media_url(self.get_url(host, media_id), patterns=[r'''sources:\s*\[(?:{file:)?\s*"(?P[^"]+)'''], generic_patterns=False, referer=False) def get_url(self, host, media_id): return 'https://%s/embed-%s.html' % (host, media_id) # def get_url(self, host, media_id): # return self._default_get_url(host, media_id, template='https://{host}/embed-{media_id}.html') sys.stdout = UpStreamResolver() ./divxstage.py 0000664 0001754 0001752 00000004323 14601227212 013110 0 ustar atemio atemio import sys import re from lib.net import Net import lib.common as common from lib import helpers class DivxstageResolver(object): name = 'divxstage' domains = ['divxstage.eu', 'divxstage.net', 'divxstage.to', 'cloudtime.to'] pattern = '(?://|\.)(divxstage.eu|divxstage.net|divxstage.to|cloudtime.to)/(?:video/|embed/\?v=)([A-Za-z0-9]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.FF_USER_AGENT} stream_url = '' html = self.net.http_GET(web_url, headers=headers).content try: r = re.search('flashvars.filekey=(.+?);', html) if r: r = r.group(1) try: filekey = re.compile('\s+%s="(.+?)"' % r).findall(html)[-1] except: filekey = r player_url = 'http://www.nowvideo.sx/api/player.api.php?key=%s&file=%s' % (filekey, media_id) html = self.net.http_GET(player_url).content r = re.search('url=(.+?)&', html) if r: stream_url = r.group(1) except: print "no embedded urls found using first method" try: r = re.search('id="player".*?src="(.*?)"', html, re.DOTALL) if r: stream_url = r.group(1) except: print "no embedded urls found using second method" if stream_url: headers.update({'Referer': web_url, }) print stream_url + helpers.append_headers(headers) # print stream_url + helpers.append_headers({'Referer': web_url}) def get_url(self, host, media_id): return 'http://www.cloudtime.to/embed/?v=%s' % media_id sys.stdout = DivxstageResolver() ./streamcloud.py 0000664 0001754 0001752 00000003535 14601227212 013440 0 ustar atemio atemio import re import sys import time from lib.net import Net import re, urllib, json from lib import helpers import lib.common as common class StreamcloudResolver(object): name = "streamcloud" domains = ["streamcloud.eu"] pattern = '(?://|\.)(streamcloud\.eu)/([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.FF_USER_AGENT} response = self.net.http_GET(web_url, headers=headers) html = response.content if re.search('>(File Not Found)<', html): print 'errormsg=File Not Found or removed' cnt = 10 match = re.search('count\s*=\s*(\d+);', html) if match: cnt = int(match.group(1)) cnt += 1 data = helpers.get_hidden(html) headers.update({'Referer': web_url}) # common.kodi.sleep(cnt * 1000) time.sleep(10) html = self.net.http_POST(response.get_url(), form_data=data, headers=headers).content sources = helpers.scrape_sources(html, patterns=['''file\s*:\s*["'](?P[^"']+)''']) # return helpers.pick_source(sources) + helpers.append_headers(headers) print helpers.pick_source(sources) + helpers.append_headers(headers) # print "%s%s" % (helpers.pick_source(sources), helpers.append_headers(headers)) def get_url(self, host, media_id): return 'http://streamcloud.eu/%s' % (media_id) sys.stdout = StreamcloudResolver() ./vidcloud.py 0000664 0001754 0001752 00000004260 14601227212 012723 0 ustar atemio atemio """ urlresolver XBMC Addon Copyright (C) 2016 jsergio This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import lib.common as common import re import sys from lib.net import Net from lib import helpers class VidCloudResolver(object): name = 'vidcloud' domains = ['vidcloud.co', 'loadvid.online'] pattern = '(?://|\.)((?:vidcloud.co|loadvid.online))/(?:embed|v)/([0-9a-zA-Z]+)' def __init__(self): self.net = Net() url = str(sys.argv[1]) host = self.get_host_and_id(url)[0] media_id = self.get_host_and_id(url)[1] return self.get_media_url(host, media_id) def get_host_and_id(self, url): r = re.search(self.pattern, url, re.I) if r: return r.groups() else: return False def get_media_url(self, host, media_id): web_url = self.get_url(host, media_id) headers = {'User-Agent': common.CHROME_USER_AGENT, 'Referer': 'https://vidcloud.co/embed/%s' % media_id} html = self.net.http_GET(web_url, headers=headers).content if html: sources = helpers.scrape_sources(html.replace("\\n", "").replace("\\", ""), patterns=[ '''src":\s*"(?P[^"]+)(?:[^}>\]]+)label":\s*"(?P[^"]+)'''], generic_patterns=False) if sources: print helpers.pick_source(sources) + helpers.append_headers(headers) raise ResolverError("Unable to locate video") def get_url(self, host, media_id): return 'https://vidcloud.co/player?fid=%s&page=embed' % media_id sys.stdout = VidCloudResolver() ./bin/ 0000775 0001754 0001752 00000000000 14601227206 011311 5 ustar atemio atemio ./bin/duk.arm 0000775 0001754 0001752 00001003364 14601227206 012607 0 ustar atemio atemio ELF ( 4 4 ( p 4 4 4 T T T t p p p D D Qtd Rtd /lib/ld-linux-armhf.so.3 GNU GNU 7!. H+/ǚA{v h Q QH ( @Ј(A@t@(@$ 9 ! " # $ % &
(.*?)
We are unable to find the video you're looking for. There could be several reasons for this, for example it got removed by the owner.