|
@@ -0,0 +1,77 @@
|
|
|
+import logging
|
|
|
+
|
|
|
+from django.conf import settings
|
|
|
+from themoviedb import TMDb
|
|
|
+from tmdbv3api import TV, TMDb as TMDb_direct
|
|
|
+from videos.metadata import VideoMetadata, VideoType
|
|
|
+
|
|
|
+key = getattr(settings, "TMDB_API_KEY", "33de8d24785931068ae356510dcfbac8")
|
|
|
+key = "33de8d24785931068ae356510dcfbac8"
|
|
|
+
|
|
|
+tmdb_direct = TMDb_direct()
|
|
|
+tmdb_direct.api_key = "33de8d24785931068ae356510dcfbac8"
|
|
|
+
|
|
|
+tmdb = TMDb(key=key, language="en-US", region="US")
|
|
|
+
|
|
|
+TMDB_STILL_URL = "https://image.tmdb.org/t/p/original"
|
|
|
+
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
+
|
|
|
+def lookup_video_from_tmdb(
|
|
|
+ name_or_id: str, kind: str = "movie"
|
|
|
+) -> VideoMetadata:
|
|
|
+ from videos.models import Series
|
|
|
+
|
|
|
+ imdb_id = name_or_id
|
|
|
+ if name_or_id.startswith("tt"):
|
|
|
+ imdb_id = name_or_id[2:]
|
|
|
+
|
|
|
+ video_metadata = VideoMetadata(imdb_id=imdb_id)
|
|
|
+ imdb_result: dict = {}
|
|
|
+
|
|
|
+ tmdb_result = tmdb.find().by_imdb("tt" + imdb_id)
|
|
|
+
|
|
|
+ if not tmdb_result:
|
|
|
+ logger.info(
|
|
|
+ "[lookup_video_from_tmdb] no video found on tmdb",
|
|
|
+ extra={"name_or_id": name_or_id},
|
|
|
+ )
|
|
|
+ return None
|
|
|
+
|
|
|
+ video_metadata = VideoMetadata(imdb_id=imdb_id)
|
|
|
+
|
|
|
+ media = None
|
|
|
+ show = None
|
|
|
+ if len(tmdb_result.movie_results) > 0:
|
|
|
+ media = tmdb_result.movie_results[0]
|
|
|
+ video_metadata.video_type = VideoType.MOVIE.value
|
|
|
+ if len(tmdb_result.tv_episode_results) > 0:
|
|
|
+ video_metadata.video_type = VideoType.TV_EPISODE.value
|
|
|
+ media = tmdb_result.tv_episode_results[0]
|
|
|
+ series_imdb_id = TV().external_ids(media.show_id).imdb_id[2:]
|
|
|
+
|
|
|
+ series, created = Series.objects.get_or_create(imdb_id=series_imdb_id)
|
|
|
+ if created:
|
|
|
+ show_data = TV().details(tv_id=media.show_id)
|
|
|
+ series.name = show_data.name
|
|
|
+ series.save()
|
|
|
+ video_metadata.tv_series_id = series.id
|
|
|
+
|
|
|
+ if not media:
|
|
|
+ logger.warning("Video not found on TMDB", extra={"imdb_id":imdb_id})
|
|
|
+ return video_metadata
|
|
|
+
|
|
|
+ video_metadata.tmdb_id = media.id
|
|
|
+ video_metadata.cover_url = TMDB_STILL_URL + media.still_path # TODO: enrich this with TMDB url
|
|
|
+ video_metadata.run_time_seconds = media.runtime * 60
|
|
|
+ video_metadata.title = media.name
|
|
|
+ video_metadata.episode_number = media.episode_number
|
|
|
+ video_metadata.season_number = media.season_number
|
|
|
+ #video_metadata.next_imdb_id = imdb_result.get("next episode", None)
|
|
|
+ video_metadata.year = media.air_date.year
|
|
|
+ video_metadata.plot = media.overview
|
|
|
+ video_metadata.imdb_rating = media.vote_average
|
|
|
+ #video_metadata.genres = imdb_result.get("genres", [])
|
|
|
+
|
|
|
+ return video_metadata
|