def api_search(args): search_request = SearchRequest(category=args["cat"], offset=args["offset"], limit=args["limit"], query=args["q"]) if args["t"] == "search": search_request.type = "general" logger.info("") elif args["t"] == "tvsearch": search_request.type = "tv" identifier_key = "rid" if args["rid"] else "tvdbid" if args["tvdbid"] else None if identifier_key is not None: identifier_value = args[identifier_key] search_request.identifier_key = identifier_key search_request.identifier_value = identifier_value search_request.season = int(args["season"]) if args["season"] else None search_request.episode = int(args["episode"]) if args["episode"] else None elif args["t"] == "movie": search_request.type = "movie" search_request.identifier_key = "imdbid" if args["imdbid"] is not None else None search_request.identifier_value = args["imdbid"] if args["imdbid"] is not None else None logger.info("API search request: %s" % search_request) result = search.search(False, search_request) results = process_for_external_api(result) content = render_search_results_for_api(results, result["total"], result["offset"]) response = make_response(content) response.headers["Content-Type"] = "application/xml" return content
def api_search(args): search_request = SearchRequest(category=args["cat"], offset=args["offset"], limit=args["limit"], query=args["q"]) if args["t"] == "search": search_request.type = "general" logger.info("") elif args["t"] == "tvsearch": search_request.type = "tv" identifier_key = "rid" if args["rid"] else "tvdbid" if args["tvdbid"] else None if identifier_key is not None: identifier_value = args[identifier_key] search_request.identifier_key = identifier_key search_request.identifier_value = identifier_value search_request.season = int(args["season"]) if args["season"] else None search_request.episode = int(args["episode"]) if args["episode"] else None elif args["t"] == "movie": search_request.type = "movie" search_request.identifier_key = "imdbid" if args["imdbid"] is not None else None search_request.identifier_value = args["imdbid"] if args["imdbid"] is not None else None elif args["t"] == "book": search_request.type = "ebook" search_request.author = args["author"] if args["author"] is not None else None search_request.title = args["title"] if args["title"] is not None else None logger.info("API search request: %s" % search_request) result = search.search(False, search_request) results = process_for_external_api(result) content = render_search_results_for_api(results, result["total"], result["offset"], output=args["o"]) if args["o"].lower() == "xml": response = make_response(content) response.headers["Content-Type"] = "application/xml" elif args["o"].lower() == "json": response = jsonify(content) else: return "Unknown output format", 500 return response
def internalapi_moviesearch(args): logger.debug("Movie search request with args %s" % args) indexers = urllib.unquote( args["indexers"]) if args["indexers"] is not None else None search_request = SearchRequest(type="movie", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], indexers=indexers) if args["imdbid"]: search_request.identifier_key = "imdbid" search_request.identifier_value = args["imdbid"] elif args["tmdbid"]: logger.debug("Need to get IMDB id from TMDB id %s" % args["tmdbid"]) imdbid = infos.convertId("tmdb", "imdb", args["tmdbid"]) if imdbid is None: raise AttributeError("Unable to convert TMDB id %s" % args["tmdbid"]) search_request.identifier_key = "imdbid" search_request.identifier_value = imdbid return startSearch(search_request)
def internalapi_tvsearch(args): logger.debug("TV search request with args %s" % args) indexers = urllib.unquote(args["indexers"]) if args["indexers"] is not None else None search_request = SearchRequest(type="tv", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], episode=args["episode"], season=args["season"], title=args["title"], indexers=indexers) if args["tvdbid"]: search_request.identifier_key = "tvdbid" search_request.identifier_value = args["tvdbid"] elif args["rid"]: search_request.identifier_key = "rid" search_request.identifier_value = args["rid"] return startSearch(search_request)
def internalapi_tvsearch(args): logger.debug("TV search request with args %s" % args) indexers = urllib.unquote(args["indexers"]) if args["indexers"] is not None else None search_request = SearchRequest(type="tv", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], episode=args["episode"], season=args["season"], title=args["title"], indexers=indexers) if args["tvdbid"]: search_request.identifier_key = "tvdbid" search_request.identifier_value = args["tvdbid"] elif args["rid"]: search_request.identifier_key = "rid" search_request.identifier_value = args["rid"] return cached_search(search_request)
def internalapi_tvsearch(args): logger.debug("TV search request with args %s" % args) search_request = SearchRequest(type="tv", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], episode=args["episode"], season=args["season"], title=args["title"], indexers=args["indexers"]) if args["tvdbid"]: search_request.identifier_key = "tvdbid" search_request.identifier_value = args["tvdbid"] elif args["rid"]: search_request.identifier_key = "rid" search_request.identifier_value = args["rid"] results = search.search(True, search_request) return process_and_jsonify_for_internalapi(results)
def internalapi_moviesearch(args): logger.debug("Movie search request with args %s" % args) search_request = SearchRequest(type="movie", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], indexers=args["indexers"]) if args["imdbid"]: search_request.identifier_key = "imdbid" search_request.identifier_value = args["imdbid"] elif args["tmdbid"]: logger.debug("Need to get IMDB id from TMDB id %s" % args["tmdbid"]) imdbid = infos.get_imdbid_from_tmdbid(args["tmdbid"]) search_request.identifier_key = "imdbid" search_request.identifier_value = imdbid results = search.search(True, search_request) return process_and_jsonify_for_internalapi(results)
def internalapi_moviesearch(args): logger.debug("Movie search request with args %s" % args) indexers = urllib.unquote(args["indexers"]) if args["indexers"] is not None else None search_request = SearchRequest(type="movie", query=args["query"], offset=args["offset"], category=args["category"], minsize=args["minsize"], maxsize=args["maxsize"], minage=args["minage"], maxage=args["maxage"], indexers=indexers) if args["imdbid"]: search_request.identifier_key = "imdbid" search_request.identifier_value = args["imdbid"] elif args["tmdbid"]: logger.debug("Need to get IMDB id from TMDB id %s" % args["tmdbid"]) imdbid = infos.convertId("tmdb", "imdb", args["tmdbid"]) if imdbid is None: raise AttributeError("Unable to convert TMDB id %s" % args["tmdbid"]) search_request.identifier_key = "imdbid" search_request.identifier_value = imdbid return startSearch(search_request)
def api(args): logger.debug(request.url) logger.debug("API request: %s" % args) # Map newznab api parameters to internal args["category"] = args["cat"] args["episode"] = args["ep"] if args["q"] is not None and args["q"] != "": args["query"] = args["q"] # Because internally we work with "query" instead of "q" if mainSettings.apikey.get_with_default(None) and ("apikey" not in args or args["apikey"] != mainSettings.apikey.get()): logger.error("Tried API access with invalid or missing API key") raise Unauthorized("API key not provided or invalid") elif args["t"] in ("search", "tvsearch", "movie"): search_request = SearchRequest(category=args["cat"], offset=args["offset"], limit=args["limit"], query=args["q"]) if args["t"] == "search": search_request.type = "general" elif args["t"] == "tvsearch": search_request.type = "tv" identifier_key = "rid" if args["rid"] else "tvdbid" if args["tvdbid"] else None if identifier_key is not None: identifier_value = args[identifier_key] search_request.identifier_key = identifier_key search_request.identifier_value = identifier_value search_request.season = int(args["season"]) if args["season"] else None search_request.episode = int(args["episode"]) if args["episode"] else None elif args["t"] == "movie": search_request.type = "movie" search_request.identifier_key = "imdbid" if args["imdbid"] is not None else None search_request.identifier_value = args["imdbid"] if args["imdbid"] is not None else None result = search.search(False, search_request) results = process_for_external_api(result) content = render_search_results_for_api(results, result["total"], result["offset"]) response = make_response(content) response.headers["Content-Type"] = "application/xml" return content elif args["t"] == "get": args = rison.loads(urllib.parse.unquote(args["id"])) return extract_nzb_infos_and_return_response(args["indexer"], args["guid"], args["title"], args["searchid"]) elif args["t"] == "caps": xml = render_template("caps.html") return Response(xml, mimetype="text/xml") else: pprint(request) return "Unknown API request. Supported functions: search, tvsearch, movie, get, caps", 500