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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)