diff --git a/backend/StreamServerApp/database_utils.py b/backend/StreamServerApp/database_utils.py index b999ff0..402e4fa 100644 --- a/backend/StreamServerApp/database_utils.py +++ b/backend/StreamServerApp/database_utils.py @@ -22,7 +22,7 @@ from StreamServerApp.media_management.fileinfo import createfileinfo, readfileinfo from StreamServerApp.media_processing import prepare_video, get_video_type_and_info -from StreamServerApp.tasks import get_subtitles_async +from StreamServerApp.tasks import get_subtitles_async, download_cover_async from StreamingServer import settings import logging @@ -222,6 +222,7 @@ def add_one_video_to_database(full_path, return_value = 1 v.save() + download_cover_async.delay(v.id, video_type_and_info['title'], True if video_type_and_info['type'] == 'Series' else False) for ov_subtitle_path in video_infos["ov_subtitles"]: ov_sub = Subtitle() webvtt_subtitles_relative_path = os.path.relpath( diff --git a/backend/StreamServerApp/media_management/cover_downloader.py b/backend/StreamServerApp/media_management/cover_downloader.py new file mode 100644 index 0000000..3640b8b --- /dev/null +++ b/backend/StreamServerApp/media_management/cover_downloader.py @@ -0,0 +1,27 @@ +import requests +import os + +auth_key = os.getenv('TMBD_KEY') +if not auth_key: + print("no auth key") + +configuration_url = 'https://api.themoviedb.org/3/configuration?&api_key={}'.format(auth_key) +response = requests.get(configuration_url) +value = response.json() + +base_url = value["images"]["base_url"] +poster_size = value["images"]["poster_sizes"][0] + +def download_cover(name, outputfile, is_tv_show=False): + if is_tv_show: + api_url = 'https://api.themoviedb.org/3/search/tv?query={}&api_key={}'.format(name, auth_key) + else: + api_url = 'https://api.themoviedb.org/3/search/movie?query={}&api_key={}'.format(name, auth_key) + response = requests.get(api_url) + value = response.json() + + poster_url = "{}/{}{}".format(base_url, poster_size, value["results"][0]["poster_path"]) + response = requests.get(poster_url) + + with open(outputfile, mode="wb") as file: + file.write(response.content) \ No newline at end of file diff --git a/backend/StreamServerApp/tasks.py b/backend/StreamServerApp/tasks.py index 720ea59..2b3ea69 100644 --- a/backend/StreamServerApp/tasks.py +++ b/backend/StreamServerApp/tasks.py @@ -1,8 +1,7 @@ from celery import shared_task from StreamServerApp.models import Video, Series, Movie, Subtitle -import subprocess -import os from django.conf import settings +from media_management.cover_downloader import download_cover import logging @@ -24,3 +23,19 @@ def get_subtitles_async(video_id, video_path, remote_url): except Exception as e: logger.exception(e) return 0 + + +@shared_task +def download_cover_async(id, name, is_tv_show=False): + output_file = "/usr/src/static/{}.jpeg".format(name) + download_cover(name, is_tv_show) + video = Video.objects.get(id=id) + if is_tv_show: + serie = Series.objects.get(id=video.series_id) + serie.thumbnail = output_file + serie.save() + else: + video.thumbnail = output_file + video.save() + + return 0