为TheMovieDb模块添加异步支持(part 1)

This commit is contained in:
jxxghp
2025-07-30 22:28:12 +08:00
parent 232759829e
commit 423c9af786
5 changed files with 350 additions and 2 deletions
@@ -32,3 +32,24 @@ class Discover(TMDb):
:return:
"""
return self._request_obj(self._urls["tv"], urlencode(params_tuple), key="results", call_cached=False)
@cached(maxsize=1, ttl=43200)
async def async_discover_movies(self, params_tuple):
"""
Discover movies by different types of data like average rating, number of votes, genres and certifications.(异步版本)
:param params_tuple: dict
:return:
"""
params = dict(params_tuple)
return await self._async_request_obj(self._urls["movies"], urlencode(params), key="results", call_cached=False)
@cached(maxsize=1, ttl=43200)
async def async_discover_tv_shows(self, params_tuple):
"""
Discover TV shows by different types of data like average rating, number of votes, genres,
the network they aired on and air dates.(异步版本)
:param params_tuple: dict
:return:
"""
return await self._async_request_obj(self._urls["tv"], urlencode(params_tuple), key="results",
call_cached=False)
@@ -142,3 +142,71 @@ class Search(TMDb):
params=params,
key="results"
)
async def async_multi(self, term, adult=None, region=None, page=1):
"""
Search multiple models in a single request.(异步版本)
Multi search currently supports searching for movies, tv shows and people in a single request.
:param term: str
:param adult: bool
:param region: str
:param page: int
:return:
"""
params = "query=%s&page=%s" % (quote(term), page)
if adult is not None:
params += "&include_adult=%s" % "true" if adult else "false"
if region is not None:
params += "&region=%s" % quote(region)
return await self._async_request_obj(
self._urls["multi"],
params=params,
key="results"
)
async def async_movies(self, term, adult=None, region=None, year=None, release_year=None, page=1):
"""
Search for movies.(异步版本)
:param term: str
:param adult: bool
:param region: str
:param year: int
:param release_year: int
:param page: int
:return:
"""
params = "query=%s&page=%s" % (quote(term), page)
if adult is not None:
params += "&include_adult=%s" % "true" if adult else "false"
if region is not None:
params += "&region=%s" % quote(region)
if year is not None:
params += "&year=%s" % year
if release_year is not None:
params += "&primary_release_year=%s" % release_year
return await self._async_request_obj(
self._urls["movies"],
params=params,
key="results"
)
async def async_tv_shows(self, term, adult=None, release_year=None, page=1):
"""
Search for a TV show.(异步版本)
:param term: str
:param adult: bool
:param release_year: int
:param page: int
:return:
"""
params = "query=%s&page=%s" % (quote(term), page)
if adult is not None:
params += "&include_adult=%s" % "true" if adult else "false"
if release_year is not None:
params += "&first_air_date_year=%s" % release_year
return await self._async_request_obj(
self._urls["tv_shows"],
params=params,
key="results"
)