12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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
- TMDB_KEY = getattr(settings, "TMDB_API_KEY", "")
- tmdb_direct = TMDb_direct()
- tmdb_direct.api_key = TMDB_KEY
- tmdb = TMDb(key=TMDB_KEY, language="en-US", region="US")
- TMDB_IMAGE_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)
- 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
- video_metadata.cover_url = TMDB_IMAGE_URL + media.poster_path # TODO: enrich this with TMDB url
- 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
- video_metadata.cover_url = TMDB_IMAGE_URL + media.still_path # TODO: enrich this with TMDB url
- 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.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
|