def omdb_search( api_key: str, query: str, year: Optional[int] = None, media: Optional[str] = None, page: int = 1, cache: bool = True, ) -> dict: """ Search for media using the Open Movie Database. Online docs: http://www.omdbapi.com/#parameters. """ if page < 1 or page > 100: raise MnamerException("page must be between 1 and 100") url = "http://www.omdbapi.com" parameters = { "apikey": api_key, "s": query, "y": year, "type": media, "page": page, } parameters = clean_dict(parameters) status, content = request_json(url, parameters, cache=cache) if status == 401: raise MnamerException("invalid API key") elif content and not content.get("totalResults"): raise MnamerNotFoundException() elif not content or status != 200: # pragma: no cover raise MnamerNetworkException("OMDb down or unavailable?") return content
def omdb_title( api_key: str, id_imdb: Optional[str] = None, media: Optional[str] = None, title: Optional[str] = None, season: Optional[int] = None, episode: Optional[int] = None, year: Optional[int] = None, plot: Optional[str] = None, cache: bool = True, ) -> dict: """ Looks up media by id using the Open Movie Database. Online docs: http://www.omdbapi.com/#parameters """ if (not title and not id_imdb) or (title and id_imdb): raise MnamerException("either id_imdb or title must be specified") elif plot and plot not in OMDB_PLOT_TYPES: raise MnamerException("plot must be one of %s" % ",".join(OMDB_PLOT_TYPES)) url = "http://www.omdbapi.com" parameters = { "apikey": api_key, "i": id_imdb, "t": title, "y": year, "season": season, "episode": episode, "type": media, "plot": plot, } parameters = clean_dict(parameters) status, content = request_json(url, parameters, cache=cache) error = content.get("Error") if isinstance(content, dict) else None if status == 401: if error == 'Request limit reached!': raise MnamerException("API request limit reached") raise MnamerException("invalid API key") elif status != 200 or not isinstance(content, dict): # pragma: no cover raise MnamerNetworkException("OMDb down or unavailable?") elif error: raise MnamerNotFoundException(error) return content