mirror of
https://github.com/maxdorninger/MediaManager.git
synced 2026-04-17 15:43:28 +02:00
feat: add IMDb ID retrieval for movies and TV shows
This commit is contained in:
@@ -58,6 +58,20 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
)
|
||||
raise
|
||||
|
||||
def __get_show_external_ids(self, id: int) -> dict:
|
||||
try:
|
||||
response = requests.get(url=f"{self.url}/tv/shows/{id}/external_ids")
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.RequestException as e:
|
||||
log.error(f"TMDB API error getting show external IDs for ID {id}: {e}")
|
||||
if notification_manager.is_configured():
|
||||
notification_manager.send_notification(
|
||||
title="TMDB API Error",
|
||||
message=f"Failed to fetch show external IDs for ID {id} from TMDB. Error: {str(e)}",
|
||||
)
|
||||
raise
|
||||
|
||||
def __get_season_metadata(
|
||||
self, show_id: int, season_number: int, language: str | None = None
|
||||
) -> dict:
|
||||
@@ -136,6 +150,20 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
)
|
||||
raise
|
||||
|
||||
def __get_movie_external_ids(self, id: int) -> dict:
|
||||
try:
|
||||
response = requests.get(url=f"{self.url}/movies/{id}/external_ids")
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.RequestException as e:
|
||||
log.error(f"TMDB API error getting movie external IDs for ID {id}: {e}")
|
||||
if notification_manager.is_configured():
|
||||
notification_manager.send_notification(
|
||||
title="TMDB API Error",
|
||||
message=f"Failed to fetch movie external IDs for ID {id} from TMDB. Error: {str(e)}",
|
||||
)
|
||||
raise
|
||||
|
||||
def __search_movie(self, query: str, page: int) -> dict:
|
||||
try:
|
||||
response = requests.get(
|
||||
@@ -219,6 +247,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
# Fetch show metadata in the appropriate language
|
||||
show_metadata = self.__get_show_metadata(id, language=language)
|
||||
|
||||
# get imdb id
|
||||
external_ids = self.__get_show_external_ids(id=id)
|
||||
imdb_id = external_ids.get("imdb_id")
|
||||
|
||||
season_list = []
|
||||
# inserting all the metadata into the objects
|
||||
for season in show_metadata["seasons"]:
|
||||
@@ -261,6 +293,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
metadata_provider=self.name,
|
||||
ended=show_metadata["status"] in ENDED_STATUS,
|
||||
original_language=show_metadata.get("original_language"),
|
||||
imdb_id=imdb_id,
|
||||
)
|
||||
|
||||
return show
|
||||
@@ -346,6 +379,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
# Fetch movie metadata in the appropriate language
|
||||
movie_metadata = self.__get_movie_metadata(id=id, language=language)
|
||||
|
||||
# get imdb id
|
||||
external_ids = self.__get_movie_external_ids(id=id)
|
||||
imdb_id = external_ids.get("imdb_id")
|
||||
|
||||
year = media_manager.metadataProvider.utils.get_year_from_date(
|
||||
movie_metadata["release_date"]
|
||||
)
|
||||
@@ -357,6 +394,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
|
||||
year=year,
|
||||
metadata_provider=self.name,
|
||||
original_language=movie_metadata.get("original_language"),
|
||||
imdb_id=imdb_id,
|
||||
)
|
||||
|
||||
return movie
|
||||
|
||||
@@ -77,6 +77,14 @@ class TvdbMetadataProvider(AbstractMetadataProvider):
|
||||
seasons = []
|
||||
seasons_ids = [season["id"] for season in series["seasons"]]
|
||||
|
||||
# get imdb id from remote ids
|
||||
imdb_id = None
|
||||
remote_ids = series.get("remoteIds", None)
|
||||
if remote_ids:
|
||||
for remote_id in remote_ids:
|
||||
if remote_id.get("type") == 2:
|
||||
imdb_id = remote_id.get("id")
|
||||
|
||||
for season in seasons_ids:
|
||||
s = self.__get_season(id=season)
|
||||
# the seasons need to be filtered to a certain type,
|
||||
@@ -119,6 +127,7 @@ class TvdbMetadataProvider(AbstractMetadataProvider):
|
||||
metadata_provider=self.name,
|
||||
seasons=seasons,
|
||||
ended=False,
|
||||
imdb_id=imdb_id,
|
||||
)
|
||||
|
||||
return show
|
||||
@@ -267,17 +276,22 @@ class TvdbMetadataProvider(AbstractMetadataProvider):
|
||||
:rtype: Movie
|
||||
"""
|
||||
movie = self.__get_movie(id)
|
||||
try:
|
||||
year = movie["year"]
|
||||
except KeyError:
|
||||
year = None
|
||||
|
||||
# get imdb id from remote ids
|
||||
imdb_id = None
|
||||
remote_ids = movie.get("remoteIds", None)
|
||||
if remote_ids:
|
||||
for remote_id in remote_ids:
|
||||
if remote_id.get("type") == 2:
|
||||
imdb_id = remote_id.get("id")
|
||||
|
||||
movie = Movie(
|
||||
name=movie["name"],
|
||||
overview="TVDB does not provide overviews",
|
||||
year=year,
|
||||
overview="Overviews are not supported with TVDB",
|
||||
year=movie.get("year"),
|
||||
external_id=movie["id"],
|
||||
metadata_provider=self.name,
|
||||
imdb_id=imdb_id,
|
||||
)
|
||||
|
||||
return movie
|
||||
|
||||
Reference in New Issue
Block a user