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