示例#1
0
def search():
    query = get_arg("q")
    offset = int(get_arg("offset", 0))
    # remove saved search item
    if bool(get_arg("delete", False)):
        bcfs.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True

    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.get_string(32016)),
                      {"new": True})  # [New Search]
        for item in bcfs.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xp.setPluginCategory(plugin.handle, ku.get_string(32007))  # Search
        xp.endOfDirectory(plugin.handle)
        return True

    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        bcfs.append(query)
        if not query:
            return False

    search_url = bcfs.get_search_url(query=query)
    data = bcfs.get_html(search_url)
    xp.setPluginCategory(
        plugin.handle, "{} '{}'".format(ku.get_string(32007),
                                        bcfs.query_decode(query)))
    parse_results(data)
示例#2
0
def search():
    # type: () -> Union[bool, None]
    query = get_arg("q")
    # remove saved search item
    if bool(get_arg("delete", False)):
        eyes.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)), {"new": True})  # [New Search]
        for item in eyes.searches.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xbmcplugin.setPluginCategory(plugin.handle, ku.localize(32007))  # Search
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        if eyes.SEARCH_SAVED:
            eyes.searches.append(query)
    category = "{} '{}'".format(ku.localize(32007), query)  # Search 'query'
    xbmcplugin.setPluginCategory(plugin.handle, category)
    parse_results(eyes.get_search_url(query, 0), category)  # first page is 0
    xbmcplugin.endOfDirectory(plugin.handle)
示例#3
0
def section():
    # type: () -> None
    """Show section menus and playable items"""
    idx = get_arg("idx", False)
    href = get_arg("href", False)
    category = get_arg("category")
    offset = get_arg("offset", 0)
    if idx:
        # Section menu
        url = locs.get_search_url(idx, page=offset)
        data = locs.get_json(url)
        paginate(data.get("pagination"), category, idx)
        for data in data.get("facets", [{}])[0].get("filters"):
            title = data.get("title").title()
            count = data.get("count")
            add_menu_item(section, "{} [{} items]".format(title, count), {
                "href": data.get("on"),
                "category": title
            })
    if href:
        # Playable items
        data = locs.get_json(href)
        parse_search_results(data, category)
        xbmcplugin.setContent(plugin.handle, "videos")
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#4
0
def programme():
    """Shows the programme menu or a programme's playable items"""
    href = get_arg("href")
    category = get_arg("category", ku.localize(32009))  # Programs
    if not href:
        # TV Shows menu
        soup = dws.get_html(dws.DW_PROGRAMME_URI)
        content = soup.find("div", {"id": "bodyContent"}).extract()
        items = content.find_all("div", "epg")
        for item in items:
            img = item.find("img")
            title = item.find("h2").text.encode("utf-8")
            action = item.find("a", string="All videos")
            pid = dws.get_program_id(action.get("href"))
            plot = item.find("p").text.strip()
            add_menu_item(programme, title, {
                "href": dws.get_search_url(pid=pid),
                "category": title
            }, ku.art(dws.get_url(img.get("src"))),
                          {"plot": plot if plot else title})
        xbmcplugin.setContent(plugin.handle, "tvshows")
    else:
        # TV Show's playable episodes
        soup = dws.get_html(href)
        parse_search_results(soup, href, programme, category)
        xbmcplugin.setContent(plugin.handle, "episodes")
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#5
0
def search():
    # type: () -> Optional[bool]
    """Search the archive"""
    query = get_arg("q")
    category = get_arg("category", ku.localize(32007))  # Search
    total = get_arg("total")
    # Remove saved search item
    if bool(get_arg("delete", False)):
        pas.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)), args={"new": True})  # [New Search]
        for item in pas.searches.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, args={"q": text, "category": "{} '{}'".format(ku.localize(32007), text)})
        xbmcplugin.setPluginCategory(plugin.handle, category)
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # New look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        category = "{} '{}'".format(ku.localize(32007), query)
        if pas.SEARCH_SAVED:
            pas.searches.append(query)
    # Process search
    url = get_arg("href", pas.get_search_url(query=query))
    soup = pas.get_html(url)
    count = int(total) if total else pas.text_to_int(soup.find("div", "results_count").text)
    parse_search_results(soup, url, count, category)
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#6
0
def section():
    # type: () -> None
    """Handles the various sections such as years, genre, series, etc"""
    href = get_arg("href", False)
    token = get_arg("token", False)
    category = get_arg("category")
    if not href and token:
        # Section menu
        soup = mias.get_html(mias.get_search_url())
        element = soup.find("ul", {"id": token})
        if not element:
            logger.debug("No menu data: {}".format(token))
            return
        items = element.extract().findAll("li")
        for item in items:
            action = item.find("a")
            if not action:
                continue
            title = action.text.title()
            add_menu_item(section,
                          title,
                          args={
                              "href": action["href"],
                              "category": title
                          })
    else:
        # Section playable items
        url = mias.get_url(href)
        soup = mias.get_html(url)
        parse_search_results(soup, url, category)
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#7
0
def year():
    # type: () -> None
    """Show year menu"""
    for item in LOC_PERIODS:
        url = locs.get_search_url(dates=item.replace("-", "/"))
        add_menu_item(section, item, {"href": url, "category": item})
    xbmcplugin.setPluginCategory(plugin.handle, ku.localize(32006))
    xbmcplugin.endOfDirectory(plugin.handle)
