def get(self, tvshowtitle, year, imdb, tvdb, season=None, episode=None, idx=True, provider=None, url=None): try: if idx == True: #if not (tvdb == None or tvdb == '0') : #self.list = cache.get(seasons().tvdb_list, 1, tvshowtitle, year, imdb, tvdb, self.info_lang, season) #else : if not provider == None: call = __import__('resources.lib.sources.%s' % provider, globals(), locals(), ['source'], -1).source() self.list = call.episodes(tvshowtitle, url) if self.list == []: raise Exception(control.lang(30516).encode('utf-8')) self.list = self.super_info(self.list) self.episodeDirectory(self.list, provider) return self.list except Exception as e: logger.error(e.message) control.infoDialog(control.lang(30516).encode('utf-8')) pass
def movie(self, imdb, title, year): try: url = None self.base_link = random.choice( [self.base_link_1, self.base_link_2]) query = '%s %s' % (title, year) query = urllib.quote_plus(query) query = self.search_link % (query) query = urlparse.urljoin(self.base_link % 'search', query) result = client.request(query, headers=self.headers) result = result.decode('iso-8859-1').encode('utf-8') result = json.loads(result) result = result['resultObj']['response']['docs'] title = cleantitle.movie(title) for item in result: searchTitle = cleantitle.movie(item['contentTitle']) if title == searchTitle: url = self.cdn_link % item['contentId'] break if url == None or url == '': raise Exception() return url except Exception as e: logger.error('[%s] Exception : %s' % (self.__class__, e)) return
def addDirectory(self, items): if items == None or len(items) == 0: return addonFanart = control.addonFanart() addonThumb = control.addonThumb() artPath = control.artPath() for i in items: try: try: name = control.lang(i['name']).encode('utf-8') except: name = i['name'] if i['image'].startswith('http://'): thumb = i['image'] elif not artPath == None: thumb = os.path.join(artPath, i['image']) else: thumb = addonThumb url = '%s?action=%s' % (sysaddon, i['action']) try: url += '&url=%s' % urllib.quote_plus(i['url']) except: pass cm = [] item = control.item(label=name, iconImage=thumb, thumbnailImage=thumb) item.addContextMenuItems(cm) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except Exception as e: logger.error(e, __name__) pass viewMode = 'mediainfo1' views.setView('tvshows', {'skin.confluence': control.viewMode['confluence'][viewMode], 'skin.estuary': control.viewMode['esturary'][viewMode]}) control.directory(syshandle, cacheToDisc=True)
def get(self, url=None): try: if url == None: self.list = self.getGenre() else: name = None title = None year = None imdb = None tvdb = None season = None episode = None tvshowtitle = None date = None meta = {'genre': url} sourceList = sources().getSources(name, title, year, imdb, tvdb, season, episode, tvshowtitle, date, meta) sourceList = dict( (item['name'], item) for item in sourceList).values() self.list.extend(sourceList) self.list = sorted(self.list, key=lambda k: k['name']) if not url == None: self.channelDirectory(self.list) else: self.channelDirectory(self.list, action='desiLiveNavigator') except Exception as e: logger.error(e, __name__) pass
def movie(self, imdb, title, year): try: self.base_link = self.base_link query = '%s (%s)' % (title, year) query = self.search_str_link % (urllib.quote_plus(query)) query = urlparse.urljoin(self.base_link, query) result = client.request(query) result = result.decode('iso-8859-1').encode('utf-8') result = result.split("\n") searchString = result[0] query = self.search_link % urllib.quote_plus(searchString) query = urlparse.urljoin(self.base_link, query) result = client.request(query) result = result.decode('iso-8859-1').encode('utf-8') #url = re.compile('movie_id]\s=>\s(\d+)').findall(result)[0] url = re.compile('movieId=(\d+)').findall(result)[0] if url == None or url == '': raise Exception() return url except Exception as e: logger.error(e) return
def movie(self, imdb, title, year): try: self.base_link = self.base_link query = '%s %s' % (title, year) query = '%s' % (title) query = self.search_link % (urllib.quote_plus(query)) query = urlparse.urljoin(self.base_link, query) result = client.request(query) result = result.decode('iso-8859-1').encode('utf-8') result = client.parseDOM(result, "div", attrs={"class": "item"}) title = cleantitle.movie(title) for item in result: searchTitle = client.parseDOM(item, "span", attrs={"class": "tt"})[0] try: searchTitle = re.compile('(.+?) \d{4} ').findall( searchTitle)[0] except: pass searchTitle = cleantitle.movie(searchTitle) if title in searchTitle: url = client.parseDOM(item, "a", ret="href")[0] url = re.compile(".+/(.+?)/").findall(url)[0] break if url == None or url == '': raise Exception() return url except Exception as e: logger.error('[%s] Exception : %s' % (self.__class__, e)) return
def sources(self, url): logger.debug('SOURCES URL %s' % url, __name__) try: srcs = [] if url == None: return srcs url = urlparse.urljoin(self.base_link, url) try: result = client.request(url, referer=self.base_link) except: result = '' result = result.decode('iso-8859-1').encode('utf-8') result = result.replace('\n', '').replace('\t', '') try: quality = client.parseDOM(result, "span", attrs={"class": "calidad2"})[0] except: quality = "" parts = client.parseDOM(result, "div", attrs={"class": "player_nav"})[0] parts = client.parseDOM(parts, "a") items = client.parseDOM(result, "div", attrs={"id": "player2"})[0] items = client.parseDOM(items, "div", attrs={"class": "movieplay"}) for i in range(0, len(items)): try: part = parts[i] part = cleantitle.movie(part) if not "full" in part or "option" in part: continue url = re.compile( '(SRC|src|data-config)=[\'|\"](.+?)[\'|\"]').findall( items[i])[0][1] host = client.host(url) srcs.append({ 'source': host, 'parts': '1', 'quality': quality, 'provider': 'DesiHDMovies', 'url': url, 'direct': False }) except: pass logger.debug('SOURCES [%s]' % srcs, __name__) return srcs except Exception as e: logger.error('[%s] Exception : %s' % (self.__class__, e)) return srcs
def get(self, url, idx=True, provider=None,network=None): try: self.list = cache.get(self.shows, 168, url, provider, network, table='rel_shows') self.list = sorted(self.list, key=lambda k: k['name']) if idx == True: self.tvshowDirectory(self.list) return self.list except Exception as e: logger.error(e, __name__) pass
def shows(self, url, provider=None, network=None): try: # change the implementation to get shows from all providers as save to DB if not provider == None: call = __import__('resources.lib.sources.%s' % provider, globals(), locals(), ['source'], -1).source() self.list = call.tvshows(network, url) self.worker() return self.list except Exception as e: logger.error(e, __name__) pass
def getAuthToken(self): url = base64.b64decode( 'aHR0cHM6Ly9hcHMuZHlubnMuY29tL3RvcC8lcy5waHA/d21zQXV0aFNpZ249') try: userAgent = self.getUserAgent() logger.debug('Final UserAgent : %s' % userAgent, __name__) filename = userAgent[:4] import datetime, hashlib timesegment = datetime.datetime.utcnow().strftime( "%m/%d/%Y %H:%M:%S") validtime = userAgent[4] headers = { 'User-Agent': base64.b64decode( 'UGFrJTIwVFYvMS4wIENGTmV0d29yay84MDguMi4xNiBEYXJ3aW4vMTYuMy4w' ) } ipstring = client.request(base64.b64decode( "aHR0cHM6Ly9hcHMuZHlubnMuY29tL3RvcC9pcF9jaGVjay5waHA="), headers=headers) ipadd = ipstring.split('Address: ')[1] s = "%s%s%s%s" % (ipadd, base64.b64decode("dHVtYmluamlhamF5bmFqYW5h") + userAgent[:10], timesegment, validtime) dd = base64.b64decode( "c2VydmVyX3RpbWU9JXMmaGFzaF92YWx1ZT0lcyZ2YWxpZG1pbnV0ZXM9JXM=" ) % (timesegment, base64.b64encode( hashlib.md5(s).hexdigest().lower()), validtime) url = (url % filename) + base64.b64encode(dd) headers = { 'User-Agent': cache.get(self.getDeviceID, 600000, table='live_cache'), 'Authorization': base64.b64decode( 'QmFzaWMgWW05emMyZGliM056T21kdmIyUm5aMjl2WkE9PQ==') } res = client.request(url, headers=headers) s = list(res) for i in range((len(s) - 59) / 12): ind = len(s) - 59 + (12 * (i)) if ind < len(s): print ind s[ind] = '' return ''.join(s) except Exception as e: logger.error(e)
def movie(self, imdb, title, year): try: key = urlparse.urljoin(self.base_link, self.key_link) key = proxy.request(key, 'searchform') key = client.parseDOM(key, 'input', ret='value', attrs = {'name': 'key'})[0] query = self.moviesearch_link % (urllib.quote_plus(cleantitle.query(title)), key) query = urlparse.urljoin(self.base_link, query) result = str(proxy.request(query, 'index_item')) if 'page=2' in result or 'page%3D2' in result: result += str(proxy.request(query + '&page=2', 'index_item')) result = client.parseDOM(result, 'div', attrs = {'class': 'index_item.+?'}) title = 'watch' + cleantitle.get(title) years = ['(%s)' % str(year), '(%s)' % str(int(year)+1), '(%s)' % str(int(year)-1)] result = [(client.parseDOM(i, 'a', ret='href'), client.parseDOM(i, 'a', ret='title')) for i in result] result = [(i[0][0], i[1][0]) for i in result if len(i[0]) > 0 and len(i[1]) > 0] result = [i for i in result if any(x in i[1] for x in years)] r = [] for i in result: u = i[0] try: u = urlparse.parse_qs(urlparse.urlparse(u).query)['u'][0] except: pass try: u = urlparse.parse_qs(urlparse.urlparse(u).query)['q'][0] except: pass r += [(u, i[1])] match = [i[0] for i in r if title == cleantitle.get(i[1]) and '(%s)' % str(year) in i[1]] match2 = [i[0] for i in r] match2 = [x for y,x in enumerate(match2) if x not in match2[:y]] if match2 == []: return for i in match2[:5]: try: if len(match) > 0: url = match[0] ; break r = proxy.request(urlparse.urljoin(self.base_link, i), 'choose_tabs') if imdb in str(r): url = i ; break except: pass url = re.findall('(?://.+?|)(/.+)', url)[0] url = client.replaceHTMLCodes(url) url = url.encode('utf-8') return url except Exception as e: logger.error(e.message) return
def get(self, url, idx=True, provider=None, lang=None): logger.debug('url [%s] provider [%s] lang [%s] ' % (url, provider, lang), self.__class__) self.lang = lang try: try: u = urlparse.urlparse(url).netloc.lower() except: pass if not provider == None: call = __import__('resources.lib.sources.%s' % provider, globals(), locals(), ['source'], -1).source() self.list = cache.get(call.scn_full_list, 48, url, lang, provider) self.worker() elif u in self.imdb_link: self.list = cache.get(self.imdb_list, 48, url) if idx == True: self.worker() if idx == True: self.movieDirectory(self.list, lang=lang) return self.list except Exception as e: logger.error(e, __name__) pass
def resolve(self, url, resolverList): try: logger.debug('ORIGINAL URL [%s]' % url, __name__) authToken = self.getAuthToken() logger.debug('AuthToken %s' % authToken, __name__) url += authToken if '|' not in url: url += '|' import random useragent = 'User-Agent=AppleCoreMedia/1.0.0.%s (%s; U; CPU OS %s like Mac OS X; en_gb)' % ( random.choice([ '13G35', '13G36', '14A403', '14A456', '14B72', '14B150' ]), random.choice(['iPhone', 'iPad', 'iPod']), random.choice(['9.3.4', '9.3.5', '10.0.2', '10.1', '10.1.1'])) url += useragent result = client.validateUrl(url) logger.debug('RESOLVED URL [%s]' % url, __name__) return url except Exception as e: logger.error(e) return False
def desiTV(self): listItems = [] provider = control.setting('tvshow.provider') if not provider == None: try: call = __import__('resources.lib.sources.%s' % provider, globals(), locals(), ['source'], -1).source() listItems = call.networks() except Exception as e: logger.error(e) pass else: from resources.lib.sources import desirulez listItems = desirulez.source().networks() listItems.sort() for item in listItems: self.addDirectoryItem(item['name'], '%s&provider=%s&url=%s' % (item['action'],item['provider'], item['url']), os.path.join( control.logoPath(), item['image']), 'DefaultMovies.png') self.endDirectory()
def sources(self, url): logger.debug('SOURCES URL %s' % url, __name__) try: quality = '' srcs = [] if url == None: return srcs try: result = client.request(url, headers=self.headers) except: result = '' result = json.loads(result) try: url = result['resultObj']['src'] url = url.replace('http://', 'https://').replace('/z/', '/i/').replace( 'manifest.f4m', 'master.m3u8').replace( '2000,_STAR.', '2000,3000,4500,_STAR.') cookie = client.request(url, headers=self.headers, output='cookie') result = client.request(url, headers=self.headers, cookie=cookie) abc = client.request(url, headers=self.headers, output='extended', close=False) match = re.compile( "BANDWIDTH=[0-9]+,RESOLUTION=[0-9]+x(.+?),[^\n]*\n([^\n]*)\n" ).findall(result) if match: for (res, url) in match: try: host = 'hotstar' quality = self.res_map[res] url = '%s|Cookie=%s' % (url, cookie) srcs.append({ 'source': host, 'parts': '1', 'quality': quality, 'provider': 'Hotstar', 'url': url, 'direct': True }) except Exception as e: logger.error('[%s] Exception : %s' % (self.__class__, e)) pass except Exception as e: logger.error('[%s] Exception : %s' % (self.__class__, e)) pass logger.debug('SOURCES [%s]' % srcs, __name__) return srcs except: return srcs
def sources(self, url): logger.debug('SOURCES URL %s' % url, __name__) try: srcs = [] if url == None: return srcs if not str(url).startswith('http'): data = urlparse.parse_qs(url) data = dict([(i, data[i][0]) if data[i] else (i, '') for i in data]) title = data['tvshowtitle'] if 'tvshowtitle' in data else data[ 'title'] if 'tvshowtitle' in data: url = '%s/tv-show/%s/season/%01d/episode/%01d' % ( self.base_link, cleantitle.geturl(title), int(data['season']), int(data['episode'])) else: url = '%s/movie/%s' % (self.base_link, cleantitle.geturl(title)) result = client.request(url, limit='5') result = client.parseDOM(result, 'title')[0] if '%TITLE%' in result: raise Exception() r = client.request(url, output='extended') else: url = urlparse.urljoin(self.base_link, url) r = client.request(url, output='extended') cookie = r[4] headers = r[3] result = r[0] try: auth = re.findall('__utmx=(.+)', cookie)[0].split(';')[0] except: auth = 'false' auth = 'Bearer %s' % urllib.unquote_plus(auth) headers['Authorization'] = auth headers['X-Requested-With'] = 'XMLHttpRequest' headers[ 'Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8' headers[ 'Accept'] = 'application/json, text/javascript, */*; q=0.01' headers['Cookie'] = cookie headers['Referer'] = url u = '/ajax/tnembeds.php' self.base_link = client.request(self.base_link, output='geturl') u = urlparse.urljoin(self.base_link, u) action = 'getEpisodeEmb' if '/episode/' in url else 'getMovieEmb' elid = urllib.quote( base64.encodestring(str(int(time.time()))).strip()) token = re.findall("var\s+tok\s*=\s*'([^']+)", result)[0] idEl = re.findall('elid\s*=\s*"([^"]+)', result)[0] post = { 'action': action, 'idEl': idEl, 'token': token, 'elid': elid } post = urllib.urlencode(post) r = client.request(u, post=post, headers=headers) r = str(json.loads(r)) r = client.parseDOM(r, 'iframe', ret='.+?') + client.parseDOM( r, 'IFRAME', ret='.+?') links = [] for i in r: try: links += [{ 'source': 'gvideo', 'quality': directstream.googletag(i)[0]['quality'], 'url': i, 'direct': True }] except: pass links += [{ 'source': 'openload.co', 'quality': 'SD', 'url': i, 'direct': False } for i in r if 'openload.co' in i] for i in links: srcs.append({ 'source': i['source'], 'quality': i['quality'], 'provider': 'Putlocker', 'url': i['url'], 'direct': i['direct'], 'debridonly': False }) logger.debug('SOURCES [%s]' % srcs, __name__) return srcs except Exception as e: logger.error(e) return srcs
def channelDirectory(self, items, action='play'): if items == None or len(items) == 0: return addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart = control.addonFanart() artPath = control.logoPath() for i in items: try: label = "%s" % (i['name']) sysname = urllib.quote_plus(i['name']) meta = json.loads(i['meta']) poster, banner, direct = meta['poster'], meta['poster'], i[ 'direct'] try: provider = i['provider'] except: provider = None if poster.startswith('http'): pass elif not artPath == None and not poster == "": poster = os.path.join(artPath, poster) else: poster = addonPoster url = i['url'] if not direct: content = 'live' meta = {"poster": poster, "iconImage": poster} source = { "provider": provider, "url": url, "quality": 'HD', "label": 'Resolving %s' % label, "source": provider, "meta": json.dumps(meta) } syssource = urllib.quote_plus(json.dumps([source])) url = 'action=%s&content=%s&name=%s' % (action, content, sysname) url = '%s?%s' % (sysaddon, url) item = control.item(label=label, iconImage=poster, thumbnailImage=poster) try: item.setArt({'poster': poster, 'banner': banner}) except: pass if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setProperty('Video', 'true') item.setProperty("IsPlayable", "true") item.addContextMenuItems([]) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except Exception as e: logger.error(e, __name__) pass #control.content(syshandle, 'video') #viewMode = 'list' #views.setView('movies', {'skin.confluence': control.viewMode['confluence'][viewMode], 'skin.estuary': # control.viewMode['esturary'][viewMode]}) control.directory(syshandle, cacheToDisc=False)
def tvshowDirectory(self, items, confViewMode='list', estViewMode='widelist'): if items == None or len(items) == 0: return isFolder = True if control.setting('host_select') == '1' else False addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting('fanart') for i in items: try: label = i['name'] systitle = sysname = urllib.quote_plus(i['title']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] try :sysurl, sysprovider = urllib.quote_plus(i['url']), i['provider'] except:pass poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0': banner = poster meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) action = 'episodes' url = '%s?action=%s&provider=%s&url=%s&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, action, sysprovider, sysurl, systitle, year, imdb, tvdb) cm = [] if isFolder == False: cm.append((control.lang(30232).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append((control.lang(30233).encode('utf-8'), 'Action(Info)')) cm.append((control.lang(30234).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&year=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, year, imdb, tvdb))) cm.append((control.lang(30235).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&year=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, year, imdb, tvdb))) cm.append((control.lang(30240).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon)) item = control.item(label=label, iconImage=poster, thumbnailImage=poster) logger.debug('poster %s banner %s fanart %s' % (poster, banner, fanart)) try: item.setArt({'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner}) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels = meta) item.setProperty('Video', 'true') item.addContextMenuItems(cm) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except Exception as e: logger.error(e, __name__) pass content = 'tvshows' control.content(syshandle, content) control.directory(syshandle, cacheToDisc=True) views.setView(content, {'skin.confluence': control.viewMode['confluence'][confViewMode], 'skin.estuary': control.viewMode['esturary'][estViewMode]})
def super_info(self, i): try : if self.list[i]['metacache'] == True: raise Exception() try: imdb = self.list[i]['imdb'] except: imdb = '0' try: tvdb = self.list[i]['tvdb'] except: tvdb = '0' self.list[i].update({"imdb":imdb, "tvdb":tvdb}) title = self.list[i]['title'] if 'season' in title.lower(): title = title[:title.index('Season')-1] else: # strip end #'s title = title.replace(' 10', '') url = self.burp_search_link % urllib.quote_plus(title) result = client.request(url) result = result.decode('iso-8859-1').encode('utf-8') result = result.replace('\n','').replace('\t','') result = client.parseDOM(result, name="table", attrs={"class": "result"})[0] result = client.parseDOM(result, name="td", attrs={"class": "resultTitle"}) showUrl = None for item in result: showTitle = client.parseDOM(item, name="a", attrs={"class": "title"})[0] showTitle = client.parseDOM(showTitle, name="strong")[0] if cleantitle.tv(showTitle) == cleantitle.tv(title): showUrl = client.parseDOM(item, name="a", attrs={"class": "title"}, ret="href")[0] if showUrl != None: break if showUrl == None: raise Exception() result = client.request(showUrl) if 'No information available!' in result: raise Exception() result = result.decode('iso-8859-1').encode('utf-8') #result = result.replace('\n','').replace('\t','') right = client.parseDOM(result, "div", attrs={"class": "Right"})[0] showDetails = client.parseDOM(result, "td", attrs={"class": "showDetails"})[0] try: genre = client.parseDOM(showDetails, "tr") for item in genre: if "genre" in item.lower(): genre = client.parseDOM(item, "td")[0] genre = genre.replace(',', ' / ').strip() elif "show type" in item.lower(): genre = client.parseDOM(item, "td")[0] genre = genre.replace(',', ' / ').strip() except Exception as e: logger.error(e) genre = '' if genre == '': genre = '0' genre = client.replaceHTMLCodes(genre) genre = genre.encode('utf-8') if not genre == '0': self.list[i].update({'genre': genre}) try : poster = client.parseDOM(result, "td", attrs={"class": "showPics"})[0] poster = client.parseDOM(poster, "img", ret="src")[0] except: poster = '' if poster == '' or poster == None: poster = '0' poster = client.replaceHTMLCodes(poster) poster = poster.encode('utf-8') if not poster == '0': self.list[i].update({'poster': poster}) try: plot = client.parseDOM(right, "div", attrs={"class": "synopsis"})[0].strip() try : plot += client.parseDOM(right, "span", attrs={"id": "morecontent"})[0].strip() except:pass except: plot = '' if plot == '': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') if not plot == '0': self.list[i].update({'plot': plot}) try : metaHTML = client.parseDOM(right, "table", attrs={"class": "meta"})[0] except : metaHTML = None if metaHTML: items = client.parseDOM(metaHTML, "tr") premiered = cast = None for item in items : if "release date" in item.lower(): premiered = client.parseDOM(item, "span", attrs={"itemprop": "name"})[0] premiered = premiered.encode('utf-8') elif "Actor" in item: cast = client.parseDOM(item, "span", attrs={"itemprop": "name"})[0] cast = cast.split(',') if premiered != None: try: year = re.compile('(\d{4})').findall(premiered)[0] except: year = '' if year == '': year = '0' year = year.encode('utf-8') self.list[i].update({'year': year}) self.list[i].update({'premiered': premiered}) if cast != None and len(cast) > 0: self.list[i].update({'cast': cast}) imdb = cleantitle.tv(title) tvdb = banner = fanart = studio = duration = rating = votes = mpaa = '0' self.meta.append({'year': year, 'imdb': imdb, 'tvdb': tvdb, 'lang': self.info_lang, 'item': {'code': imdb, 'imdb': imdb, 'tvdb': tvdb, 'poster': poster, 'banner': banner, 'fanart': fanart, 'premiered': premiered, 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'cast': cast, 'plot': plot}}) except Exception as e: logger.error(e, __name__) pass
def resolve(url): try: disableAge = 'http://www.dailymotion.com/family_filter?enable=false&urlback=%s' % url cookie = client.request(disableAge, output='cookie') html = client.request(url, cookie=cookie) matchHDLink = '' matchHQLink = '' matchSDLink = '' matchLDLink = '' matchHD = re.compile( '720\"\:\[\{\"type\"\:\"application\\\/x\-mpegURL\"\,\"url\"\:\"(.+?)\"\}\,\{\"type\"\:\"video\\\/mp4\"\,\"url\"\:\"(.+?)\"', re.DOTALL).findall(html) matchHQ = re.compile( '480\"\:\[\{\"type\"\:\"application\\\/x\-mpegURL\"\,\"url\"\:\"(.+?)\"\}\,\{\"type\"\:\"video\\\/mp4\"\,\"url\"\:\"(.+?)\"', re.DOTALL).findall(html) matchSD = re.compile( '380\"\:\[\{\"type\"\:\"application\\\/x\-mpegURL\"\,\"url\"\:\"(.+?)\"\}\,\{\"type\"\:\"video\\\/mp4\"\,\"url\"\:\"(.+?)\"', re.DOTALL).findall(html) matchLD = re.compile( '240\"\:\[\{\"type\"\:\"application\\\/x\-mpegURL\"\,\"url\"\:\"(.+?)\"\}\,\{\"type\"\:\"video\\\/mp4\"\,\"url\"\:\"(.+?)\"', re.DOTALL).findall(html) try: if matchHD[0][1]: matchHDLink = matchHD[0][1] except: pass try: if matchHQ[0][1]: matchHQLink = matchHQ[0][1] except: pass try: if matchSD[0][1]: matchSDLink = matchSD[0][1] except: pass try: if matchLD[0][1]: matchLDLink = matchLD[0][1] except: pass matchHDLink = matchHDLink.replace('\/', '/') matchHQLink = matchHQLink.replace('\/', '/') matchSDLink = matchSDLink.replace('\/', '/') matchLDLink = matchLDLink.replace('\/', '/') dm_LD = None dm_SD = None dm_HQ = None dm_720 = None final_url = None if matchHDLink: dm_720 = urllib.unquote_plus(matchHDLink).replace("\\", "") if dm_720 is None and matchHQ: dm_720 = urllib.unquote_plus(matchHQLink).replace("\\", "") if matchSD: dm_SD = urllib.unquote_plus(matchSDLink).replace("\\", "") if matchLD: dm_LD = urllib.unquote_plus(matchLDLink).replace("\\", "") if final_url is None and dm_720 is not None: final_url = dm_720 if final_url is None and dm_HQ is not None: final_url = dm_HQ if final_url is None and dm_SD is not None: final_url = dm_SD if final_url is None and dm_LD is not None: final_url = dm_LD if final_url == None: raise Exception() return "%s|Cookie=%s" % (final_url, cookie) except Exception as e: logger.error(e.message) return False
def movieDirectory(self, items, lang=None): if items == None or len(items) == 0: control.infoDialog(control.lang(30518).encode('utf-8')) return indicators = playcount.getMovieIndicators() isPlayable = 'true' if not 'plugin' in control.infoLabel('Container.PluginName') else 'false' playbackMenu = control.lang(30204).encode('utf-8') if control.setting('host_select') == '2' else control.lang(30203).encode('utf-8') cacheToDisc = False if not action == 'movieSearch' else True addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting('fanart') #try: # from metahandler import metahandlers # metaget = metahandlers.MetaData(tmdb_api_key=self.tmdb_key, preparezip=False) #except: # pass for i in items: try: label = '%s (%s)' % (i['title'], i['year']) imdb, title, year, trailer = i['imdb'], i['title'], i['year'], i.get('trailer') sysname = urllib.quote_plus('%s (%s)' % (title, year)) systitle = urllib.quote_plus(title) poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0': banner = poster #logger.debug('Title : %s poster : %s banner : %s fanart : %s' % (i['title'], poster, banner, fanart), __name__) meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'trailer': '%s?action=trailer&name=%s&url=%s' % (sysaddon, sysname, trailer)}) if i['duration'] == '0': meta.update({'duration': '120'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=play&name=%s&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (sysaddon, sysname, systitle, year, imdb, sysmeta, self.systime) sysurl = urllib.quote_plus(url) #try: # playcount = metaget._get_watched('movie', imdb, '', '') # if playcount == 7: meta.update({'playcount': 1, 'overlay': 7}) # else: meta.update({'playcount': 0, 'overlay': 6}) #except: # pass cm = [] cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) # AUTOPLAY cm.append((control.lang(30214).encode('utf-8'), 'RunPlugin(%s?action=trailer&name=%s&url=%s)' % (sysaddon, sysname, trailer))) # TRAILER cm.append((control.lang(30205).encode('utf-8'), 'Action(Info)')) # MOVIEINFORMATION cm.append((control.lang(30212).encode('utf-8'), 'RunPlugin(%s?action=addView&content=movies)' % sysaddon)) # SET MOVIES VIEW try: overlay = int(playcount.getMovieOverlay(indicators, imdb)) logger.debug('imdb : %s Overlay : %s' % (imdb, overlay), __name__) if overlay == 7: cm.append((control.lang(30206).encode('utf-8'), 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=6)' % (sysaddon, imdb))) meta.update({'playcount': 1, 'overlay': 7}) else: cm.append((control.lang(30207).encode('utf-8'), 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=7)' % (sysaddon, imdb))) meta.update({'playcount': 0, 'overlay': 6}) except Exception as e: logger.error(e, __name__) #pass item = control.item(label=label, iconImage=poster, thumbnailImage=poster) try: item.setArt({'poster': poster, 'banner': banner}) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels = meta) item.setProperty('Video', 'true') item.setProperty('IsPlayable', isPlayable) item.addContextMenuItems(cm) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except Exception as e: logger.error(e, __name__) pass try: url = items[0]['next'] if url == '': raise Exception() url = '%s?action=movies&url=%s' % (sysaddon, urllib.quote_plus(url)) addonNext = control.addonNext() item = control.item(label=control.lang(30213).encode('utf-8'), iconImage=addonNext, thumbnailImage=addonNext) item.addContextMenuItems([]) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except Exception as e: logger.error(e, __name__) pass content = 'movies' control.content(syshandle, content) control.directory(syshandle, cacheToDisc=cacheToDisc) views.setView(content, {'skin.confluence': control.viewMode['confluence']['thumbnails'], 'skin.estuary': control.viewMode['esturary']['list']})
def super_info(self, i): try: if self.list[i]['metacache'] == True: raise Exception() imdb = self.list[i]['imdb'] ''' try: from metahandler import metahandlers metaget = metahandlers.MetaData(tmdb_api_key=self.tmdb_key, preparezip=False) meta = metaget.get_meta('movie', self.list[i]['imdb'], imdb_id=self.list[i]['imdb']) except: print 'INSIDE EXPCETION' import traceback traceback.print_exc() pass ''' url = self.tm_info_link % imdb item = client.request(url, timeout='10') item = json.loads(item) tmdb = item.get('id') self.list[i].update({'tmdb':tmdb}) title = item.get('title') title = title.encode('utf-8') if not title == '0': self.list[i].update({'title': title}) year = item.get('release_date') match = re.search('\d{4}', year) year = match.group(0) if match else '0' year = year.encode('utf-8') if not year == '0': self.list[i].update({'year': year}) imdb = item.get('imdb_id') if imdb == None or imdb == '' or imdb == 'N/A': imdb = '0' imdb = imdb.encode('utf-8') if not imdb == '0': self.list[i].update({'imdb': imdb, 'code': imdb}) premiered = item.get('release_date') if premiered == None or premiered == '' or premiered == 'N/A': premiered = '0' premiered = premiered.encode('utf-8') if not premiered == '0': self.list[i].update({'premiered': premiered}) genre = item.get('genres') genre = [x['name'] for x in genre] genre = " / ".join(genre) if genre == None or genre == '' or genre == 'N/A': genre = '0' genre = genre.encode('utf-8') if not genre == '0': self.list[i].update({'genre': genre}) duration = item.get('runtime') if duration == None or duration == '' or duration == 'N/A': duration = '0' duration = re.sub('[^0-9]', '', str(duration)) duration = duration.encode('utf-8') if not duration == '0': self.list[i].update({'duration': duration}) rating = votes = mpaa = '0' crew = item.get('credits').get('crew') director = [x.get('name') for x in crew if x.get('job') == 'Director'] director = " / ".join(director) if director == None or director == '' or director == 'N/A': director = '0' director = re.sub(r'\(.*?\)', '', director) director = ' '.join(director.split()) director = director.encode('utf-8') if not director == '0': self.list[i].update({'director': director}) writer = [x.get('name') for x in crew if x.get('job') == 'Writer'] writer = " / ".join(writer) if writer == None or writer == '' or writer == 'N/A': writer = '0' writer = re.sub(r'\(.*?\)', '', writer) writer = ' '.join(writer.split()) writer = writer.encode('utf-8') if not writer == '0': self.list[i].update({'writer': writer}) cast = item.get('credits').get('cast') cast = [(x.get('name'), x.get('character')) for x in cast] if cast == None or cast == '' or cast == 'N/A' or cast == []: cast = '0' if not cast == '0': self.list[i].update({'cast': cast}) plot = item.get('overview') if plot == None or plot == '' or plot == 'N/A': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') if not plot == '0': self.list[i].update({'plot': plot}) art = item.get('images') try: poster = art.get('posters') poster = sorted(poster, key=lambda k: k['width'], reverse=True) poster = [(x['width'], x['file_path']) for x in poster] poster = [(x[0], x[1]) if x[0] < 500 else ('500', x[1]) for x in poster] poster = self.tm_img_link % poster[0] poster = poster.encode('utf-8') if not poster == '0': self.list[i].update({'poster': poster}) except: poster = '0' try: fanart = art.get('backdrops') fanart = sorted(fanart, key=lambda k: k['width'], reverse=True) fanart = [(x['width'], x['file_path']) for x in fanart] fanart = [(x[0], x[1]) if x[0] < 1280 else ('1280', x[1]) for x in fanart] fanart = self.tm_img_link % fanart[0] fanart = fanart.encode('utf-8') if not fanart == '0': self.list[i].update({'fanart': fanart}) except: fanart = '0' trailer = item.get('trailers') if trailer : trailer = trailer.get('youtube') found_trailer = next((x for x in trailer if x['type'] == 'Trailer'), None) if found_trailer: trailer = found_trailer['source'] self.list[i].update({'trailer': trailer}) else: trailer = '0' studio = self.list[i]['studio'] url = self.trakt_info_link % imdb art3 = trakt.getTrakt(url) art3 = json.loads(art3) if poster == '0': try: poster = art3['images']['poster']['medium'] except: pass if poster == None or not '/posters/' in poster: poster = '0' poster = poster.rsplit('?', 1)[0] if poster == '0': poster = self.list[i]['poster'] poster = poster.encode('utf-8') if not poster == '0': self.list[i].update({'poster': poster}) banner = '0' try: banner = art3['images']['banner']['full'] except: pass if banner == None or not '/banners/' in banner: banner = '0' banner = banner.rsplit('?', 1)[0] banner = banner.encode('utf-8') if not banner == '0': self.list[i].update({'banner': banner}) if fanart == '0': try: fanart = item['images']['fanart']['full'] except: pass if fanart == None or not '/fanarts/' in fanart: fanart = '0' fanart = fanart.rsplit('?', 1)[0] if fanart == '0': poster = self.list[i]['fanart'] fanart = fanart.encode('utf-8') if not fanart == '0': self.list[i].update({'fanart': fanart}) # add code for watched overlay self.meta.append({'imdb': imdb, 'tmdb':tmdb, 'tvdb': '0', 'lang': self.lang, 'item': {'title': title, 'year': year, 'code': imdb, 'imdb': imdb, 'poster': poster, 'banner': banner, 'fanart': fanart, 'premiered': premiered, 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot, 'trailer':trailer}}) except Exception as e: logger.error(e, __name__) pass
def livetv(self): try: generateJSON = cache.get(self.removeJSON, 168, __name__, table='live_cache') if not os.path.exists(self.filePath): generateJSON = 1 if generateJSON: logger.debug('Generating %s JSON' % __name__, __name__) ''' filePath = os.path.join(control.dataPath, self.fileName) with open(filePath, 'w') as outfile: json.dump(self.base_link, outfile, sort_keys=True, indent=2) filename = open(self.filePath) result = filename.read() filename.close() self.base_link = json.loads(result) ''' channelList = {} if control.setting('livelocal') == 'true': self.base_location = os.path.join(control.dataPath, 'iptv_base.local') file = open(self.base_location) result = file.read() file.close() else: result = client.request(self.base_location) self.base_link = json.loads(result) for item in self.base_link: try: enabled = item['enabled'] if enabled == "false": logger.debug('Skipping %s' % item['link'], __name__) continue type = item['source'] link = item['link'] regex = item['regex'] headers = link.rsplit('|', 1)[1] link = link.rsplit('|', 1)[0] except: headers = None ''' if control.setting('livelocal') == 'true' : self.base_location = os.path.join(control.dataPath, 'test_base.local') file = open(self.base_location) result = file.read() file.close() else: result = client.request(link, timeout=5) ''' logger.debug('Fetching %s' % link, __name__) result = client.request(link, timeout=5) if result == None: continue result = result.replace('\r', '') result = re.findall(regex, result, re.IGNORECASE) for source, title, cUrl in result: title = title.strip() #title = cleantitle.live(title) #if title == 'SKIP': # continue if not headers == None: cUrl = '%s|%s' % (cUrl, headers) channelList['%s||%s' % (title, type)] = { 'icon': '', 'url': cUrl, 'provider': 'iptv', 'source': type, 'direct': False, 'quality': 'HD' } logger.debug( 'Fetched [%s] from %s' % (len(channelList), link), __name__) filePath = os.path.join(control.dataPath, self.fileName) with open(filePath, 'w') as outfile: json.dump(channelList, outfile, sort_keys=True, indent=2) liveParser = LiveParser(self.fileName, control.addon) self.srcs = liveParser.parseFile(decode=False) return (generateJSON, self.srcs) except Exception as e: import traceback traceback.print_exc() logger.error(e) pass
def sources(self, url): try: logger.debug('SOURCES URL %s' % url, __name__) quality = '' srcs = [] result = '' links = [self.base_link_1, self.base_link_2, self.base_link_3] for base_link in links: try: result = client.request(base_link + '/' + url) except: result = '' if 'item' in result: break result = result.decode('iso-8859-1').encode('utf-8') result = result.replace('\n', '') items = client.parseDOM(result, 'content:encoded')[0] items = re.compile('class=\"single-heading\">(.+?)<span').findall( items) for i in range(0, len(items)): try: if '720p' in items[i]: quality = 'HD' else: quality = 'SD' urls = client.parseDOM(items[i], "a", ret="href") for j in range(0, len(urls)): videoID = getVideoID(urls[j]) result = client.request(self.info_link % videoID) result = result.decode('iso-8859-1').encode('utf-8') item = client.parseDOM( result, name="div", attrs={ "style": "float:none;height:700px;margin-left:200px" })[0] rUrl = re.compile( '(SRC|src|data-config)=[\'|\"](.+?)[\'|\"]' ).findall(item)[0][1] if not rUrl.startswith( 'http:') and not rUrl.startswith('https:'): rUrl = '%s%s' % ('http:', rUrl) urls[j] = rUrl host = client.host(urls[0]) url = "##".join(urls) srcs.append({ 'source': host, 'parts': str(len(urls)), 'quality': quality, 'provider': 'YoDesi', 'url': url, 'direct': False }) urls = [] except Exception as e: logger.error(e) pass logger.debug('SOURCES [%s]' % srcs, __name__) return srcs except: return srcs