def episodios(item): support.info() itemlist = [] if type(item.data) in [list, dict] and len(item.data) > 1 and ('name' in item.data[0] and 'stagione' not in item.data[0]['name'].lower()): for key in item.data: itemlist.append(item.clone(title = support.typo(key['name'], 'bold'), url = getUrl(key['path_id']), contentType = 'tvshow', action = 'episodios')) elif type(item.data) in [list, dict]: for key in item.data: load_episodes(key, item) with futures.ThreadPoolExecutor() as executor: itlist = [executor.submit(load_episodes, key, item) for key in item.data] for res in futures.as_completed(itlist): if res.result(): itemlist += res.result() if itemlist and itemlist[0].VL: # itemlist.reverse() itemlist = sorted(itemlist, key=lambda it: it.order) item.action = 'episodios' support.videolibrary(itemlist, item) else: itemlist = sorted(itemlist, key=lambda it: it.title) else: date = '' if type(item.data) in [list, dict]: item.data = getUrl(item.url[0]['path_id']) json = current_session.get(item.url).json()['items'] for key in json: ep = support.match(key['subtitle'], patron=r'(?:St\s*(\d+))?\s*Ep\s*(\d+)').match if ep: season = '1' if not ep[0] else ep[0] episode = ep[1].zfill(2) title = support.re.sub(r'(?:St\s*\d+)?\s*Ep\s*\d+','',key['subtitle']) title = season + 'x' + episode + (' - ' + title if not title.startswith(' ') else title if title else '') elif item.season and support.match(item.title.lower(), patron =r'(puntate)').match: title = key['subtitle'].strip() if not title: title = key['name'] date = support.match(title, patron=r'(\d+/\d+/\d+)').match if date: date = title.split('/') date = date[2][-2] + '/' + date[1] + '/' + date[0] else: title = key['subtitle'].strip() if not title: title = key['name'] itemlist.append(item.clone(title = support.typo(title, 'bold'), action = 'findvideos', VL=True if ep else False, plot = key['description'], fanart = getUrl(key['images']['landscape']), url = key['video_url'], contentType = 'episode', date=date)) if item.season and support.match(item.title.lower(), patron =r'(puntate)').match: itemlist = sorted(itemlist, key=lambda it: it.date) for i, it in enumerate(itemlist): episode = str(i + 1) it.title = support.typo(item.season + 'x' + episode, 'bold') + (' - ' + it.title) if itemlist and itemlist[0].VL: support.videolibrary(itemlist, item) if itemlist and not support.match(itemlist[0].title, patron=r'[Ss]?(\d+)(?:x|_|\.|\s+)[Ee]?[Pp]?(\d+)').match and inspect.stack()[1][3] not in ['find_episodes']: autorenumber.start(itemlist, item) return itemlist
def peliculas(item): itemlist = [] if not item.args: json_file =loadjs(item.url + 'channel/10005/last/') support.logger.debug(json_file) make_itemlist(itemlist, item, json_file) elif ('=' not in item.args) and ('=' not in item.url): json_file=loadjs(item.url + item.args) make_itemlist(itemlist, item, json_file) elif '=' in item.args: json_file = current_session.get(item.url + 'channels', headers=headers, params=payload).json() Filter = support.match(item.args, patron=r'\?([^=]+)=').match keys = [i[Filter] for i in json_file['data'] if Filter in i][0] for key in keys: if key not in ['1','2']: itemlist.append( item.clone(title = support.typo(key.upper() if Filter == 'filter' else key['name'], 'bold'), url = item.url + item.args + (key if Filter == 'filter' else str(key['id'])), action = 'peliculas', args = 'filters')) else : json_file=loadjs(item.url) make_itemlist(itemlist, item, json_file) if 'category' in item.args: support.thumb(itemlist,genre=True) elif not 'filter' in item.args: if item.contentType != 'movie': autorenumber.start(itemlist) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) return itemlist
def peliculas(item): logger.debug() itemlist = [] page = item.page if item.page else 0 js = httptools.downloadpage('{}?page={}&size={}{}&sort={},{}&sort=id'.format(item.url, page, perpage, item.variable, sort, order)).json for it in js: title, lang = get_lang(it['title']) long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod') itemlist.append(item.clone(title = long_title, fulltitle = title, show = title, contentLanguage = lang, contentType = 'movie' if it['type'] == 'Movie' else 'tvshow', contentTitle = title, contentSerieName = title if it['type'] == 'Serie' else '', action ='findvideos' if it['type'] == 'Movie' else 'episodios',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodios', plot = it['storyline'], # year = it['startDate'].split('-')[0], url = '{}/api/anime/{}'.format(host, it['id']), thumbnail = get_thumbnail(it), fanart = get_thumbnail(it, 'horizontalImages'))) autorenumber.start(itemlist) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) if len(itemlist) == perpage: support.nextPage(itemlist, item.clone(page = page + 1)) return itemlist
def episodios(item): logger.debug() itemlist = [] # url = '{}/api/anime/{}'.format(host, item.id) json = httptools.downloadpage(item.url, CF=False).json if type(json) == list: item.show_renumber = False itemlist = list_episodes(item, json) elif json.get('seasons'): seasons = json['seasons'] seasons.sort(key=lambda s: s['episodeStart']) for it in seasons: title = it['name'] itemlist.append( item.clone(title=title, id='{}/season/{}'.format(it['animeId'], it['id']), contentType='season', action='list_episodes', plot=json['storyline'], year=it['yearStart'], show_renumber=True)) # If the call come from the videolibrary or autorenumber, shows the episodes if stack()[1][3] in [ 'add_tvshow', 'get_episodes', 'update', 'find_episodes' ]: itlist = [] with futures.ThreadPoolExecutor() as executor: eplist = [] for ep in itemlist: ep.show_renumber = False eplist.append(executor.submit(list_episodes, ep)) for res in futures.as_completed(eplist): if res.result(): itlist.extend(res.result()) itemlist = itlist elif json.get('episodes'): itemlist = list_episodes(item, json) # add renumber option if stack()[1][3] not in [ 'find_episodes' ] and itemlist and itemlist[0].contentType == 'episode': autorenumber.start(itemlist, item) # add add to videolibrary menu if stack()[1][3] not in [ 'add_tvshow', 'get_episodes', 'update', 'find_episodes' ]: support.videolibrary(itemlist, item) return itemlist
def peliculas(item): support.info() itemlist = [] page = item.page if item.page else 0 item.args['offset'] = page * 30 order = support.config.get_setting('order', item.channel) if order: order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ] item.args['order'] = order_list[order] payload = json.dumps(item.args) records = requests.post(host + '/archivio/get-animes', headers=headers, data=payload).json()['records'] # js = [] # support.info(records) # for record in records: # js += record for it in records: lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match title = support.re.sub(r'\s*\([^\)]+\)', '', it['title']) if 'ita' in lang.lower(): language = 'ITA' else: language = 'Sub-ITA' itm = item.clone(title=support.typo(title,'bold') + support.typo(language,'_ [] color kod') + (support.typo(it['title_eng'],'_ ()') if it['title_eng'] else '')) itm.contentLanguage = language itm.type = it['type'] itm.thumbnail = it['imageurl'] itm.plot = it['plot'] if it['episodes_count'] == 1: itm.contentType = 'movie' itm.fulltitle = itm.show = itm.contentTitle = title itm.contentSerieName = '' itm.action = 'findvideos' itm.url = it['episodes'][0]['link'] else: itm.contentType = 'tvshow' itm.contentTitle = '' itm.fulltitle = itm.show = itm.contentSerieName = title itm.action = 'episodios' itm.episodes = it['episodes'] if 'episodes' in it else it['link'] itm.url = item.url itemlist.append(itm) autorenumber.start(itemlist) if len(itemlist) >= 30: itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), page=page + 1)) return itemlist
def episodios(item): logger.debug() reEp = r'"isEpisodes":[^,]+,"items":(.*?])' def load_more(url): second_url = host if url.startswith('/') else '' + url.replace('\u002F','/').replace('%5C','/') new_data = support.match(host + second_url).data match = support.scrapertools.decodeHtmlentities(support.match(new_data, headers=headers, patron=r'"items":([^\]]+])').match.replace('\x01','l').replace('\x02','a')) return jsontools.load(match) itemlist = [] page_data = support.match(item.url).data seasons = support.match(page_data, patron=r'href="([^"]+)"[^>]+>Stagione\s*\d+').matches more = support.match(page_data, patron=r'loadingTitle":[^,]+,"url":"([^"]+)"').match data = jsontools.load(support.scrapertools.decodeHtmlentities(support.match(page_data, patron=reEp).match)) if data: if more: data += load_more(more) if seasons: for url in seasons: new_data = support.match(host + url).data data += jsontools.load(support.scrapertools.decodeHtmlentities(support.match(new_data, patron=reEp).match.replace('\x01','l').replace('\x02','a'))) match = support.match(new_data, patron=r'loadingTitle":[^,]+,"url":"([^"]+)"').match if match and match != load_more: data += load_more(match) for it in data: if 'text' in it['meta']['header']['title']: se = it['meta']['header']['title']['text'] s = support.match(se, patron=r'S\s*(?P<season>\d+)').match e = support.match(se, patron=r'E\s*(?P<episode>\d+)').match if not e: e = support.match(it['meta']['subHeader'], patron=r'(\d+)').match title = support.typo((s + 'x' if s else 'Episodio ') + e.zfill(2) + ' - ' + it['meta']['subHeader'],'bold') else: s = e = '0' title = support.typo(it['meta']['header']['title'],'bold') itemlist.append( item.clone(title=title, season=int(s) if s else '', episode=int(e), url=host + it['url'] if it['url'].startswith('/') else it['url'], thumbnail=it['media']['image']['url'], fanart=it['media']['image']['url'], plot=it['meta']['description'], contentType='episode', action='findvideos')) itemlist.sort(key=lambda item: (item.season, item.episode)) if inspect.stack()[1][3] not in ['find_episodes']: autorenumber.start(itemlist, item) return support.videolibrary(itemlist, item)
def episodios(item): itemlist = [] json_file = current_session.get(item.url, headers=headers, params=payload).json() for i, block in enumerate(json_file['data']): if len(json_file['data']) > 1: prepend = str(i + 1) + 'x' else: prepend = 'Episodio ' show_id = str(block['show_id']) season_id = str(block['season_id']) episodes = [] support.info('SEASON ID= ', season_id) for episode in json_file['data']: episodes.append(episode['episodes']) for episode in episodes: for key in episode: if 'stagione' in encode(key['title']).lower(): season = support.match(encode(key['title']), patron=r'[Ss]tagione\s*(\d+)').match episode = support.match( encode(key['title']), patron=r'[Ee]pisodio\s*(\d+)').match if season and episode: title = season + 'x' + episode + ' - ' + item.fulltitle make_item = True elif int(key['season_id']) == int(season_id): try: title = prepend + key['number'] + ' - ' + key[ 'title'].encode('utf8') except: title = prepend + key['number'] + ' - ' + key['title'] make_item = True else: make_item = False if make_item == True: if type(title) == tuple: title = title[0] itemlist.append( item.clone(title=title, url=host + show_id + '/season/' + str(key['season_id']), action='findvideos', video_id=key['video_id'])) autorenumber.start(itemlist, item) if autorenumber.check(item) == True \ or support.match(itemlist[0].title, patron=r"(\d+x\d+)").match: support.videolibrary(itemlist, item) return itemlist
def episodios(item): itemlist = [] if item.episodes: episodes = item.episodes show_id = item.show_id season_id = item.season_id else: json_file = current_session.get(item.url, headers=headers, params=payload).json()['data'] if len(json_file) > 1: for key in json_file: itemlist.append( item.clone(title=support.typo(key['name'], 'bold'), show_id=str(key['show_id']), season_id=str(key['season_id']), episodes=key['episodes'])) return itemlist else: episodes = json_file[0]['episodes'] show_id = str(json_file[0]['show_id']) season_id = str(json_file[0]['season_id']) for episode in episodes: try: title = 'Episodio ' + episode['number'] + ' - ' + episode[ 'title'].encode('utf8') except: title = 'Episodio ' + episode['number'] + ' - ' + episode['title'] if type(title) == tuple: title = title[0] itemlist.append( item.clone(title=support.typo(title, 'bold'), url=main_host + show_id + '/season/' + str(season_id), action='findvideos', video_id=episode['video_id'])) if inspect.stack()[1][3] not in ['find_episodes']: autorenumber.start(itemlist, item) support.videolibrary(itemlist, item) return itemlist
def list_episodes(item, json=None): itemlist = [] if not json: url = '{}/api/anime/{}'.format(host, item.id) json = httptools.downloadpage(url, CF=False).json episodes = json['episodes'] if 'episodes' in json else json episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0])) for it in episodes: quality = 'Full HD' if it['fullHd'] else 'HD' if item.contentSeason: episode = '{}x{:02d}'.format( item.contentSeason, int(it['episodeNumber'].split('.')[0])) else: episode = '{:02d}'.format(int(it['episodeNumber'].split('.')[0])) title = support.typo('{}. {}'.format(episode, it['title']), 'bold') image = get_thumbnail(it, 'episodeImages') itemlist.append( item.clone( title=title, id=it['id'], url='api/episode/{}'.format(it['id']), contentType='episode', contentEpisodeNumber=int(it['episodeNumber'].split('.')[0]), contentSeason=item.contentSeason if item.contentSeason else '', action='findvideos', quality=quality, thumbnail=image, fanart=image)) # Renumber episodes only if shown in the menu if item.show_renumber: autorenumber.start(itemlist, item) return itemlist
def episodios(item): support.info() itemlist = [] title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio ' for it in item.episodes: itemlist.append( support.Item(channel=item.channel, title=support.typo(title + it['number'], 'bold'), episode=it['number'], fulltitle=item.title, show=item.title, contentTitle='', contentSerieName=item.contentSerieName, thumbnail=item.thumbnail, plot=item.plot, action='findvideos', contentType='episode', url=it['link'])) autorenumber.start(itemlist, item) support.videolibrary(itemlist, item) support.download(itemlist, item) return itemlist
def episodios(item): support.info() itemlist = [] title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio ' for it in item.episodes: itemlist.append( item.clone(title=support.typo(title + it['number'], 'bold'), episode=it['number'], fulltitle=item.title, show=item.title, contentTitle='', contentSerieName=item.contentSerieName, thumbnail=item.thumbnail, plot=item.plot, action='findvideos', contentType='episode', scws_id=it.get('scws_id', ''), video_url=it.get('link', ''))) if inspect.stack()[1][3] not in ['find_episodes']: autorenumber.start(itemlist, item) support.videolibrary(itemlist, item) support.download(itemlist, item) return itemlist
def peliculas(item): itemlist = [] if item.contentType == 'movie': Type = 'Movie' action = 'findvideos' else: Type = 'Series' action = 'episodios' if not item.page: item.page = 1 pagination_values = [20, 40, 60, 80, 100] pagination = pagination_values[support.config.get_setting( 'pagination', 'paramount')] item.url = host + '/api/search?activeTab=' + Type + '&searchFilter=site&pageNumber=0&rowsPerPage=10000' data = jsontools.load(support.match(item).data)['response']['items'] titles = [] for it in data: title = it['meta']['header']['title'] if title not in titles: titles.append(title) d = it['meta']['date'].split('/') if it['meta']['date'] else [ '0000', '00', '00' ] date = int(d[2] + d[1] + d[0]) if item.search.lower() in title.lower() \ and 'stagione' not in it['url'] \ and 'season' not in it['url'] \ and title not in ['Serie TV']: itemlist.append( item.clone( title=support.typo(title, 'bold'), action=action, fulltitle=title, show=title, contentTitle=title if it['type'] == 'movie' else '', contentSerieName=title if it['type'] != 'movie' else '', plot=it['meta']['description'] if 'description' in it['meta'] else '', url=host + it['url'], date=date, thumbnail='https:' + it['media']['image']['url'] if 'url' in it['media']['image'] else item.thumbnail)) itemlist.sort(key=lambda item: item.fulltitle) if not item.search: itlist = [] for i, it in enumerate(itemlist): if pagination and (item.page - 1) * pagination > i and not item.search: continue # pagination if pagination and i >= item.page * pagination and not item.search: break # pagination itlist.append(it) if pagination and len( itemlist) >= item.page * pagination and not item.search: itlist.append( item.clone(channel=item.channel, action='peliculas', title=support.typo( support.config.get_localized_string(30992), 'color kod bold'), page=item.page + 1, thumbnail=support.thumb())) itemlist = itlist autorenumber.start(itemlist) return itemlist
def peliculas(item): if not item.page: item.page = 1 itemlist = [] if not item.args: if not itemlist: json_file = loadjs(item.url + 'channel/10005/last/') support.logger.debug(json_file) make_itemlist(itemlist, item, json_file) elif ('=' not in item.args) and ('=' not in item.url): json_file = loadjs(item.url + item.args) make_itemlist(itemlist, item, json_file) elif '=' in item.args: json_file = current_session.get(item.url + 'channels', headers=headers, params=payload).json() Filter = support.match(item.args, patron=r'\?([^=]+)=').match keys = [i[Filter] for i in json_file['data'] if Filter in i][0] for key in keys: if key not in ['1', '2']: itemlist.append( item.clone(title=support.typo( key.upper() if Filter == 'filter' else key['name'], 'bold'), url=item.url + item.args + (key if Filter == 'filter' else str(key['id'])), action='peliculas', args='filters')) else: json_file = loadjs(item.url) item.args = '' make_itemlist(itemlist, item, json_file) itlist = [] if not item.newest: for i, it in enumerate(itemlist): if pagination and (item.page - 1) * pagination > i: continue # pagination if pagination and i >= item.page * pagination: break # pagination itlist.append(it) if pagination and len(itemlist) >= pagination: if inspect.stack()[1][3] != 'get_newest': itlist.append( item.clone(action='peliculas', title=support.typo( config.get_localized_string(30992), 'color kod bold'), fulltitle=item.fulltitle, show=item.show, url=item.url, args=item.args, page=item.page + 1, thumbnail=support.thumb())) itemlist = itlist if 'category' in item.args: support.thumb(itemlist, genre=True) elif not 'filter' in item.args: if item.contentType != 'movie': autorenumber.start(itemlist) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) return itemlist