示例#8
0
def past24h():
    """Shows playable items from the last 24 hours"""
    url = dws.get_search_url()
    soup = dws.get_html(url)
    parse_search_results(soup, url, past24h, ku.localize(32004))
    xbmcplugin.setContent(plugin.handle, "episodes")
    xbmcplugin.setPluginCategory(plugin.handle,
                                 ku.localize(32004))  # Past 24 hours
    xbmcplugin.endOfDirectory(plugin.handle)
示例#9
0
def year(token):
    if token == "0":
        for item in BCF_YEARS:
            add_menu_item(year, str(item), {"token": item})
        xp.setPluginCategory(plugin.handle, ku.get_string(32005))
        xp.endOfDirectory(plugin.handle)
        return
    uri = bcfs.get_search_url(year=token)
    data = bcfs.get_html(uri)
    xp.setPluginCategory(plugin.handle, token)
    parse_results(data)
示例#10
0
def series(token):
    if token == "0":
        for idx, name in enumerate(BCF_SERIES):
            if idx == 0:
                continue
            add_menu_item(series, name, {"token": idx})
        xp.setPluginCategory(plugin.handle, ku.get_string(32006))
        xp.endOfDirectory(plugin.handle)
        return
    uri = bcfs.get_search_url(series=token)
    data = bcfs.get_html(uri)
    xp.setPluginCategory(plugin.handle, BCF_SERIES[int(token)])
    parse_results(data)
示例#11
0
def search():
    query = get_arg("q")
    href = get_arg("href", False)

    # remove saved search item
    if bool(get_arg("delete", False)):
        jafc.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True

    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)), {"new": True})  # [New Search]
        for item in jafc.retrieve():
            text = item.encode("utf-8")
            add_menu_item(
                search,
                text,
                args={"q": text})
        xbmcplugin.setPluginCategory(plugin.handle, ku.localize(32007))  # Search
        xbmcplugin.endOfDirectory(plugin.handle)
        return True

    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        jafc.append(query)
        if not query:
            return False

    url = jafc.get_url(href) if href else jafc.get_search_url(query)
    data = jafc.get_html(url)
    results = data.find("ul", "work-results")
    if not results:
        return

    paginate(data.find("ul", "pager-menu"), search)
    for item in results.find_all("li", "work-result"):
        action = item.find("a")
        img = item.find("img", "thumbnail")
        add_menu_item(play_film,
                      item.find("h2").text,
                      args={"href": action["href"]},
                      info=jafc.get_info(action["href"]),
                      art=ku.art(jafc.get_url(img["src"])),
                      directory=False)
    xbmcplugin.setPluginCategory(plugin.handle, "{} '{}'".format(ku.localize(32016), query))
    xbmcplugin.endOfDirectory(plugin.handle)
示例#12
0
def search():
    query = get_arg("q")
    href = get_arg("href", False)

    # remove saved search item
    if bool(get_arg("delete", False)):
        jafc.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True

    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.get_string(32016)), {"new": True})  # [New Search]
        for item in jafc.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xp.setPluginCategory(plugin.handle, ku.get_string(32007))  # Search
        xp.endOfDirectory(plugin.handle)
        return True

    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        jafc.append(query)
        if not query:
            return False

    url = jafc.get_page_url(href) if href else jafc.get_search_url(query)
    data = jafc.get_html(url)
    results = data.find("ul", "work-results")
    if not results:
        return

    paginate(data.find("ul", "pager-menu"), search)
    for item in results.find_all("li", "work-result"):
        action = item.find("a")
        img = item.find("img", "thumbnail")
        add_menu_item(play_film,
                      item.find("h2").text,
                      {"href": action["href"]},
                      info=get_info(action["href"]),
                      art=ku.art(jafc.get_page_url(img["src"])),
                      directory=False)
    xp.setPluginCategory(plugin.handle, "{} '{}'".format(ku.get_string(32016), query))
    xp.endOfDirectory(plugin.handle)
