def eztv_get_show_seasons(show_id): import random import re from itertools import groupby from concurrent import futures from xbmctorrent.utils import first, terminating, url_get from xbmctorrent import tvdb plugin.set_content("seasons") tvdb_id = first(plugin.request.args.get("tvdb_id")) with futures.ThreadPoolExecutor(max_workers=2) as pool: def _eztv_get_show(): plugin.log.info("Getting show") response = url_get("%s/shows/%s/" % (BASE_URL, show_id), headers=HEADERS) plugin.log.info("Got show") return response seasons_html = pool.submit(_eztv_get_show) if tvdb_id: tvdb_show = pool.submit(tvdb.get_all_meta, plugin.request.args["tvdb_id"][0]) seasons_html = seasons_html.result() fanarts = [] seasons = {} iter_list = re.findall(r'<a .*?class="epinfo".*?>(.*?)</a.*?>', seasons_html) for node_episode in iter_list: season, episode = get_episode_data_from_name(node_episode) seasons.setdefault(season, {})[episode] = True if tvdb_id: tvdb_show = tvdb_show.result() fanarts = list([ banner for banner in tvdb_show["banners"] if banner["bannertype"] == "fanart" ]) random.shuffle(fanarts) for i, season in enumerate(reversed(sorted(seasons.keys()))): item = tvdb_id and tvdb.get_season_list_item(tvdb_show, season) or {} item.update({ "label": "Season %d [%d episodes]" % (season, len(seasons[season])), "path": plugin.url_for("eztv_get_episodes_for_season", show_id=show_id, season=season, tvdb_id=tvdb_id), }) if fanarts: item.setdefault("properties", {}).update({ "fanart_image": fanarts[i % len(fanarts)]["bannerpath"], }) yield item
def eztv_get_show_seasons(show_id): import random from bs4 import BeautifulSoup from itertools import groupby from multiprocessing.pool import ThreadPool from xbmctorrent.utils import first, terminating, url_get from xbmctorrent import tvdb # plugin.set_content("seasons") tvdb_id = first(plugin.request.args.get("tvdb_id")) with terminating(ThreadPool(2)) as pool: def _eztv_get_show(): plugin.log.info("Getting show") response = url_get("http://eztv.it/shows/%s/" % show_id, headers=HEADERS) plugin.log.info("Got show") return BeautifulSoup(response, "html5lib") soup = pool.apply_async(_eztv_get_show) if tvdb_id: tvdb_show = pool.apply_async(tvdb.get_all_meta, [plugin.request.args["tvdb_id"][0]]) soup = soup.get() fanarts = [] if tvdb_id: tvdb_show = tvdb_show.get() fanarts = list([banner for banner in tvdb_show["banners"] if banner["bannertype"] == "fanart"]) random.shuffle(fanarts) for node in soup.findAll("a", "epinfo"): if get_episode_data_from_name(node.text)[0] < 0: plugin.redirect(plugin.url_for("eztv_get_episodes_for_season", show_id=show_id, season=-1, tvdb_id=tvdb_id)) return # This is needed because we need to be able to redirect if no seasons are found. items = [] for i, (season, episodes) in enumerate(groupby(soup.findAll("a", "epinfo"), lambda node: get_episode_data_from_name(node.text)[0])): if tvdb_id: item = tvdb.get_season_list_item(tvdb_show, season) else: item = { "label": "Season %d" % season } item.update({ "path": plugin.url_for("eztv_get_episodes_for_season", show_id=show_id, season=season, tvdb_id=tvdb_id), }) # if fanarts: item.setdefault("properties", {}).update({ "fanart_image": fanarts[i % len(fanarts)]["bannerpath"], }) items.append(item) return items
def eztv_get_show_seasons(show_id): import random import re from itertools import groupby from concurrent import futures from xbmctorrent.utils import first, terminating, url_get from xbmctorrent import tvdb plugin.set_content("seasons") tvdb_id = first(plugin.request.args.get("tvdb_id")) with futures.ThreadPoolExecutor(max_workers=2) as pool: def _eztv_get_show(): plugin.log.info("Getting show") response = url_get("%s/shows/%s/" % (BASE_URL, show_id), headers=HEADERS) plugin.log.info("Got show") return response seasons_html = pool.submit(_eztv_get_show) if tvdb_id: tvdb_show = pool.submit(tvdb.get_all_meta, plugin.request.args["tvdb_id"][0]) seasons_html = seasons_html.result() fanarts = [] seasons = {} iter_list = re.findall(r'<a .*?class="epinfo".*?>(.*?)</a.*?>', seasons_html) for node_episode in iter_list: season, episode = get_episode_data_from_name(node_episode) seasons.setdefault(season, {})[episode] = True if tvdb_id: tvdb_show = tvdb_show.result() fanarts = list([banner for banner in tvdb_show["banners"] if banner["bannertype"] == "fanart"]) random.shuffle(fanarts) for i, season in enumerate(reversed(sorted(seasons.keys()))): item = tvdb_id and tvdb.get_season_list_item(tvdb_show, season) or {} item.update({ "label": "Season %d [%d episodes]" % (season, len(seasons[season])), "path": plugin.url_for("eztv_get_episodes_for_season", show_id=show_id, season=season, tvdb_id=tvdb_id), }) if fanarts: item.setdefault("properties", {}).update({ "fanart_image": fanarts[i % len(fanarts)]["bannerpath"], }) yield item