Example #1
0
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
Example #2
0
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
Example #3
0
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