mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-05 14:44:13 -04:00
Add episodes for themoviedb
This commit is contained in:
parent
ce9dc48d81
commit
2334afb3eb
@ -2,12 +2,12 @@ import asyncio
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from typing import Awaitable, Callable, Coroutine, Dict, Optional, Any, TypeVar
|
from typing import Awaitable, Callable, Dict, Optional, Any, TypeVar
|
||||||
|
|
||||||
from ..provider import Provider
|
from ..provider import Provider
|
||||||
from ..types.movie import Movie, MovieTranslation, Status as MovieStatus
|
from ..types.movie import Movie, MovieTranslation, Status as MovieStatus
|
||||||
from ..types.season import Season, SeasonTranslation
|
from ..types.season import Season, SeasonTranslation
|
||||||
from ..types.episode import Episode, PartialShow
|
from ..types.episode import Episode, EpisodeTranslation, PartialShow
|
||||||
from ..types.studio import Studio
|
from ..types.studio import Studio
|
||||||
from ..types.genre import Genre
|
from ..types.genre import Genre
|
||||||
from ..types.metadataid import MetadataID
|
from ..types.metadataid import MetadataID
|
||||||
@ -279,7 +279,7 @@ class TheMovieDatabase(Provider):
|
|||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
season: Optional[int],
|
season: Optional[int],
|
||||||
episode: Optional[int],
|
episode_nbr: Optional[int],
|
||||||
absolute: Optional[int],
|
absolute: Optional[int],
|
||||||
*,
|
*,
|
||||||
language: list[str],
|
language: list[str],
|
||||||
@ -289,58 +289,47 @@ class TheMovieDatabase(Provider):
|
|||||||
if search["original_language"] not in language:
|
if search["original_language"] not in language:
|
||||||
language.append(search["original_language"])
|
language.append(search["original_language"])
|
||||||
|
|
||||||
|
# TODO: Handle absolute episodes
|
||||||
|
|
||||||
async def for_language(lng: str) -> Episode:
|
async def for_language(lng: str) -> Episode:
|
||||||
movie = await self.get(
|
episode = await self.get(
|
||||||
f"/movie/{show_id}",
|
f"/tv/{show_id}/season/{season}/episode/{episode_nbr}",
|
||||||
params={
|
params={
|
||||||
"language": lng,
|
"language": lng,
|
||||||
"append_to_response": "alternative_titles,videos,credits,keywords,images",
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
logging.debug("TMDb responded: %s", movie)
|
logging.debug("TMDb responded: %s", episode)
|
||||||
# TODO: Use collection data
|
|
||||||
|
|
||||||
ret = Movie(
|
ret = Episode(
|
||||||
original_language=movie["original_language"],
|
show=PartialShow(
|
||||||
aliases=[x["title"] for x in movie["alternative_titles"]["titles"]],
|
name=search["name"],
|
||||||
release_date=datetime.strptime(
|
original_language=search["original_language"],
|
||||||
movie["release_date"], "%Y-%m-%d"
|
external_id={
|
||||||
).date(),
|
"themoviedatabase": MetadataID(
|
||||||
status=MovieStatus.FINISHED
|
show_id, f"https://www.themoviedb.org/tv/{show_id}"
|
||||||
if movie["status"] == "Released"
|
)
|
||||||
else MovieStatus.PLANNED,
|
},
|
||||||
studios=[self.to_studio(x) for x in movie["production_companies"]],
|
),
|
||||||
genres=[
|
season_number=episode["season_number"],
|
||||||
self.genre_map[x["id"]]
|
episode_number=episode["episode_number"],
|
||||||
for x in movie["genres"]
|
# TODO: absolute numbers
|
||||||
if x["id"] in self.genre_map
|
absolute_number=None,
|
||||||
],
|
release_date=datetime.strptime(episode["air_date"], "%Y-%m-%d").date(),
|
||||||
|
thumbnail=f"https://image.tmdb.org/t/p/original{episode['poster_path']}"
|
||||||
|
if "poster_path" in episode
|
||||||
|
else None,
|
||||||
external_id={
|
external_id={
|
||||||
"themoviedatabase": MetadataID(
|
"themoviedatabase": MetadataID(
|
||||||
movie["id"], f"https://www.themoviedb.org/movie/{movie['id']}"
|
episode["id"],
|
||||||
|
f"https://www.themoviedb.org/movie/{episode['id']}",
|
||||||
),
|
),
|
||||||
"imdb": MetadataID(
|
},
|
||||||
movie["imdb_id"],
|
|
||||||
f"https://www.imdb.com/title/{movie['imdb_id']}",
|
|
||||||
),
|
|
||||||
}
|
|
||||||
# TODO: Add cast information
|
|
||||||
)
|
)
|
||||||
translation = MovieTranslation(
|
translation = EpisodeTranslation(
|
||||||
name=movie["title"],
|
name=episode["name"],
|
||||||
tagline=movie["tagline"],
|
overview=episode["overview"],
|
||||||
keywords=list(map(lambda x: x["name"], movie["keywords"]["keywords"])),
|
|
||||||
overview=movie["overview"],
|
|
||||||
posters=self.get_image(movie["images"]["posters"]),
|
|
||||||
logos=self.get_image(movie["images"]["logos"]),
|
|
||||||
thumbnails=self.get_image(movie["images"]["backdrops"]),
|
|
||||||
trailers=[
|
|
||||||
f"https://www.youtube.com/watch?v{x['key']}"
|
|
||||||
for x in movie["videos"]["results"]
|
|
||||||
if x["type"] == "Trailer" and x["site"] == "YouTube"
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
ret.translations = {lng: translation}
|
ret.translations = {lng: translation}
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
return self.process_translations(for_language, language)
|
return await self.process_translations(for_language, language)
|
||||||
|
@ -18,7 +18,6 @@ class PartialShow:
|
|||||||
class EpisodeTranslation:
|
class EpisodeTranslation:
|
||||||
name: str
|
name: str
|
||||||
overview: Optional[str]
|
overview: Optional[str]
|
||||||
thumbnails: list[str]
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -28,7 +27,8 @@ class Episode:
|
|||||||
episode_number: Optional[int]
|
episode_number: Optional[int]
|
||||||
absolute_number: Optional[int]
|
absolute_number: Optional[int]
|
||||||
release_date: Optional[date | int]
|
release_date: Optional[date | int]
|
||||||
path: Optional[str]
|
thumbnail: Optional[str]
|
||||||
external_id: dict[str, MetadataID]
|
external_id: dict[str, MetadataID]
|
||||||
|
|
||||||
|
path: Optional[str] = None
|
||||||
translations: dict[str, EpisodeTranslation] = field(default_factory=dict)
|
translations: dict[str, EpisodeTranslation] = field(default_factory=dict)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user