示例#13
0
def year():
    # type: () -> None
    """View archive by periods"""
    period = get_arg("period", False)
    if not period:
        # Years menu
        for item in BP_PERIODS:
            add_menu_item(year, str(item), args={"period": item})
        xbmcplugin.setPluginCategory(plugin.handle,
                                     ku.localize(32006))  # Years
    else:
        # Period playable items
        start, end = period.split("-")
        url = bps.get_search_url(start=start, end=end)
        soup = bps.get_html(url)
        paginate(soup, "+", period)
        parse_search_results(soup)
        xbmcplugin.setPluginCategory(plugin.handle, period)  # YYYY-YYYY
    xbmcplugin.endOfDirectory(plugin.handle)
示例#14
0
def search():
    # type: () -> Optional[bool]
    """Search the archive"""
    query = get_arg("q")
    offset = int(get_arg("offset", 0))
    # remove saved search item
    if bool(get_arg("delete", False)):
        bfis.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search,
                      "[{}]".format(ku.localize(32016)),
                      args={"new": True})  # [New Search]
        for item in bfis.searches.retrieve():
            add_menu_item(search, item, args={"q": item})
        xbmcplugin.setPluginCategory(plugin.handle,
                                     ku.localize(32007))  # Search
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        if bfis.SEARCH_SAVED:
            bfis.searches.append(query)
    # process results
    search_url = bfis.get_search_url(query, offset)
    data = bfis.get_json(search_url)
    parse_search_results(data, query, offset)
    xbmcplugin.setPluginCategory(
        plugin.handle, "{} '{}'".format(ku.localize(32007),
                                        bfis.query_decode(query)))
    xbmcplugin.setContent(plugin.handle, "videos")
    xbmcplugin.addSortMethod(plugin.handle,
                             xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
    xbmcplugin.addSortMethod(plugin.handle, xbmcplugin.SORT_METHOD_GENRE)
    xbmcplugin.addSortMethod(plugin.handle, xbmcplugin.SORT_METHOD_VIDEO_YEAR)
    xbmcplugin.addSortMethod(plugin.handle, xbmcplugin.SORT_METHOD_DURATION)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#15
0
def topic():
    """Shows the topics menu or a topic's playable items"""
    href = get_arg("href", False)
    category = get_arg("category", ku.localize(32008))  # Themes
    if not href:
        # Topics menu
        soup = dws.get_html(dws.DW_MEDIA_ALL_URL)
        content = soup.find("div", {"id": "themes"}).extract()
        items = content.find_all("a", "check")
        for item in items:
            add_menu_item(
                topic, item.text, {
                    "href": dws.get_search_url(tid=item.get("value")),
                    "category": item.text
                })
    else:
        # Topic's playable items
        soup = dws.get_html(href)
        parse_search_results(soup, href, topic, category)
        xbmcplugin.setContent(plugin.handle, "episodes")
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#16
0
def search():
    # type: () -> Optional[bool]
    """Search the archive"""
    query = get_arg("q")
    href = get_arg("href", False)
    offset = int(get_arg("offset", 1))
    category = get_arg("category", ku.localize(32007))
    # Remove saved search item
    if bool(get_arg("delete", False)):
        mias.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)),
                      {"new": True})  # [New Search]
        for item in mias.searches.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xbmcplugin.setPluginCategory(plugin.handle,
                                     ku.localize(32007))  # Search
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # New look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        category = "{} '{}'".format(ku.localize(32007), query)
        if mias.SEARCH_SAVED:
            mias.searches.append(query)
    # Process search
    url = mias.get_search_url(query) if query else mias.update_offset(
        href, offset)
    logger.warning(url)
    soup = mias.get_html(url)
    parse_search_results(soup, url, category)
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#17
0
def search():
    # type: () -> Optional[bool]
    """Search the archive"""
    query = get_arg("q", "+")
    page = get_arg("page", "1")
    category = get_arg("category", "{} '{}'".format(ku.localize(32007), query))
    period = get_arg("period", "+-+")
    start, end = period.split("-")
    # remove saved search item
    if bool(get_arg("delete", False)):
        bps.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)),
                      {"new": True})  # [New Search]
        for item in bps.searches.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xbmcplugin.setPluginCategory(plugin.handle,
                                     ku.localize(32007))  # Search
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        if bps.SEARCH_SAVED:
            bps.searches.append(query)
        # reset category on new search...
        category = "{} '{}'".format(ku.localize(32007), query)
    url = bps.get_search_url(query, start, end, page)
    soup = bps.get_html(url)
    paginate(soup, query, period)
    parse_search_results(soup)
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#18
0
def search():
    # type: () -> Optional[bool]
    """Search the archive"""
    query = get_arg("q")
    category = get_arg("category", ku.localize(32007))  # Search
    # Remove saved search item
    if bool(get_arg("delete", False)):
        locs.searches.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True
    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.localize(32016)),
                      {"new": True})  # [New Search]
        for item in locs.searches.retrieve():
            text = item.encode("utf-8")
            add_menu_item(
                search, text, {
                    "q": text,
                    "category": "{} '{}'".format(ku.localize(32007), text)
                })
        xbmcplugin.setPluginCategory(plugin.handle, category)
        xbmcplugin.endOfDirectory(plugin.handle)
        return True
    # New look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        if not query:
            return False
        category = "{} '{}'".format(ku.localize(32007), query)
        if locs.SEARCH_SAVED:
            locs.searches.append(query)
    # Process search
    url = locs.get_search_url(query=query)
    data = locs.get_json(url)
    parse_search_results(data, category)
    xbmcplugin.setPluginCategory(plugin.handle, category)
    xbmcplugin.endOfDirectory(plugin.handle)
