class Fcine: domain = "https://fcine.net" token = None member_id = None def __init__(self): self.request = Request(header={ 'User-Agent': 'Mozilla/5.0', 'origin': 'https://fcine.net', 'referer': 'https://fcine.net/login/', }, session=True) def get_token(self, response=None): if not response: response = self.request.get('%s/page/help/' % self.domain) self.token = re.search('csrfKey: "(.*)",', response).group(1) self.member_id = re.search('memberID: (\d+)', response).group(1) return self.token, self.member_id def login(self, username, password, header): params = { 'login__standard_submitted': 1, 'csrfKey': self.token, 'auth': username, 'password': password, 'remember_me': 1, 'remember_me_checkbox': 1 } return self.request.post('%s/login/' % self.domain, params, headers=header) def getCategory(self): response = self.request.get(self.domain) return Category().get(response) def getChannel(self, channel, page=1): url = '%s?alphabet=all&page=%d' % (channel, page) response = self.request.get(url) return Channel().get(response, page) def getMovie(self, id): self.get_token() response = self.login( helper.getSetting('fcine.username'), helper.getSetting('fcine.password'), {'referer': id}) return Movie().get(response) def getLink(self, url): response = self.request.get(url) return Movie().get_link(response) def search(self, text): url = "%s/findContent/" % (self.domain) params = { 'term': text } response = self.request.post(url, params) return Channel().get(response, 1)
class Hdvietnam: domain = "http://www.hdvietnam.com" def __init__(self): if not helper.getSetting('hdvietnam.username'): self.username = '******' self.password = '******' else: self.username = helper.getSetting('hdvietnam.username') self.password = helper.getSetting('hdvietnam.password') self.request = Request(session=True) def login(self, redirect=None): params = { 'login': self.username, 'password': self.password, 'register': 0, 'cookie_check': 1, '_xfToken': '', 'redirect': redirect } self.request.get('%s/login' % self.domain) response = self.request.post('%s/login/login' % self.domain, params) return response def thank(self, id, token, postLink): params = { '_xfRequestUri': id, '_xfToken': token, '_xfNoRedirect': 0, '_xfResponseType': 'json' } map(lambda v: self.request.post('%s/%s' % (self.domain, v), params), postLink) def getCategory(self): return Category().get(), None def getChannel(self, channel, page=1): channel = channel.replace(self.domain, "") if page > 1: url = '%s%spage-%d' % (self.domain, channel, page) else: url = '%s%s' % (self.domain, channel) response = Request().get(url) return Channel().get(response, page=page, domain=self.domain) def getMovie(self, movie): url = '%s/%s' % (self.domain, movie) response = self.login(redirect=url) parser = Movie() result, postLinks = parser.is_block(response) if result is True: token = re.findall(r'name="_xfToken"\svalue="(.*?)"\s', response) self.thank(movie, token[0], postLinks) response = self.request.get(url) result = parser.get(response, url) return result def search(self, text): text = urllib.quote_plus(text) params = { 'keywords': text, 'nodes[]': [337, 116, 150, 33, 57, 123], 'type': 'post', 'order': 'date', 'child_nodes': 1 } url = "%s/search/search" % self.domain response = Request().post(url, params=params) # print('77777777777777777777777777777777777777') # print(helper.write_file('test.html', response.encode('utf-8'))) return Channel().get_search(response)
class Fcine: domain = "https://fcine.net" token = None member_id = None def __init__(self): if not helper.getSetting('fcine.username'): # helper.message('Please login to fcine.net', 'Login Required') self.username = '******' self.password = '******' else: self.username = helper.getSetting('fcine.username'), self.password = helper.getSetting('fcine.password'), self.request = Request(header={ 'User-Agent': 'Mozilla/5.0', 'origin': 'https://fcine.net', 'referer': 'https://fcine.net/login/', }, session=True) if helper.has_file_path( 'fcine.bin' ) and helper.get_last_modified_time_file('fcine.bin') + 43200 < int( time.time()): helper.remove_file('fcine.bin') if helper.has_file_path('fcine.bin'): self.request.set_session( pickle.loads(helper.read_file('fcine.bin', True))) else: self.login() def updateSession(self): helper.write_file('fcine.bin', pickle.dumps(self.request.get_request_session()), True) def get_token(self, response=None): if not response: response = self.request.get('%s/page/help/' % self.domain) self.token = re.search('csrfKey: "(.*)",', response).group(1) self.member_id = re.search('memberID: (\d+)', response).group(1) return self.token, self.member_id def login(self): self.get_token() params = { 'login__standard_submitted': 1, 'csrfKey': self.token, 'auth': self.username, 'password': self.password, 'remember_me': 1, 'remember_me_checkbox': 1 } response = self.request.post('%s/login/' % self.domain, params) self.updateSession() return response def getCategory(self): response = self.request.get(self.domain) movies = Channel().get(response, 1) movies['page'] = 1 return Category().get(response), movies def getChannel(self, channel, page=1): url = '%s?alphabet=all&page=%d' % (channel, page) response = self.request.get(url) return Channel().get(response, page) def getMovie(self, url): # self.get_token() # response = self.login( # self.username, # self.password, # {'referer': id}) return Movie().get(self.request.get(url)) def getLink(self, url): response = self.request.get(url) return Movie().get_link(response) def search(self, text): url = "%s/findContent/" % self.domain params = {'term': text} response = self.request.post(url, params) return Channel().get(response, 1)
class Hdvietnam: domain = "http://www.hdvietnam.com" def __init__(self): if not helper.getSetting('hdvietnam.username'): self.username = '******' self.password = '******' else: self.username = helper.getSetting('hdvietnam.username') self.password = helper.getSetting('hdvietnam.password') self.request = Request(header={ 'User-Agent': 'Mozilla/5.0', 'Origin': self.domain, 'Referer': self.domain }, session=True) if helper.has_file_path( 'hdvietnam.bin' ) and helper.get_last_modified_time_file('hdvietnam.bin') + 3600 < int( time.time()): helper.remove_file('hdvietnam.bin') if helper.has_file_path('hdvietnam.bin'): self.request.set_session( pickle.loads(helper.read_file('hdvietnam.bin', True))) else: self.login() def login(self, redirect='/'): params = { 'login': self.username, 'register': 0, 'password': self.password, 'remember': 1, 'cookie_check': 1, '_xfToken': '', 'redirect': redirect } response = self.request.post('%s/login/login' % self.domain, params) helper.write_file('hdvietnam.bin', pickle.dumps(self.request.get_request_session()), True) return response def thank(self, mid, token, postLink): params = { '_xfRequestUri': '/%s' % mid, '_xfToken': token, '_xfNoRedirect': 1, '_xfResponseType': 'json' } for v in postLink: url = '{}/{}'.format(self.domain, v) url = url.replace('likes', 'like') self.request.post(url, params=params) def getCategory(self): return Category().get(), None def getChannel(self, channel, page=1): channel = channel.replace(self.domain, "") if page > 1: url = '%s%spage-%d' % (self.domain, channel, page) else: url = '%s%s' % (self.domain, channel) response = Request().get(url) return Channel().get(response, page=page, domain=self.domain) def getMovie(self, movie): url = '%s/%s' % (self.domain, movie) self.login(url) response = self.request.get(url) parser = Movie() result, postLinks = parser.is_block(response) if result is True: token = re.findall(r'name="_xfToken"\svalue="(.*?)"\s', response) self.thank(movie, token[0], postLinks) response = self.request.get(url) parser.is_block(response) result = parser.get(response, url) return result def search(self, text): text = quote_plus(text) params = { 'keywords': text, 'nodes[]': [337, 116, 150, 33, 57, 123], 'type': 'post', 'order': 'date', 'child_nodes': 1 } url = "%s/search/search" % self.domain response = Request().post(url, params=params) return Channel().get_search(response)
def get_link(self, response, originUrl): movie = { 'group': {}, 'episode': [], 'links': [], } sources = re.findall(r"<iframe.*?src=['|\"](http.*?)['|\"]\s?", response) if len(sources) > 0: for source in sources: if source in 'http://lb.animehay.tv/play/' and len( source) == len('http://lb.animehay.tv/play/'): continue movie['links'].append({ 'link': source, 'title': 'Link direct', 'type': 'mp4', 'resolve': False }) sources = re.search(r'player.setup.*"sources":\s?(\[.*?\])', response, re.DOTALL) if sources: sources = json.loads(sources.group(1)) if sources and len(sources) > 0: for source in sources: movie['links'].append({ 'link': source['file'], 'title': 'Link %s' % source['label'], 'type': source['type'], 'resolve': False }) sources = re.search( r"<iframe.*?src=['|\"](.*animehay.tv/play/{5,}.*?)['|\"]\s?", response) if sources: res = Request() if 'key=' in sources.group(1): vkey = re.search('key=(.*)', sources.group(1)).group(1) # http://vl.animehay.tv/initPlayer/f555b31844becd2e378d4978457014521af38ab8e66834ade1062b44827ef642 resp = res.post('http://vl.animehay.tv/initPlayer/%s' % vkey) resp = json.loads(resp) if 'availablePlayers' not in resp: return movie if 'p2pdrive' in resp['availablePlayers']: data = json.loads( res.post('http://vl.animehay.tv/getDataPlayer/%s/%s' % ('p2pdrive', vkey))) source = data['data'] if source: movie['links'].append({ 'link': source, 'title': 'Link p2pdrive', 'type': 'hls', 'resolve': False }) if 'gphoto' in resp['availablePlayers']: data = json.loads( res.post('http://vl.animehay.tv/getDataPlayer/%s/%s' % ('gphoto', vkey))) data = res.get(data['data']) sources = json.loads( re.search(r"var\s?sources\s?=\s?(\[.*?\])", data).group(1)) if sources and len(sources) > 0: for source in sources: movie['links'].append({ 'link': source['file'], 'title': 'Link %s' % source['label'], 'type': 'mp4', 'resolve': False }) if 'fembed' in resp['availablePlayers']: data = json.loads( res.post('http://vl.animehay.tv/getDataPlayer/%s/%s' % ('fembed', vkey))) data = res.get(data['data']) source = re.search(r"<iframe.*?src=['|\"](.*?)['|\"]\s?", data).group(1) if source: movie['links'].append({ 'link': source, 'title': 'Link fembed', 'type': 'mp4', 'resolve': False }) if 'okru' in resp['availablePlayers']: data = json.loads( res.post('http://vl.animehay.tv/getDataPlayer/%s/%s' % ('okru', vkey))) data = res.get(data['data']) source = re.search(r"<iframe.*?src=['|\"](.*?)['|\"]\s?", data).group(1) if source: movie['links'].append({ 'link': source, 'title': 'Link okru', 'type': 'mp4', 'resolve': False }) if 'openload' in resp['availablePlayers']: data = json.loads( res.post('http://vl.animehay.tv/getDataPlayer/%s/%s' % ('openload', vkey))) data = res.get(data['data']) source = re.search(r"<iframe.*?src=['|\"](.*?)['|\"]\s?", data).group(1) if source: movie['links'].append({ 'link': source, 'title': 'Link openload', 'type': 'mp4', 'resolve': False }) return movie else: res.get(sources.group(1)) link = res.get_request().url vkey = re.search('id=(.*)', link) if vkey: vkey = vkey.group(1) base_url = urlparse(link) base_url = base_url.scheme + '://' + base_url.netloc urlVideo = "{}/hls/{}/{}.playlist.m3u8".format( base_url, vkey, vkey) movie['links'].append({ 'link': urlVideo, 'title': 'Link p2pdrive', 'type': 'hls', 'resolve': False, 'originUrl': originUrl }) sources = re.search(r'player.setup\((.*?)\);', response, re.DOTALL) if sources: source = sources.group(1) source = re.search(r'"file":\s"(.*?)",', source) movie['links'].append({ 'link': source.group(1), 'title': 'Link direct', 'type': 'mp4', 'resolve': False }) sources = re.search(r"var\s?source\s?=\s?(\[.*?\]);", response) if sources: sources = helper.convert_js_2_json(sources.group(1)) for source in sources: movie['links'].append({ 'link': source.get('file'), 'title': 'Link %s' % source.get('label').encode('utf-8'), 'type': source.get('type').encode('utf-8'), 'originUrl': originUrl, 'resolve': False }) sources = re.search(r'var\s?source\s?=\s?"(\[.*?\])";', response) if sources: sources = helper.convert_js_2_json( sources.group(1).replace('\\', '')) for source in sources: movie['links'].append({ 'link': source.get('file'), 'title': 'Link %s' % source.get('label').encode('utf-8'), 'type': source.get('type').encode('utf-8'), 'originUrl': originUrl, 'resolve': False }) # sources = re.search('<script rel="nofollow" src="(.*)" async>', response) # if sources: # response = Request().get(sources.group(1)) # if 'links:' in response: # sources = json.loads(re.search('links: (.*?),', response).group(1)) # for key, value in sources.items(): # if value: # label = key[1:].encode('utf-8') # movie['links'].append({ # 'link': value, # 'title': 'Link %s' % label, # 'type': label, # 'resolve': True # }) # # movie['links'] = sorted(movie['links'], key=lambda elem: int(elem['type']), reverse=True) return movie
class FShareVN: def __init__(self, url, username="", password=""): self.url = url self.username = username self.password = password self.request = Request(session=True) @staticmethod def get_info(url=None, content=None): if url: content = Request().get(url) name = False size = '0' soup = BeautifulSoup(content, "html.parser") title = soup.select_one('title').text.encode('utf-8') if 'Not Found' in title or '503' in title: raise Exception('Fshare', 'link die') info = soup.select_one('div.info') if info: name = info.select_one('div.name').get('title').encode('utf-8') print(name) size = info.select_one('div.size').get_text().strip()\ .replace(" ", "")\ .replace("\n", "")\ .replace("save", "").encode('utf-8') return name, size def login(self, token): url = 'https://www.fshare.vn/site/login' r = self.request.post( url, { '_csrf-app': token, 'LoginForm[email]': self.username, 'LoginForm[password]': self.password, 'LoginForm[rememberMe]': 1 }) return r def get_token(self): r = self.request.get('https://www.fshare.vn/') if not re.search(r'id="form-signup"', r): print('Fashare: already login') return self.extract_token(r) else: print('Fashare: try to login') r = self.login(self.extract_token(r)) return self.extract_token(r) def extract_token(self, response): return re.search(r'name="csrf-token" content="(.*)">', response).group(1) def get_link(self): if re.search(r'/folder/([^\?]+)', self.url): code = self.handleFolder(self.url) if not code: return None else: code = re.search(r'/file/([^\?]+)', self.url).group(1) token = self.get_token() r = self.request.post('https://www.fshare.vn/download/get', { '_csrf-app': token, 'linkcode': code, 'withFcode5': 0, 'fcode': '' }) item = json.loads(r) # self.logout() if 'errors' in item: helper.message("Fshare error: %s" % item['errors']['linkcode'][0]) raise Exception('Fshare', 'error') return # should block ui to wait until able retrieve a link return item[u'url'] def logout(self): self.request.get('https://www.fshare.vn/site/logout') def is_folder(self, url): return not re.search(r'/folder/([^\?]+)', url) and False or True def handleFolder(self, url=None, code=None): if not code: code = re.search(r'/folder/([^\?]+)', url).group(1) r = self.request.get( 'https://www.fshare.vn/api/v3/files/folder?linkcode=%s&sort=type,name' % code) r = json.loads(r) listitems = [] if 'items' in r and len(r['items']) > 0: listitems = [ "[%s] %s" % (i['type'] == 1 and helper.humanbytes(i["size"]) or 'Folder', i["name"]) for i in r['items'] ] else: raise Exception('Fshare', 'link die') index = helper.create_select_dialog(listitems) if index == -1: return None if r['items'][index]['type'] == 1: return r['items'][index]['linkcode'] else: return self.handleFolder(code=r['items'][index]['linkcode'])