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()
示例#4
0
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
示例#7
0
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 []