示例#19
0
def search():
    query = get_arg("q")
    offset = int(get_arg("offset", 0))
    # remove saved search item
    if bool(get_arg("delete", False)):
        bfis.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True

    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.get_string(32016)), {"new": True})  # [New Search]
        for item in bfis.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xp.setPluginCategory(plugin.handle, ku.get_string(32007))  # Search
        xp.endOfDirectory(plugin.handle)
        return True

    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        bfis.append(query)
        if not query:
            return False

    search_url = bfis.get_search_url(query, offset)
    data = bfis.get_json(search_url)
    if data is None:
        return False

    hits = data.get("hits", False)
    if not hits:
        return False

    # Results
    results = hits.get("hits", [])
    paginate(query,
             len(results),
             int(hits.get("total", 0)),
             offset)
    for element in results:
        data = element.get("_source", False)
        if not data:
            continue

        title = data.get("title", "")
        duration = data.get("duration", 0)  # can still be NoneType *
        info = {
            "originaltitle": data.get("original_title", ""),
            "plot": bfis.html_to_text(data.get("standfirst", "")),
            "genre": data.get("genre", ""),
            "cast": data.get("cast", ""),
            "director": data.get("director", ""),
            "year": int(data.get("release_date", 0)),
            "duration": 0 if duration is None else int(duration) * 60,  # *
            "mediatype": "video"
        }
        add_menu_item(
            play_film,
            title,
            {"href": data.get("url")},
            ku.art(data.get("image", ["Default.png"])[0]),
            info,
            False)
    xp.setContent(plugin.handle, "videos")
    xp.setPluginCategory(plugin.handle, "{} '{}'".format(ku.get_string(32007), bfis.query_decode(query)))
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_LABEL_IGNORE_THE)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_GENRE)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_VIDEO_YEAR)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_DURATION)
    xp.endOfDirectory(plugin.handle)
示例#20
0
def search():
    query = get_arg("q")
    offset = int(get_arg("offset", 0))
    # remove saved search item
    if bool(get_arg("delete", False)):
        bfis.remove(query)
        xbmc.executebuiltin("Container.Refresh()")
        return True

    # View saved search menu
    if bool(get_arg("menu", False)):
        add_menu_item(search, "[{}]".format(ku.get_string(32016)),
                      {"new": True})  # [New Search]
        for item in bfis.retrieve():
            text = item.encode("utf-8")
            add_menu_item(search, text, {"q": text})
        xp.setPluginCategory(plugin.handle, ku.get_string(32007))  # Search
        xp.endOfDirectory(plugin.handle)
        return True

    # look-up
    if bool(get_arg("new", False)):
        query = ku.user_input()
        bfis.append(query)
        if not query:
            return False

    search_url = bfis.get_search_url(query, offset)
    data = bfis.get_json(search_url)
    if data is None:
        return False

    hits = data.get("hits", False)
    if not hits:
        return False

    # Results
    results = hits.get("hits", [])
    paginate(query, len(results), int(hits.get("total", 0)), offset)
    for element in results:
        data = element.get("_source", False)
        if not data:
            continue

        title = data.get("title", "")
        duration = data.get("duration", 0)  # can still be NoneType *
        info = {
            "originaltitle": data.get("original_title", ""),
            "plot": bfis.html_to_text(data.get("standfirst", "")),
            "genre": data.get("genre", ""),
            "cast": data.get("cast", ""),
            "director": data.get("director", ""),
            "year": int(data.get("release_date", 0)),
            "duration": 0 if duration is None else int(duration) * 60,  # *
            "mediatype": "video"
        }
        add_menu_item(play_film, title, {"href": data.get("url")},
                      ku.art(data.get("image", ["Default.png"])[0]), info,
                      False)
    xp.setContent(plugin.handle, "videos")
    xp.setPluginCategory(
        plugin.handle, "{} '{}'".format(ku.get_string(32007),
                                        bfis.query_decode(query)))
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_LABEL_IGNORE_THE)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_GENRE)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_VIDEO_YEAR)
    xp.addSortMethod(plugin.handle, xp.SORT_METHOD_DURATION)
    xp.endOfDirectory(plugin.handle)