2023-07-29 13:09:36 +08:00

178 lines
5.6 KiB
Python

import os
from ..tmdb import TMDb
from ..exceptions import TMDbException
class Account(TMDb):
_urls = {
"details": "/account",
"created_lists": "/account/%s/lists",
"favorite_movies": "/account/%s/favorite/movies",
"favorite_tv": "/account/%s/favorite/tv",
"favorite": "/account/%s/favorite",
"rated_movies": "/account/%s/rated/movies",
"rated_tv": "/account/%s/rated/tv",
"rated_episodes": "/account/%s/rated/tv/episodes",
"movie_watchlist": "/account/%s/watchlist/movies",
"tv_watchlist": "/account/%s/watchlist/tv",
"watchlist": "/account/%s/watchlist",
}
@property
def account_id(self):
if not os.environ.get("TMDB_ACCOUNT_ID"):
os.environ["TMDB_ACCOUNT_ID"] = str(self.details()["id"])
return os.environ.get("TMDB_ACCOUNT_ID")
def details(self):
"""
Get your account details.
:return:
"""
return self._request_obj(
self._urls["details"],
params="session_id=%s" % self.session_id
)
def created_lists(self, page=1):
"""
Get all of the lists created by an account. Will include private lists if you are the owner.
:param page: int
:return:
"""
return self._request_obj(
self._urls["created_lists"] % self.account_id,
params="session_id=%s&page=%s" % (self.session_id, page),
key="results"
)
def _get_list(self, url, asc_sort=True, page=1):
params = "session_id=%s&page=%s" % (self.session_id, page)
if asc_sort is False:
params += "&sort_by=created_at.desc"
return self._request_obj(
self._urls[url] % self.account_id,
params=params,
key="results"
)
def favorite_movies(self, asc_sort=True, page=1):
"""
Get the list of your favorite movies.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("favorite_movies", asc_sort=asc_sort, page=page)
def favorite_tv_shows(self, asc_sort=True, page=1):
"""
Get the list of your favorite TV shows.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("favorite_tv", asc_sort=asc_sort, page=page)
def mark_as_favorite(self, media_id, media_type, favorite=True):
"""
This method allows you to mark a movie or TV show as a favorite item.
:param media_id: int
:param media_type: str
:param favorite:bool
"""
if media_type not in ["tv", "movie"]:
raise TMDbException("Media Type should be tv or movie.")
self._request_obj(
self._urls["favorite"] % self.account_id,
params="session_id=%s" % self.session_id,
method="POST",
json={
"media_type": media_type,
"media_id": media_id,
"favorite": favorite,
}
)
def unmark_as_favorite(self, media_id, media_type):
"""
This method allows you to unmark a movie or TV show as a favorite item.
:param media_id: int
:param media_type: str
"""
self.mark_as_favorite(media_id, media_type, favorite=False)
def rated_movies(self, asc_sort=True, page=1):
"""
Get a list of all the movies you have rated.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("rated_movies", asc_sort=asc_sort, page=page)
def rated_tv_shows(self, asc_sort=True, page=1):
"""
Get a list of all the TV shows you have rated.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("rated_tv", asc_sort=asc_sort, page=page)
def rated_episodes(self, asc_sort=True, page=1):
"""
Get a list of all the TV episodes you have rated.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("rated_episodes", asc_sort=asc_sort, page=page)
def movie_watchlist(self, asc_sort=True, page=1):
"""
Get a list of all the movies you have added to your watchlist.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("movie_watchlist", asc_sort=asc_sort, page=page)
def tv_show_watchlist(self, asc_sort=True, page=1):
"""
Get a list of all the TV shows you have added to your watchlist.
:param asc_sort: bool
:param page: int
:return:
"""
return self._get_list("tv_watchlist", asc_sort=asc_sort, page=page)
def add_to_watchlist(self, media_id, media_type, watchlist=True):
"""
Add a movie or TV show to your watchlist.
:param media_id: int
:param media_type: str
:param watchlist: bool
"""
if media_type not in ["tv", "movie"]:
raise TMDbException("Media Type should be tv or movie.")
self._request_obj(
self._urls["watchlist"] % self.account_id,
"session_id=%s" % self.session_id,
method="POST",
json={
"media_type": media_type,
"media_id": media_id,
"watchlist": watchlist,
}
)
def remove_from_watchlist(self, media_id, media_type):
"""
Remove a movie or TV show from your watchlist.
:param media_id: int
:param media_type: str
"""
self.add_to_watchlist(media_id, media_type, watchlist=False)