mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-04 22:24:14 -04:00
Cleanup tvdb
This commit is contained in:
parent
d08a86a724
commit
497ba48f1b
@ -19,16 +19,18 @@ logger = getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
class TVDB(Provider):
|
class TVDB(Provider):
|
||||||
|
DEFAULT_API_KEY = "3732560f-08b7-41db-9d9a-2966b4d90c10"
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
client: ClientSession,
|
client: ClientSession,
|
||||||
api_key: str,
|
api_key: str,
|
||||||
pin: str,
|
pin: Optional[str],
|
||||||
languages: list[str],
|
languages: list[str],
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._client = client
|
self._client = client
|
||||||
self.base = "https://api4.thetvdb.com/v4/"
|
self.base = "https://api4.thetvdb.com/v4"
|
||||||
self._api_key = api_key
|
self._api_key = api_key
|
||||||
self._pin = pin
|
self._pin = pin
|
||||||
self._languages = languages
|
self._languages = languages
|
||||||
@ -80,7 +82,10 @@ class TVDB(Provider):
|
|||||||
async def login(self) -> str:
|
async def login(self) -> str:
|
||||||
async with self._client.post(
|
async with self._client.post(
|
||||||
f"{self.base}/login",
|
f"{self.base}/login",
|
||||||
json={"apikey": self._api_key, "pin": self._pin},
|
json={
|
||||||
|
"apikey": self._api_key,
|
||||||
|
}
|
||||||
|
| ({"pin": self._pin} if self._pin else {}),
|
||||||
) as r:
|
) as r:
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
ret = await r.json()
|
ret = await r.json()
|
||||||
@ -110,6 +115,7 @@ class TVDB(Provider):
|
|||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return "tvdb"
|
return "tvdb"
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
async def search_show(self, name: str, year: Optional[int]) -> str:
|
async def search_show(self, name: str, year: Optional[int]) -> str:
|
||||||
query = OrderedDict(
|
query = OrderedDict(
|
||||||
query=name,
|
query=name,
|
||||||
@ -125,7 +131,7 @@ class TVDB(Provider):
|
|||||||
show_id: str,
|
show_id: str,
|
||||||
language: Optional[str] = None,
|
language: Optional[str] = None,
|
||||||
):
|
):
|
||||||
path = f"/series/{show_id}/episodes/default"
|
path = f"series/{show_id}/episodes/default"
|
||||||
if language is not None:
|
if language is not None:
|
||||||
path += f"/{language}"
|
path += f"/{language}"
|
||||||
ret = await self.get(
|
ret = await self.get(
|
||||||
@ -136,8 +142,8 @@ class TVDB(Provider):
|
|||||||
while next != None:
|
while next != None:
|
||||||
ret = await self.get(fullPath=next)
|
ret = await self.get(fullPath=next)
|
||||||
next = ret["links"]["next"]
|
next = ret["links"]["next"]
|
||||||
episodes += ret["data"]
|
episodes += ret["data"]["episodes"]
|
||||||
return episodes
|
return episodes, ret["data"]
|
||||||
|
|
||||||
async def search_episode(
|
async def search_episode(
|
||||||
self,
|
self,
|
||||||
@ -150,6 +156,7 @@ class TVDB(Provider):
|
|||||||
show_id = await self.search_show(name, year)
|
show_id = await self.search_show(name, year)
|
||||||
return await self.identify_episode(show_id, season, episode_nbr, absolute)
|
return await self.identify_episode(show_id, season, episode_nbr, absolute)
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
async def identify_episode(
|
async def identify_episode(
|
||||||
self,
|
self,
|
||||||
show_id: str,
|
show_id: str,
|
||||||
@ -158,8 +165,7 @@ class TVDB(Provider):
|
|||||||
absolute: Optional[int],
|
absolute: Optional[int],
|
||||||
) -> Episode:
|
) -> Episode:
|
||||||
flang, *olang = self._languages
|
flang, *olang = self._languages
|
||||||
episodes = await self.get_episodes(show_id, language=flang)
|
episodes, show = await self.get_episodes(show_id, language=flang)
|
||||||
show = episodes["data"]
|
|
||||||
ret = next(
|
ret = next(
|
||||||
filter(
|
filter(
|
||||||
(lambda x: x["seasonNumber"] == 1 and x["number"] == absolute)
|
(lambda x: x["seasonNumber"] == 1 and x["number"] == absolute)
|
||||||
@ -167,7 +173,7 @@ class TVDB(Provider):
|
|||||||
else (
|
else (
|
||||||
lambda x: x["seasonNumber"] == season and x["number"] == episode_nbr
|
lambda x: x["seasonNumber"] == season and x["number"] == episode_nbr
|
||||||
),
|
),
|
||||||
episodes["episodes"],
|
episodes,
|
||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
@ -188,10 +194,7 @@ class TVDB(Provider):
|
|||||||
self._languages,
|
self._languages,
|
||||||
[
|
[
|
||||||
ret,
|
ret,
|
||||||
*(
|
*(next(x for x in e[0] if x["id"] == ret["id"]) for e in otrans),
|
||||||
next(x for x in e["episodes"] if x["id"] == ret["id"])
|
|
||||||
for e in otrans
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -223,14 +226,17 @@ class TVDB(Provider):
|
|||||||
translations=translations,
|
translations=translations,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
async def identify_show(self, show_id: str) -> Show:
|
async def identify_show(self, show_id: str) -> Show:
|
||||||
ret = await self.get(
|
ret = await self.get(
|
||||||
f"series/{show_id}/extended",
|
f"series/{show_id}/extended",
|
||||||
not_found_fail=f"Could not find show with id {show_id}",
|
not_found_fail=f"Could not find show with id {show_id}",
|
||||||
)
|
)
|
||||||
|
logger.debug("TVDB responded: %s", ret)
|
||||||
|
ret = ret["data"]
|
||||||
translations = await asyncio.gather(
|
translations = await asyncio.gather(
|
||||||
*(
|
*(
|
||||||
self.get(f"/series/{show_id}/translations/{lang}")
|
self.get(f"series/{show_id}/translations/{lang}")
|
||||||
for lang in self._languages
|
for lang in self._languages
|
||||||
if lang != ret["originalLanguage"]
|
if lang != ret["originalLanguage"]
|
||||||
)
|
)
|
||||||
@ -326,6 +332,7 @@ class TVDB(Provider):
|
|||||||
return {}
|
return {}
|
||||||
return {name: MetadataID(id, link(id))}
|
return {name: MetadataID(id, link(id))}
|
||||||
|
|
||||||
|
@cache(ttl=timedelta(days=1))
|
||||||
async def identify_season(self, show_id: str, season: int) -> Season:
|
async def identify_season(self, show_id: str, season: int) -> Season:
|
||||||
"""
|
"""
|
||||||
for tvdb, we don't save show_id but the season_id so we don't need to read `season`
|
for tvdb, we don't save show_id but the season_id so we don't need to read `season`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user