def get_api_key(self): api_key = self.Settings().get_setting('api_key') if api_key == None or api_key == '': furk_user = self.Settings().get_setting('furk_user') furk_pwd = self.Settings().get_setting('furk_pwd') if furk_user != '' and furk_pwd != '': import json from entertainment import requests trans_table = ''.join([chr(i) for i in range(128)] + [' '] * 128) login_command = "/api/login/login" login_params = {"login": furk_user, "pwd": furk_pwd} login_url = "%s%s" % (self.api_url, login_command) #try:login_content = net.http_POST(login_url, login_params).content.translate(trans_table) login_content = requests.post( login_url, login_params).content #.translate(trans_table) login_data = json.loads(login_content) if login_data['status'] == 'ok': api_key = login_data['api_key'] self.Settings().set_setting('api_key', api_key) return api_key
def GetFileHostsForContent(self, title, name, year, season, episode, type, list, lock, message_queue): from entertainment import requests import re name = self.CleanTextForSearch(name.lower()) headers = {'User-Agent':self.User_Agent} if type == 'tv_episodes': season_pull = '0%s' %season if len(season) <2 else season episode_pull = '0%s' %episode if len(episode) <2 else episode sep = 'S%sE%s' %(season_pull,episode_pull) search = {'do':'search', 'subaction':'search', 'story':'%s %s' %(name,sep)} else: search = {'do':'search', 'subaction':'search', 'story':name} link = requests.post(self.base_url, data=search, headers=headers,timeout=3).content links = link.split('-in">')[1:] for p in links: try: media_url = re.compile('href="(.+?)"').findall(p)[0] if self.base_url not in media_url: media_url = self.base_url + media_url media_title = re.compile('title="(.+?)"').findall(p)[0] if type == 'tv_episodes': if name in self.CleanTextForSearch(media_title.lower()): if sep.lower() in media_title.lower(): self.GetFileHosts(media_url, list, lock, message_queue) else: if name in self.CleanTextForSearch(media_title).lower(): if year in media_title: self.GetFileHosts(media_url, list, lock, message_queue) except:pass
def GetFileHosts(self, url, list, lock, message_queue, type, domain, cookie, year): import re, time, base64 from entertainment import requests YEARWAY = url.replace('-bollox', '') url = url.replace('-%s' % year, '') host = domain.split('//')[1] headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': host, 'Origin': domain, 'Pragma': 'no-cache', 'Referer': domain, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } #cookie=net.get_cookies() #print cookie #print '###########################################' #print url #net.save_cookies(self.cookie_file) #COOKIE=re.compile('__utmx="(.+?)"').findall(open(self.cookie_file).read())[0] #print COOKIE #net.set_cookies(self.cookie_file) content = requests.get(domain + url, headers=headers, verify=False).content if '%TITLE% (%YEAR%)' in content: content = requests.get(domain + YEARWAY, headers=headers, verify=False).content if '?ckattempt=' in content: while True: if 'location.href' in content: new = re.compile('location.href="(.+?)"').findall( content)[0] content = requests.get(new, headers=headers, verify=False).content if not '?ckattempt=' in content: break else: break TIME = time.time() - 3600 TIME = str(TIME).split('.')[0] TIME = base64.b64encode(TIME, 'strict') TIME = TIME.replace('==', '%3D%3D') token = re.compile("var tok.+?'(.+?)'").findall(content)[0] match = re.compile('elid.+?"(.+?)"').findall(content) id = match[0] #COOKIE='flixy=%s; %s=%s' % (token,id,TIME) headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Length': '94', #'Cookie':COOKIE, 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': host, 'Origin': domain, 'Pragma': 'no-cache', 'Referer': url, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } #'Authorization': 'Bearer '+COOKIE.replace('%3D','=') if type == 'tv_episodes': get = 'getEpisodeEmb' else: get = 'getMovieEmb' new_search = domain + '/ajax/nembeds.php' data = {'action': get, 'idEl': id, 'token': token, 'elid': TIME} content = requests.post(new_search, data=data, headers=headers, verify=False).content if '?ckattempt=' in content: while True: if 'location.href' in content: new = re.compile('location.href="(.+?)"').findall( content)[0] content = requests.post(new, data=data, headers=headers, verify=False).content if not '?ckattempt=' in content: break else: break quality = 'HD' r = '"type":"(.+?)".+?iframe src="(.+?)"' #% option if '1080P' in quality.upper(): quality = '1080P' elif '720P' in quality.upper(): quality = '720P' elif '480P' in quality.upper(): quality = 'HD' else: quality = 'SD' FINAL = re.compile(r, re.IGNORECASE).findall(content.replace('\\', '')) for quality, FINAL_URL in FINAL: if '1080P' in quality.upper(): Q = '1080P' elif '720P' in quality.upper(): Q = '720P' elif '480P' in quality.upper(): Q = 'HD' else: Q = 'SD' if 'openload' in quality.lower(): Q = 'HD' self.AddFileHost(list, Q, FINAL_URL.split('"')[0])
def GetFileHosts(self, url, list, lock, message_queue, season, episode, type, year): from entertainment import requests import re, json headers = { 'accept': 'application/json, text/javascript, */*; q=0.01', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.8', 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 'origin': 'https://xmovies8.ru', 'referer': url, 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36', 'x-requested-with': 'XMLHttpRequest' } html = requests.get(url, headers=headers, verify=False).content if type == 'tv_episodes': grrr = url.split('https://')[1] r = '<a href="(.+?%s.+?)" class="active ">episode (.+?)<' % grrr match = re.compile(r).findall(html.lower()) for new_url, ep in match: if episode == ep: html = requests.get(new_url, headers=headers, verify=False).content matched = re.compile("load_player\('(.+?)'\)").findall( html) for id in matched: data = {'id': id} content = json.loads( requests.post( 'https://xmovies8.ru/ajax/movie/load_player_v3', data, headers=headers, verify=False).content) second_url = content['value'] if not 'http' in second_url: second_url = 'http:' + second_url headers = { 'accept': 'application/json, text/javascript, */*; q=0.01', 'accept-encoding': 'gzip, deflate, sdch, br', 'accept-language': 'en-US,en;q=0.8', 'origin': 'https://xmovies8.ru', 'referer': second_url, 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' } content = requests.post(second_url, data, headers=headers, verify=False).content link = json.loads(content) DATA = link['playlist'][0]['sources'] for field in DATA: FINAL_URL = field['file'] res = field['label'].upper() self.AddFileHost(list, res, FINAL_URL) else: html = requests.get(url, headers=headers, verify=False).content matched = re.compile("load_player\('(.+?)'\)").findall(html) for id in matched: data = {'id': id} content = json.loads( requests.post( 'https://xmovies8.ru/ajax/movie/load_player_v3', data, headers=headers, verify=False).content) second_url = content['value'] if not 'http' in second_url: second_url = 'http:' + second_url headers = { 'accept': 'application/json, text/javascript, */*; q=0.01', 'accept-encoding': 'gzip, deflate, sdch, br', 'accept-language': 'en-US,en;q=0.8', 'origin': 'https://xmovies8.ru', 'referer': second_url, 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' } content = requests.post(second_url, data, headers=headers, verify=False).content link = json.loads(content) DATA = link['playlist'][0]['sources'] for field in DATA: FINAL_URL = field['file'] res = field['label'].upper() self.AddFileHost(list, res, FINAL_URL)
def Resolve(self, url): api_key = self.get_api_key() if api_key == None or api_key == '': return import json from entertainment import requests from entertainment import odict resolved_media_urls = odict.odict() trans_table = ''.join([chr(i) for i in range(256)] + [' '] * 256) file_get_command = "/api/file/get" file_get_params = {"id": url, 't_files': '1', 'api_key': api_key} file_get_url = "%s%s" % (self.api_url, file_get_command) try: file_get_content = requests.post( file_get_url, file_get_params).content.translate(trans_table) except: file_get_content = requests.post( file_get_url, file_get_params).content #.translate(trans_table) file_get_data = json.loads(file_get_content) if file_get_data['status'] != 'ok' or file_get_data[ 'found_files'] != '1': return data_files = file_get_data['files'] data_files = (data_files[0])['t_files'] for data_file in data_files: data_file_name = data_file['name'] data_file_format = "[COLOR red][" + ( data_file_name[data_file_name.rfind('.') + 1:]).upper() + "][/COLOR]" if 'video' in data_file[ 'ct'] and 'sample' not in data_file_name.lower(): bitrate = data_file.get('bitrate', None) if bitrate: file_url = data_file.get('url_dl', None) if file_url: file_size_fmt = '[COLOR orange][%s][/COLOR]' file_size = 'NA' file_size_in_bytes = data_file['size'] if file_size_in_bytes: flt_file_size_in_bytes = float(file_size_in_bytes) if flt_file_size_in_bytes <= 1024: file_size = '.%2f KB' % ( flt_file_size_in_bytes / 1024) elif flt_file_size_in_bytes <= 1048576: file_size = '%.2f MB' % ( flt_file_size_in_bytes / 1048576) else: file_size = "%.2f GB" % ( flt_file_size_in_bytes / 1073741824) file_name = data_file_format + " " + ( file_size_fmt % file_size) + " " + data_file_name resolved_media_urls[file_name] = file_url if len(resolved_media_urls) == 0: resolved_media_urls == None elif len(resolved_media_urls) == 1: resolved_media_urls = ((resolved_media_urls.items())[0])[1] return resolved_media_urls
def GetFileHostsForContent(self, title, name, year, season, episode, type, list, lock, message_queue): api_key = self.get_api_key() if api_key == None or api_key == '': return furk_adult_filter = self.Settings().get_setting('furk_adult_filter') import json from entertainment import requests name = self.CleanTextForSearch(name) match_name = name.lower() trans_table = ''.join([chr(i) for i in range(128)] + [' '] * 128) search_command = "/api/plugins/metasearch" search_query = name if 'movie' in type: search_query += " " + year elif 'tv' in type: season_episode = "s%02de%02d" % (int(season), int(episode)) search_query += " " + season_episode res = self.resolution(type) if res == '1': search_query += " -1080p" elif res == '2': search_query += " 720p" elif res == '3': search_query += " 1080p" ext = self.fileext(type) if ext != "ANY": search_query += " " + ext minsz = self.minfilesize(type) maxsz = self.maxfilesize(type) search_params = { "match": "extended", "sort": "relevance", "moderated": "yes" if furk_adult_filter == "true" else "no", "offset": "0", "filter": "cached", "limit": self.maxresults(type), "q": search_query, 'api_key': api_key } search_url = "%s%s" % (self.api_url, search_command) try: search_content = requests.post( search_url, search_params).content.translate(trans_table) except: search_content = requests.post( search_url, search_params).content #.translate(trans_table) search_data = json.loads(search_content) if search_data['status'] != 'ok': return search_stats = search_data['stats'] total_found = search_stats['total_found'] if int(total_found) <= 0: return import re data_files = search_data['files'] for data_file in data_files: file_name = data_file['name'] file_name_lower = file_name.lower() if self.Match(match_name, file_name_lower) == False: continue try: file_info = data_file['video_info'] file_id = data_file['id'] data_file_ready = data_file['is_ready'] data_file_type = data_file['type'].lower() if data_file_ready == '1' and data_file_type == 'video': bitrate = re.compile('bitrate: (.+?)\n').findall(file_info) if bitrate: bitrate = bitrate[0] file_size_fmt = '[COLOR orange][FMT: %s, FSZ: %s][/COLOR]' file_size = 'NA' file_size_in_bytes = data_file['size'] if file_size_in_bytes: flt_file_size_in_bytes = float(file_size_in_bytes) if 'tv' in type and 'complete' in file_name_lower: file_size = "%.2f GB" % ( flt_file_size_in_bytes / 1073741824) res = self.ReturnRes(file_name_lower) file_name = (file_size_fmt % ('[COLOR red]FULL SET[/COLOR]', file_size)) + " " + file_name self.GetFileHosts(file_id, list, lock, message_queue, res, file_name) if minsz != None and flt_file_size_in_bytes < minsz: continue if maxsz != None and flt_file_size_in_bytes > maxsz: continue if flt_file_size_in_bytes <= 1048576: file_size = '.%2f KB' % ( flt_file_size_in_bytes / 1024) elif flt_file_size_in_bytes <= 1073741824: file_size = '%.2f MB' % ( flt_file_size_in_bytes / 1048576) else: file_size = "%.2f GB" % ( flt_file_size_in_bytes / 1073741824) res = 'NA' for key, value in common.quality_dict.iteritems(): if re.search( '[^a-zA-Z0-9]' + key + '[^a-zA-Z0-9]', file_name_lower): res = value break if 'tv' in type: if '3d' in file_name_lower: res = '3D' if res == 'NA': if 'GB' in file_size: file_sz_flt = float( re.search('([0-9\.]+)', file_size).group(1)) if file_sz_flt >= 2.0: res = self.ReturnRes(file_name_lower) else: res = self.ReturnRes(file_name_lower) else: res = 'LOW' file_format = 'NA' for key, value in common.movie_container_dict.iteritems( ): if re.search( '[^a-zA-Z0-9]' + key + '[^a-zA-Z0-9]', file_name_lower ) or file_name_lower.endswith(key): file_format = value break file_name = ( file_size_fmt % (file_format, file_size)) + " " + file_name self.GetFileHosts(file_id, list, lock, message_queue, res, file_name) else: if res == 'NA' or 'HD' in res: if 'GB' in file_size: file_sz_flt = float( re.search('([0-9\.]+)', file_size).group(1)) if file_sz_flt >= 1.0: res = self.ReturnRes(file_name_lower) else: res = self.ReturnRes(file_name_lower) else: res = 'LOW' file_format = 'NA' for key, value in common.movie_container_dict.iteritems( ): if re.search( '[^a-zA-Z0-9]' + key + '[^a-zA-Z0-9]', file_name_lower ) or file_name_lower.endswith(key): file_format = value break file_name = ( file_size_fmt % (file_format, file_size)) + " " + file_name self.GetFileHosts(file_id, list, lock, message_queue, res, file_name) except: pass
def GrabAdditional(self, url, list, episode, type): REF = url from entertainment import requests import re, json, hashlib, urllib headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36', 'Referer': REF, 'Host': '123moviesfree.com' } LINK = requests.get(url, headers=headers, verify=False).content #net.save_cookies(self.cookie_file) headers = { 'Host': '123moviesfree.com', 'Accept': '*/*', 'Origin': 'http://123moviesfree.com', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer': REF, 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8' } uniques = [] if type == 'tv_episodes': match = re.compile( '<a class="episode_(.+?) .+?" href="(.+?)".+?data-film="(.+?)".+?data-name="(.+?)"', re.DOTALL).findall(LINK) for EP, ip_server, ip_film, ip_name in match: if episode == EP: if ip_server not in uniques: uniques.append(ip_server) REF = ip_server LINK = requests.get(ip_server, headers=headers, verify=False).content headers = { 'Host': '123moviesfree.com', 'Accept': '*/*', 'Origin': 'http://123moviesfree.com', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer': REF, 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8' } match = re.compile( 'ip_build_player\((.+?),(.+?),(.+?),(.+?)\)' ).findall(LINK) for ip_film, ip_server, ip_name, fix in match: ip_name = ip_name.replace("'", '') ip_server = ip_server.replace("'", '') data = { 'ipplugins': '1', 'ip_film': ip_film, 'ip_server': ip_server, 'ip_name': ip_name, 'fix': fix } LOAD = requests.post( 'http://123moviesfree.com/ip.file/swf/plugins/ipplugins.php', data, headers=headers, verify=False).content LINKS = json.loads(str(LOAD)) s = LINKS['s'] NEW_URL = 'http://123moviesfree.com/ip.file/swf/ipplayer/ipplayer.php?u=%s%s%s&n=0' % ( s, '&w=100%25&h=500&s=', ip_server) LINKED = json.loads( requests.get(NEW_URL, headers=headers, verify=False).content) DATA = LINKED['data'] if not 'google' in str(LINKED): FINAL_URL = DATA res = '720P' HOST = FINAL_URL.split('//')[1] HOST = HOST.split('/')[0] self.AddFileHost(list, res, FINAL_URL, host=HOST.upper()) else: for field in DATA: FINAL_URL = field['files'] res = field['quality'] res = res.replace('p', '').replace( 'P', '').replace('CAM', '360') if not res.isdigit(): res = '720' if res == '1080': res = '1080P' elif res == '720': res = '720P' elif res == '480': res = 'DVD' elif res == '360': res = 'SD' else: res = 'SD' HOST = FINAL_URL.split('//')[1] HOST = HOST.split('/')[0] self.AddFileHost(list, res, FINAL_URL, host=HOST.upper()) else: match = re.compile('ip_build_player\((.+?),(.+?),(.+?),(.+?)\)', re.DOTALL).findall(LINK) for ip_film, ip_server, ip_name, fix in match: ip_name = ip_name.replace("'", '') ip_server = ip_server.replace("'", '') data = { 'ipplugins': '1', 'ip_film': ip_film, 'ip_server': ip_server, 'ip_name': ip_name, 'fix': fix } LOAD = requests.post( 'http://123moviesfree.com/ip.file/swf/plugins/ipplugins.php', data, headers=headers, verify=False).content LINKS = json.loads(str(LOAD)) s = LINKS['s'] NEW_URL = 'http://123moviesfree.com/ip.file/swf/ipplayer/ipplayer.php?u=%s%s%s&n=0' % ( s, '&w=100%25&h=500&s=', ip_server) LINKED = json.loads( requests.get(NEW_URL, headers=headers, verify=False).content) DATA = LINKED['data'] if not 'google' in str(LINKED): FINAL_URL = DATA res = '720P' HOST = FINAL_URL.split('//')[1] HOST = HOST.split('/')[0] self.AddFileHost(list, res, FINAL_URL, host=HOST.upper()) else: for field in DATA: FINAL_URL = field['files'] res = field['quality'] if not '.srt' in FINAL_URL: res = res.replace('p', '').replace('P', '').replace( 'CAM', '360') if not res.isdigit(): res = '720' if res == '1080': res = '1080P' elif res == '720': res = '720P' elif res == '480': res = 'DVD' elif res == '360': res = 'SD' else: res = 'SD' HOST = FINAL_URL.split('//')[1] HOST = HOST.split('/')[0] self.AddFileHost(list, res, FINAL_URL, host=HOST.upper())