import warnings from ..tmdb import TMDb from .find import Find from .search import Search class Movie(TMDb): _urls = { "details": "/movie/%s", "account_states": "/movie/%s/account_states", "alternative_titles": "/movie/%s/alternative_titles", "changes": "/movie/%s/changes", "credits": "/movie/%s/credits", "external_ids": "/movie/%s/external_ids", "images": "/movie/%s/images", "keywords": "/movie/%s/keywords", "lists": "/movie/%s/lists", "recommendations": "/movie/%s/recommendations", "release_dates": "/movie/%s/release_dates", "reviews": "/movie/%s/reviews", "similar": "/movie/%s/similar", "translations": "/movie/%s/translations", "videos": "/movie/%s/videos", "watch_providers": "/movie/%s/watch/providers", "rate_movie": "/movie/%s/rating", "delete_rating": "/movie/%s/rating", "latest": "/movie/latest", "now_playing": "/movie/now_playing", "popular": "/movie/popular", "top_rated": "/movie/top_rated", "upcoming": "/movie/upcoming", } def details(self, movie_id, append_to_response="videos,trailers,images,casts,translations,keywords,release_dates"): """ Get the primary information about a movie. :param movie_id: int :param append_to_response: str :return: """ return self._request_obj( self._urls["details"] % movie_id, params="append_to_response=%s" % append_to_response ) def account_states(self, movie_id): """ Grab the following account states for a session: Movie rating, If it belongs to your watchlist, or If it belongs to your favourite list. :param movie_id: int :return: """ return self._request_obj( self._urls["account_states"] % movie_id, params="session_id=%s" % self.session_id ) def alternative_titles(self, movie_id, country=None): """ Get all of the alternative titles for a movie. :param movie_id: int :param country: str :return: """ return self._request_obj( self._urls["alternative_titles"] % movie_id, params="country=%s" % country if country else "", key="titles" ) def changes(self, movie_id, start_date=None, end_date=None, page=1): """ Get the changes for a movie. By default only the last 24 hours are returned. You can query up to 14 days in a single query by using the start_date and end_date query parameters. :param movie_id: int :param start_date: str :param end_date: str :param page: int :return: """ params = "page=%s" % page if start_date: params += "&start_date=%s" % start_date if end_date: params += "&end_date=%s" % end_date return self._request_obj( self._urls["changes"] % movie_id, params=params, key="changes" ) def credits(self, movie_id): """ Get the cast and crew for a movie. :param movie_id: int :return: """ return self._request_obj(self._urls["credits"] % movie_id) def external_ids(self, movie_id): """ Get the external ids for a movie. :param movie_id: int :return: """ return self._request_obj(self._urls["external_ids"] % movie_id) def images(self, movie_id, include_image_language=None): """ Get the images that belong to a movie. Querying images with a language parameter will filter the results. If you want to include a fallback language (especially useful for backdrops) you can use the include_image_language parameter. This should be a comma separated value like so: include_image_language=en,null. :param movie_id: int :param include_image_language: str :return: """ return self._request_obj( self._urls["images"] % movie_id, params="include_image_language=%s" % include_image_language if include_image_language else "" ) def keywords(self, movie_id): """ Get the keywords associated to a movie. :param movie_id: int :return: """ return self._request_obj( self._urls["keywords"] % movie_id, key="keywords" ) def lists(self, movie_id, page=1): """ Get a list of lists that this movie belongs to. :param movie_id: int :param page: int :return: """ return self._request_obj( self._urls["lists"] % movie_id, params="page=%s" % page, key="results" ) def recommendations(self, movie_id, page=1): """ Get a list of recommended movies for a movie. :param movie_id: int :param page: int :return: """ return self._request_obj( self._urls["recommendations"] % movie_id, params="page=%s" % page, key="results" ) def release_dates(self, movie_id): """ Get the release date along with the certification for a movie. :param movie_id: int :return: """ return self._request_obj( self._urls["release_dates"] % movie_id, key="results" ) def reviews(self, movie_id, page=1): """ Get the user reviews for a movie. :param movie_id: int :param page: int :return: """ return self._request_obj( self._urls["reviews"] % movie_id, params="page=%s" % page, key="results" ) def similar(self, movie_id, page=1): """ Get a list of similar movies. :param movie_id: int :param page: int :return: """ return self._request_obj( self._urls["similar"] % movie_id, params="page=%s" % page, key="results" ) def translations(self, movie_id): """ Get a list of translations that have been created for a movie. :param movie_id: int :return: """ return self._request_obj( self._urls["translations"] % movie_id, key="translations" ) def videos(self, movie_id, page=1): """ Get the videos that have been added to a movie. :param movie_id: int :param page: int :return: """ return self._request_obj( self._urls["videos"] % movie_id, params="page=%s" % page, key="results" ) def watch_providers(self, movie_id): """ You can query this method to get a list of the availabilities per country by provider. :param movie_id: int :return: """ return self._request_obj( self._urls["watch_providers"] % movie_id, key="results" ) def rate_movie(self, movie_id, rating): """ Rate a movie. :param movie_id: int :param rating: float """ self._request_obj( self._urls["rate_movie"] % movie_id, params="session_id=%s" % self.session_id, method="POST", json={"value": rating} ) def delete_rating(self, movie_id): """ Remove your rating for a movie. :param movie_id: int """ self._request_obj( self._urls["delete_rating"] % movie_id, params="session_id=%s" % self.session_id, method="DELETE" ) def latest(self): """ Get the most newly created movie. This is a live response and will continuously change. :return: """ return self._request_obj(self._urls["latest"]) def now_playing(self, region=None, page=1): """ Get a list of movies in theatres. :param region: str :param page: int :return: """ params = "page=%s" % page if region: params += "®ion=%s" % region return self._request_obj( self._urls["now_playing"], params=params, key="results" ) def popular(self, region=None, page=1): """ Get a list of the current popular movies on TMDb. This list updates daily. :param region: str :param page: int :return: """ params = "page=%s" % page if region: params += "®ion=%s" % region return self._request_obj( self._urls["popular"], params=params, key="results" ) def top_rated(self, region=None, page=1): """ Get the top rated movies on TMDb. :param region: str :param page: int :return: """ params = "page=%s" % page if region: params += "®ion=%s" % region return self._request_obj( self._urls["top_rated"], params=params, key="results" ) def upcoming(self, region=None, page=1): """ Get a list of upcoming movies in theatres. :param region: str :param page: int :return: """ params = "page=%s" % page if region: params += "®ion=%s" % region return self._request_obj( self._urls["upcoming"], params=params, key="results" ) def search(self, term, page=1): """ Search for movies. :param term: str :param page: int :return: """ warnings.warn("search method is deprecated use tmdbv3api.Search().movies(term)", DeprecationWarning) return Search().movies(term, page=page) def external(self, external_id, external_source): """ The find method makes it easy to search for objects in our database by an external id. For example, an IMDB ID. :param external_id: str :param external_source str :return: """ warnings.warn("external method is deprecated use tmdbv3api.Find().find(external_id, external_source)", DeprecationWarning) return Find().find(external_id, external_source)