def get_cover_image_url(proxy_cover_image: str) -> str: # The User-Agent has to be specified to avoid Http Error: 403 Client Error headers = {'User-Agent': BROWSER_USER_AGENT} request = handle_request(proxy_cover_image, headers, None) url = request.url return url
def requests_remaining_pages(movie_id: str, pages: int, movies: List[dict]) -> List[dict]: result = movies for page in range(INITIAL_PAGE + 1, pages + 1): # The User-Agent has to be specified to avoid Http Error: 403 Client Error headers = {'User-Agent': BROWSER_USER_AGENT} payload = {'limit': LIMIT, 'page': page, 'query_term': movie_id} request = handle_request(YTS_API, headers, payload) if (request is not None) and (request.status_code == 200): json_object = request.json() status = json_object['status'] status_message = json_object['status_message'] if status == 'ok': data = json_object['data'] remaining_movies = data['movies'] for remaining_movie in remaining_movies: result.append(remaining_movie) elif status == 'error': logger.warning( f"The YTS API has returned an error fetching the page {page} for the movie with IMDb ID {movie_id}: " f"{status_message}") else: logger.warning( f"Unable to retrieve page {page} of available movies for the movie with IMDb ID {movie_id}" ) return result
def search_series_by_imdb(series_id: str) -> ByIMDb: payload = {'limit': LIMIT, 'page': INITIAL_PAGE, 'imdb_id': series_id} request = handle_request(EZTV_API, None, payload) if (request is not None) and (request.status_code == 200): json_object = request.json() imdb_id = json_object['imdb_id'] torrents_count = json_object['torrents_count'] if torrents_count > 0: torrents = json_object['torrents'] pages = measure_number_pages(torrents_count) if pages > 1: total_torrents = requests_remaining_pages( series_id, pages, torrents) else: total_torrents = torrents parsed_torrents = parse_available_torrents(total_torrents) result = ByIMDb(imdb_id, torrents_count, parsed_torrents) return result else: logger.warning( f"No results for the series with IMDb ID {series_id}") return ByIMDb() else: logger.warning( 'Error connecting to EZTV API. The service may not be available at this time.' ) return ByIMDb()
def search_movie_by_name(name: str, year: int) -> MovieByName: payload = {'apikey': OMDB_API_KEY, 't': name, 'y': year} request = handle_request(OMDB_API_URL, None, payload) if (request is not None) and (request.status_code == 200): json_object = request.json() response = json_object['Response'] if response == 'True': content_type = json_object['Type'] if content_type == 'movie': result = get_movie_data(json_object) return result else: return MovieByName(content_type=content_type) else: error = json_object['Error'] logger.warning(f"Error from OMDb API: {error}") if error == OMDBAPI_ERROR_RESPONSE_MESSAGE: return MovieByName(error=True, error_message=MOVIE_NOT_FOUND) else: return MovieByName(error=True, error_message=error) else: logger.warning( 'Error connecting to OMDb API. The service may not be available at this time.' ) return MovieByName()
def search_movie_by_imdb(movie_id: str, quality_specified: str) -> ByIMDb: # The User-Agent has to be specified to avoid Http Error: 403 Client Error headers = { 'User-Agent': BROWSER_USER_AGENT, 'Upgrade-Insecure-Requests': '1', 'DNT': '1' } payload = {'limit': LIMIT, 'page': INITIAL_PAGE, 'query_term': movie_id} request = handle_request(YTS_API, headers, payload) if (request is not None) and (request.status_code == 200): json_object = request.json() status = json_object['status'] status_message = json_object['status_message'] if status == 'ok': data = json_object['data'] movie_count = data['movie_count'] if movie_count > 0: movies_available = data['movies'] pages = measure_number_pages(movie_count) if pages > 1: total_movies = requests_remaining_pages( movie_id, pages, movies_available) else: total_movies = movies_available parsed_movies = parse_available_movies(total_movies, quality_specified) if parsed_movies.torrents: return parsed_movies else: return ByIMDb() else: return ByIMDb() elif status == 'error': logger.warning( f"The YTS API has returned an error for movie with IMDb ID {movie_id}: {status_message}" ) return ByIMDb() else: logger.warning( f"Error connecting to YTS API. The service may not be available at this time." ) return ByIMDb()
def requests_remaining_pages(series_id: str, pages: int, torrents: List[dict]) -> List[dict]: result = torrents for page in range(INITIAL_PAGE + 1, pages + 1): payload = {'limit': LIMIT, 'page': page, 'imdb_id': series_id} request = handle_request(EZTV_API, None, payload) if (request is not None) and (request.status_code == 200): json_object = request.json() remaining_torrents = json_object['torrents'] for remaining_torrent in remaining_torrents: result.append(remaining_torrent) else: logger.warning( f"Unable to retrieve page {page} of Torrents for the show with ID {series_id}" ) return result
def search_subtitles_by_imdb(movie_id: str, language: str) -> List[ByIMDb]: movie_url = YIFY_API + movie_id # The User-Agent has to be specified to avoid the "requests.exceptions.TooManyRedirects" exception. headers = { 'User-Agent': BROWSER_USER_AGENT, 'Upgrade-Insecure-Requests': '1', 'DNT': '1' } request = handle_request(movie_url, headers, None) if (request is not None) and (request.status_code == 200): content = request.text language_rows = find_language_rows(content, language) if language_rows: available_subtitles = get_subtitles_details(language_rows) return available_subtitles else: return [] else: logger.warning( 'Error connecting to YIFY API. The service may not be available at this time.' ) return []