コード例 #1
0
ファイル: episodes.py プロジェクト: abc8496/aftershock
    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
コード例 #2
0
    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
コード例 #3
0
ファイル: tvshows.py プロジェクト: abc8496/aftershock
    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)
コード例 #4
0
ファイル: livetv.py プロジェクト: abc8496/aftershock
    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
コード例 #5
0
ファイル: mdesihit.py プロジェクト: abc8496/aftershock
    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
コード例 #6
0
ファイル: desihdmovies.py プロジェクト: abc8496/aftershock
    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
コード例 #7
0
ファイル: desihdmovies.py プロジェクト: abc8496/aftershock
    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
コード例 #8
0
ファイル: tvshows.py プロジェクト: abc8496/aftershock
 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
コード例 #9
0
ファイル: tvshows.py プロジェクト: abc8496/aftershock
    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
コード例 #10
0
    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)
コード例 #11
0
ファイル: primewire.py プロジェクト: abc8496/aftershock
    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
コード例 #12
0
ファイル: movies.py プロジェクト: abc8496/aftershock
    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
コード例 #13
0
    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
コード例 #14
0
    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()
コード例 #15
0
    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
コード例 #16
0
    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
コード例 #17
0
ファイル: livetv.py プロジェクト: abc8496/aftershock
    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)
コード例 #18
0
ファイル: tvshows.py プロジェクト: abc8496/aftershock
    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]})
コード例 #19
0
ファイル: tvshows.py プロジェクト: abc8496/aftershock
    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
コード例 #20
0
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
コード例 #21
0
ファイル: movies.py プロジェクト: abc8496/aftershock
    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']})
コード例 #22
0
ファイル: movies.py プロジェクト: abc8496/aftershock
    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
コード例 #23
0
    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
コード例 #24
0
ファイル: yodesi.py プロジェクト: abc8496/aftershock
    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