def __search(self, imdb, isMovieSearch): try: sHtmlContent = self.scraper.get(self.base_link).content pattern = '<meta name="csrf-token" content="([^"]+)">' string = str(sHtmlContent) token = re.compile(pattern, flags=re.I | re.M).findall(string) if len(token) == 0: return #No Entry found? # first iteration of session object to be parsed for search sHtmlContent = self.scraper.get(self.search % imdb, headers={ 'X-CSRF-TOKEN': token[0], 'X-Requested-With': 'XMLHttpRequest' }).text content = json.loads(sHtmlContent) if isMovieSearch: returnObjects = content["movies"] else: returnObjects = content["series"] return returnObjects except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, imdb) except: return return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources j = self.__get_json(url) j = [i for i in j['links'] if 'links' in j] j = [(i['hoster'].lower(), i['id']) for i in j] j = [(re.sub('hd$', '', i[0]), i[1], 'HD' if i[0].endswith('hd') else 'SD') for i in j] j = [(i[0], i[1], i[2]) for i in j] for hoster, url, quality in j: valid, hoster = source_utils.is_host_valid(hoster, hostDict) if not valid: continue sources.append({ 'source': hoster, 'quality': quality, 'language': 'de', 'url': ('watch/%s' % url), 'direct': False, 'debridonly': False }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources for idx, items in enumerate(url): if "clip" in items: sources.append({ 'source': "clipboard.cc", 'quality': 'HD', 'language': 'de', 'url': items, 'direct': True, 'debridonly': False }) valid, host = source_utils.is_host_valid(items, hostDict) if not valid: continue sources.append({ 'source': host, 'quality': 'HD', 'language': 'de', 'url': items, 'direct': False, 'debridonly': False, 'checkquality': True }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources r = cache.get(client.request, 4, urlparse.urljoin(self.base_link, self.conf_link), XHR=True) r = json.loads(r).get('streamer') r = cache.get(client.request, 4, r + '%s.mp4/master.m3u8' % url, XHR=True) r = re.findall('RESOLUTION\s*=\s*\d+x(\d+).*?\n(http.*?)(?:\n|$)', r, re.IGNORECASE) r = [(source_utils.label_to_quality(i[0]), i[1]) for i in r] for quality, link in r: sources.append({ 'source': 'CDN', 'quality': quality, 'language': 'de', 'url': link, 'direct': True, 'debridonly': False }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def __search(self, titles, year): try: query = self.search_link % (urllib.quote_plus(urllib.quote_plus(cleantitle.query(titles[0])))) query = urlparse.urljoin(self.base_link, query) t = [cleantitle.get(i) for i in set(titles) if i] r = cache.get(client.request, 4, query) links = dom_parser.parse_dom(r, 'a', attrs={'class': 'coverImage'}) links = [(i.attrs['href'], re.findall('(.*?)\(', i.attrs['title'])[0]) for i in links if year in i.content] for i in links: title = i[1] title = cleantitle.get(title) if title in t: return i[0] else: continue return "" except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def __search(self, titles): try: t = [cleantitle.get(i) for i in set(titles) if i] for title in titles: oRequest = cRequestHandler(self.base_link + "/", caching = False) oRequest.addHeaderEntry('Host', 'cinemaxx.cc') oRequest.addHeaderEntry('Referer', 'https://cinemaxx.cc/') oRequest.addParameters('do', 'search') oRequest.addParameters('subaction', 'search') oRequest.addParameters('story', title) oRequest.addParameters('full_search', '0') oRequest.addParameters('search_start', '0') oRequest.addParameters('result_from', '1') oRequest.addParameters('submit', 'submit') oRequest.setRequestType(1) result = oRequest.request() links = dom_parser.parse_dom(result, 'div', attrs={'class': 'shortstory-in'}) links = [dom_parser.parse_dom(i, 'a')[0] for i in links] links = [(i.attrs['href'], i.attrs['title']) for i in links] links = [i[0] for i in links if any(a in cleantitle.get(i[1]) for a in t)] if len(links) > 0: return source_utils.strip_domain(links[0]) return except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources html = cache.get(requests.get, 6, url) url_regex = "hls.*?(http.*?m3u8)" link = re.findall(url_regex, html.content) link = link[0].replace("\\", "") sources.append({ 'source': 'CDN', 'quality': 'SD', 'language': 'de', 'url': link, 'direct': True, 'debridonly': False, 'info': '' }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, link) return sources
def resolve(self, url): try: url = urlparse.urljoin(self.base_link, url) oRequest = cRequestHandler(url, caching=False) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) content = oRequest.request() content = client.request(url) url = dom_parser.parse_dom(content, 'iframe')[0].attrs['src'] recap = recaptcha_app.recaptchaApp() key = recap.getSolutionWithDialog( url, "6LeiZSYUAAAAAI3JZXrRnrsBzAdrZ40PmD57v_fs", self.recapInfo) print "Recaptcha2 Key: " + key response = None if key != "" and "skipped" not in key.lower(): content = client.request(url) s = dom_parser.parse_dom(content, 'input', attrs={'name': 's'})[0].attrs['value'] link = client.request(url + '?t=%s&s=%s' % (key, s), output='geturl') return link elif not response or "skipped" in key.lower(): return except Exception as e: source_faultlog.logFault(__name__, source_faultlog.tagResolve) return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources oRequest = cRequestHandler(urlparse.urljoin(self.base_link, url)) content = oRequest.request() links = dom_parser.parse_dom(content, 'a') links = [ i for i in links if 'href' in i.attrs and url in i.attrs['href'] ] links = [(i.attrs['href'], i.attrs['title'].replace('HD', ''), '720p' if 'HD' in i.attrs['href'] else 'SD') for i in links if 'title' in i.attrs] for link, hoster, quality in links: valid, hoster = source_utils.is_host_valid(hoster, hostDict) if not valid: continue sources.append({ 'source': hoster, 'quality': quality, 'language': 'de', 'info': 'Recaptcha', 'url': link, 'direct': False, 'debridonly': False, 'captcha': True }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources data = {'ID': re.findall('\d+', url)[0], 'lang': 2} data = cache.get(client.request, 4, urlparse.urljoin(self.base_link, self.request_link), post=data, XHR=True) data = json.loads(data) if data['status']: data = [(i, data['links'][i]) for i in data['links'] if 'links' in data] data = [(i[0], i[1][0], (i[1][1:])) for i in data] for hoster, quali, links in data: valid, hoster = source_utils.is_host_valid(hoster, hostDict) if not valid: continue quali = int(quali) quali = '1080p' if quali > 2 else '720p' if quali > 1 else 'SD' for link in links: try: sources.append({'source': hoster, 'quality': quali, 'language': 'de', 'url': self.out_link % link, 'direct': False, 'debridonly': False, 'captcha': True, 'info': 'Recaptcha'}) except: pass return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape) return sources
def __search(self, imdb, isMovieSearch): try: oRequest = cRequestHandler(self.base_link) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) sHtmlContent = oRequest.request() pattern = '<meta name="csrf-token" content="([^"]+)">' string = str(sHtmlContent) token = re.compile(pattern, flags=re.I | re.M).findall(string) if len(token) == 0: return #No Entry found? # first iteration of session object to be parsed for search oRequest = cRequestHandler(self.search % imdb) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) oRequest.addHeaderEntry('X-CSRF-TOKEN', token[0]) oRequest.addHeaderEntry('X-Requested-With', 'XMLHttpRequest') sHtmlContent = oRequest.request() content = json.loads(sHtmlContent) if isMovieSearch: returnObjects = content["movies"] else: returnObjects = content["series"] return returnObjects except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, imdb) except: return return
def __search(self, titles): try: query = self.search_link % urllib.quote_plus( cleantitle.query(titles[0])) query = urlparse.urljoin(self.base_link, query) t = [cleantitle.get(i) for i in set(titles) if i] r = client.request(query) body = dom_parser.parse_dom(r, 'div', attrs={'class': 'content_body'})[1].content r = dom_parser.parse_dom(body, 'a', req='href') r = [(i.attrs['href'], i.content.lower().replace('<b>', '').replace('</b>', '')) for i in r if i] r = [i for i in r if '<' not in i[1]] r = [i[0] for i in r if cleantitle.get(i[1]) in t] if len(r) > 0: return source_utils.strip_domain(r[0]) return "" except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return url = urlparse.urljoin(self.base_link, url) r = client.request(url) r = r.replace('\n', ' ') r = dom_parser.parse_dom(r, 'div', attrs={'class': 'fullstory'}) r = dom_parser.parse_dom(r, 'div', attrs={'class': 'row'}) r = dom_parser.parse_dom(r, 'div', attrs={'class': 'inner'}) r = dom_parser.parse_dom(r, 'a', req='href') r = [i.attrs['href'].strip() for i in r] for link in r: valid, host = source_utils.is_host_valid(link, hostDict) if not valid: continue sources.append({ 'source': host, 'quality': 'SD', 'language': 'de', 'url': link, 'direct': False, 'debridonly': False }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources query = urlparse.urljoin(self.base_link, url) oRequest = cRequestHandler(query) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) content = oRequest.request() quality = dom_parser.parse_dom(content, 'div', attrs={'class': 'tabformat'}) for quali in quality: if len(quality) > 1: oRequest = cRequestHandler( urlparse.urljoin( self.base_link, dom_parser.parse_dom(quali, 'a')[0].attrs['href'])) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) content = oRequest.request() self.__getRelease(sources, content, hostDict) self.__getRelease(sources, content, hostDict) if len(sources) == 0: raise Exception() return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def __search(self, titles, year): try: t = [cleantitle.get(i) for i in set(titles) if i] y = [ '%s' % str(year), '%s' % str(int(year) + 1), '%s' % str(int(year) - 1), '0' ] r = client.request( urlparse.urljoin(self.base_link, self.search_link), post=urllib.urlencode({'val': cleantitle.query(titles[0])}), XHR=True) r = dom_parser.parse_dom(r, 'li') r = dom_parser.parse_dom(r, 'a', req='href') r = [(i.attrs['href'], i.content, re.findall('\((\d{4})', i.content)) for i in r] r = [(i[0], i[1], i[2][0] if i[2] else '0') for i in r] r = [i[0] for i in r if cleantitle.get(i[1]) in t and i[2] in y] if len(r) > 0: r = r[0] else: return return source_utils.strip_domain(r) except: source_faultlog.logFault(__name__, source_faultlog.tagSearch) return
def __search(self, imdb): try: r = client.request( urlparse.urljoin(self.base_link, self.search_link % imdb)) r = dom_parser.parse_dom(r, 'a', req='href') r = [i.attrs['href'] for i in r if i] url = None if len(r) > 1: for i in r: data = client.request(urlparse.urljoin(self.base_link, i)) data = re.compile('(imdbid\s*[=|:]\s*"%s"\s*,)' % imdb, re.DOTALL).findall(data) if len(data) >= 1: url = i elif len(r) > 0: url = r[0] if url: return source_utils.strip_domain(url) except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, imdb) except: return return
def __search(self, imdb): try: l = ['1', '15'] r = client.request( urlparse.urljoin(self.base_link, self.search_link % imdb)) r = dom_parser.parse_dom(r, 'table', attrs={'id': 'RsltTableStatic'}) r = dom_parser.parse_dom(r, 'tr') r = [(dom_parser.parse_dom(i, 'a', req='href'), dom_parser.parse_dom(i, 'img', attrs={'alt': 'language'}, req='src')) for i in r] r = [(i[0][0].attrs['href'], i[0][0].content, i[1][0].attrs['src']) for i in r if i[0] and i[1]] r = [(i[0], i[1], re.findall('.+?(\d+)\.', i[2])) for i in r] r = [(i[0], i[1], i[2][0] if len(i[2]) > 0 else '0') for i in r] r = sorted(r, key=lambda i: int(i[2])) # german > german/subbed r = [i[0] for i in r if i[2] in l] if len(r) > 0: return source_utils.strip_domain(r[0]) return "" except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, imdb) except: return return
def resolve(self, url): try: url = urlparse.urljoin(self.base_link, url) recap = recaptcha_app.recaptchaApp() key = recap.getSolutionWithDialog( url, "6LeERkUUAAAAAJH4Yqk-gQH1N6psg0KCuEq_Lkxf", self.recapInfo) print "Recaptcha2 Key: " + key response = None if key != "" and "skipped" not in key.lower(): response = self.scraper.post( url, data={'g-recaptcha-response': key}, allow_redirects=True) elif not response or "skipped" in key.lower(): return if response is not None: url = response.url if self.base_link not in url: if 'google' in url: return directstream.google(url)[0]['url'] return url except Exception as e: source_faultlog.logFault(__name__, source_faultlog.tagResolve) return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources episode = None season = None if isinstance(url, list): season, episode, url = url url = urlparse.urljoin(self.base_link, url) oRequest = cRequestHandler(url, caching=False) content = oRequest.request() quality = re.findall(r'\<span class=\"film-rip ignore-select\"><a href=\"https://cinemaxx.cc/xfsearch/rip/(.*?)/', content)[0] if "HD" in quality: quality = '1080p' else: quality = 'SD' link = dom_parser.parse_dom(content, 'div', attrs={'id': 'full-video'}) if season: try: link = re.findall("vk.show\(\d+,(.*?)\)", link[0].content)[0] link = re.findall("\[(.*?)\]", link)[int(season)-1] link = re.findall("'(.*?)'", link) link = link[int(episode)-1] valid, hoster = source_utils.is_host_valid(link, hostDict) if valid: sources.append({'source': hoster, 'quality': quality, 'language': 'de', 'info': '', 'url': link, 'direct': False, 'debridonly': False, 'checkstreams': True}) else: pass except: #we have a tvshow, but no seasons to choose #cinemaxx can host specific seasons, its stated in the url (i.e. http://cinemaxx.cc/serien/743-homeland-7-staffel.html) link = dom_parser.parse_dom(link, 'iframe') link = link[0].attrs['src'] valid, hoster = source_utils.is_host_valid(link, hostDict) if valid: sources.append({'source': hoster, 'quality': quality, 'language': 'de', 'info': '', 'url': link, 'direct': False, 'debridonly': False, 'checkstreams': True}) else: pass else: link = dom_parser.parse_dom(link, 'iframe') link = link[0].attrs['src'] valid, hoster = source_utils.is_host_valid(link, hostDict) if valid: sources.append({'source': hoster, 'quality': quality, 'language': 'de', 'info': '', 'url': link, 'direct': False, 'debridonly': False, 'checkstreams': True}) else: pass if len(sources) == 0: raise Exception() return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources content = cache.get(client.request, 4, urlparse.urljoin(self.base_link, url)) hoster = re.findall('blank"[^>]*href="([^"]+)">', content) for link in hoster: link = link.strip() quali, info = source_utils.get_release_quality(link) valid, hoster = source_utils.is_host_valid(link, hostDict) if not valid: continue sources.append({ 'source': hoster, 'quality': quali, 'language': 'de', 'info': info, 'url': link, 'direct': False, 'debridonly': False, 'checkquality': True }) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources data = urlparse.parse_qs(url) data = dict([(i, data[i][0]) if data[i] else (i, '') for i in data]) url = data.get('url') episode = int(data.get('episode', 1)) r = client.request(urlparse.urljoin(self.base_link, url)) r = {'': dom_parser.parse_dom(r, 'div', attrs={'id': 'gerdub'}), 'subbed': dom_parser.parse_dom(r, 'div', attrs={'id': 'gersub'})} for info, data in r.iteritems(): data = dom_parser.parse_dom(data, 'tr') data = [dom_parser.parse_dom(i, 'a', req='href') for i in data if dom_parser.parse_dom(i, 'a', attrs={'id': str(episode)})] data = [(link.attrs['href'], dom_parser.parse_dom(link.content, 'img', req='src')) for i in data for link in i] data = [(i[0], i[1][0].attrs['src']) for i in data if i[1]] data = [(i[0], re.findall('/(\w+)\.\w+', i[1])) for i in data] data = [(i[0], i[1][0]) for i in data if i[1]] for link, hoster in data: valid, hoster = source_utils.is_host_valid(hoster, hostDict) if not valid: continue sources.append({'source': hoster, 'quality': 'SD', 'language': 'de', 'url': link, 'info': info, 'direct': False, 'debridonly': False}) return sources except: source_faultlog.logFault(__name__,source_faultlog.tagScrape) return sources
def __search(self, titles): try: t = [cleantitle.get(i) for i in set(titles) if i] for title in titles: params = {'a': '2', 'query': title} content = cache.get(client.request, 4, self.search_link, post=params) if content is not None and "noEntry" not in content: content = content.replace('entryLink" <a=""', 'entryLink"') entryLinks = dom_parser.parse_dom( content, 'a', attrs={"class": "entryLink"}) if len(entryLinks) == 0: continue links = [ link.attrs['href'] for link in entryLinks if cleantitle.get(link.content) in t ] if len(links) > 0: return source_utils.strip_domain(links[0]) return except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources query = urlparse.urljoin(self.base_link, url) r = cache.get(client.request, 4, query) links = dom_parser.parse_dom(r, 'div', attrs={'id': 'tab-plot_german'}) links = dom_parser.parse_dom(links, 'tbody') links = dom_parser.parse_dom(links, 'tr') links = [(dom_parser.parse_dom(i, 'a')[0], dom_parser.parse_dom(i, 'td', attrs={'class': 'votesCell'})[0]) for i in links if "gif" in i.content] links = [(i[0][1], i[0].attrs['href'], source_utils.get_release_quality(i[1].content)[0]) for i in links] for hoster, link, quality in links: valid, hoster = source_utils.is_host_valid(hoster, hostDict) if not valid: continue if '?' in link: link = urlparse.urljoin(url, link) sources.append({'source': hoster, 'quality': quality, 'language': 'de', 'url': link, 'direct': False, 'debridonly': False, 'checkquality': True}) if len(sources) == 0: raise Exception() return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def __search(self, titles, year, season='0'): try: query = self.search_link % (urllib.quote_plus( cleantitle.query(titles[0]))) query = urlparse.urljoin(self.base_link, query) titles = [cleantitle.get(i) for i in set(titles) if i] cache.cache_clear() searchResult = cache.get(self.scraper.get, 4, query).content results = re.findall( r'<div class=\"movie-title\">\n((?s).*?)\"(.*?)\">(.*?)</a>', searchResult) usedIndex = 0 #Find result with matching name and season for x in range(0, len(results)): title = cleantitle.get(results[x][2]) if any(i in title for i in titles): return source_utils.strip_domain(results[x][1]) usedIndex += 1 return except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def __search(self, titles, year): try: t = [cleantitle.get(i) for i in set(titles) if i] y = [ '%s' % str(year), '%s' % str(int(year) + 1), '%s' % str(int(year) - 1), '0' ] r = cache.get(self.__get_json, 12, "series") r = [(i.get('id'), i.get('series')) for i in r] r = [(i[0], i[1], re.findall('(.+?) \((\d{4})\)?', i[1])) for i in r if cleantitle.get(i[1]) in t] r = [(i[0], i[2][0][0] if len(i[2]) > 0 else i[1], i[2][0][1] if len(i[2]) > 0 else '0') for i in r] r = sorted(r, key=lambda i: int(i[2]), reverse=True) # with year > no year r = [i[0] for i in r if i[2] in y] if len(r) > 0: r = r[0] else: return return 'series/%s/' % r except: source_faultlog.logFault(__name__, source_faultlog.tagSearch) return
def sources(self, url, hostDict, hostprDict): sources = [] try: if not url: return sources r = cache.get(client.request, 4, urlparse.urljoin(self.base_link, url)) r = dom_parser.parse_dom(r, 'div', attrs={'class': 'hosterSiteVideo'}) r = dom_parser.parse_dom(r, 'li', attrs={'data-lang-key': re.compile('[1|2|3]')}) r = [(i.attrs['data-link-target'], dom_parser.parse_dom(i, 'h4'), 'subbed' if i.attrs['data-lang-key'] == '3' else '' if i.attrs['data-lang-key'] == '1' else 'subbed' if i.attrs['data-lang-key'] == '2' else '') for i in r] r = [(i[0], re.sub('\s(.*)', '', i[1][0].content), 'HD' if 'hd' in i[1][0][1].lower() else 'SD', i[2]) for i in r] for link, host, quality, info in r: print host #if 'HD' in quality: host = re.findall('(.+?)\s*<br', host)[0] valid, host = source_utils.is_host_valid(host, hostDict) if not valid: continue sources.append( {'source': host, 'quality': quality, 'language': 'de', 'url': link, 'info': info, 'direct': False, 'debridonly': False}) return sources except: source_faultlog.logFault(__name__, source_faultlog.tagScrape, url) return sources
def __search(self, titles, year, content): try: t = [cleantitle.get(i) for i in set(titles) if i] c = client.request(urlparse.urljoin(self.base_link, self.year_link % int(year)), output='cookie') p = urllib.urlencode({'search': cleantitle.query(titles[0])}) c = client.request(urlparse.urljoin(self.base_link, self.search_link), cookie=c, post=p, output='cookie') r = client.request(urlparse.urljoin(self.base_link, self.type_link % content), cookie=c, post=p) r = dom_parser.parse_dom(r, 'table', attrs={'width': '100%'})[0].content r = dom_parser.parse_dom(r, 'tr') r = [(dom_parser.parse_dom(i.content, 'a')) for i in r if 'otherLittles' in i.content] r = sorted(r, key=lambda i: int(i[1].content), reverse=True) # with year > no year links = [i[0].attrs['href'] for i in r if (cleantitle.get(i[0].content).partition('<')[0] in t) and i[1].content == year] if len(r) > 0: return source_utils.strip_domain(links[0]) return "" except: source_faultlog.logFault(__name__, source_faultlog.tagSearch) return
def __search(self, titles, year): try: query = self.search_link % urllib.quote_plus(cleantitle.query(titles[0])) query = urlparse.urljoin(self.base_link, query) t = [cleantitle.get(i) for i in set(titles) if i] y = ['%s' % str(year), '%s' % str(int(year) + 1), '%s' % str(int(year) - 1), '0'] r = client.request(query, XHR=True) if r and r.startswith('{'): r = '[%s]' % r r = json.loads(r) r = [(i['url'], i['name']) for i in r if 'name' in i and 'url' in i] r = [(i[0], i[1], re.findall('(.+?) \(*(\d{4})?\)*$', i[1])) for i in r] r = [(i[0], i[2][0][0] if len(i[2]) > 0 else i[1], i[2][0][1] if len(i[2]) > 0 else '0') for i in r] r = sorted(r, key=lambda i: int(i[2]), reverse=True) # with year > no year r = [i[0] for i in r if cleantitle.get(i[1]) in t and i[2] in y] if len(r) > 0: r = r[0] else: return url = source_utils.strip_domain(r) url = url.replace('serien/', '') return url except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return
def __search(self, imdb): try: oRequest = cRequestHandler( urlparse.urljoin(self.base_link, self.search_link % imdb)) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) r = oRequest.request() r = re.findall(r'linkto\".href=\"(.*?)\"\>', r) url = None if len(r) > 1: for i in r: oRequest = cRequestHandler( urlparse.urljoin(self.base_link, i)) oRequest.removeBreakLines(False) oRequest.removeNewLines(False) data = oRequest.request() data = re.compile('(imdbid\s*[=|:]\s*"%s"\s*,)' % imdb, re.DOTALL).findall(data) if len(data) >= 1: url = i elif len(r) > 0: url = r[0] if url: return source_utils.strip_domain(url) except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, imdb) except: return return
def __search(self, titles, imdb, year): try: query = self.search_link % (urllib.quote_plus(cleantitle.query(titles[0]))) query = urlparse.urljoin(self.base_link, query) t = [cleantitle.get(i) for i in set(titles) if i] y = ['%s' % str(year), '%s' % str(int(year) + 1), '%s' % str(int(year) - 1), '0'] r = cache.get(client.request, 4, query, XHR=True) r = json.loads(r) r = [(i.get('title'), i.get('custom_fields', {})) for i in r.get('posts', [])] r = [(i[0], i[1]) for i in r if i[0] and i[1]] r = [(i[0], i[1].get('Streaming', ['']), i[1].get('Jahr', ['0']), i[1].get('IMDb-Link', [''])) for i in r if i] r = [(i[0], i[1][0], i[2][0], re.findall('.+?(tt\d+).*?', i[3][0])) for i in r if i[0] and i[1] and i[2] and i[3]] r = [i[1] for i in r if imdb in i[3] or (cleantitle.get(i[0]) in t and i[2] in y)] if len(r) > 0 : return source_utils.strip_domain(r[0]) return "" except: try: source_faultlog.logFault(__name__, source_faultlog.tagSearch, titles[0]) except: return return