43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
'''
|
|
Wrapper for the youtube-dl library. Used so if there are any library interface
|
|
updates we only need to udpate them in one place.
|
|
'''
|
|
|
|
|
|
from django.conf import settings
|
|
from copy import copy
|
|
from common.logger import log
|
|
import youtube_dl
|
|
|
|
|
|
_defaults = getattr(settings, 'YOUTUBE_DEFAULTS', {})
|
|
_defaults.update({'logger': log})
|
|
|
|
|
|
class YouTubeError(youtube_dl.utils.DownloadError):
|
|
'''
|
|
Generic wrapped error for all errors that could be raised by youtube-dl.
|
|
'''
|
|
pass
|
|
|
|
|
|
def get_media_info(url):
|
|
'''
|
|
Extracts information from a YouTube URL and returns it as a dict. For a channel
|
|
or playlist this returns a dict of all the videos on the channel or playlist
|
|
as well as associated metadata.
|
|
'''
|
|
opts = copy(_defaults)
|
|
opts.update({
|
|
'skip_download': True,
|
|
'forcejson': True,
|
|
'simulate': True,
|
|
})
|
|
response = {}
|
|
with youtube_dl.YoutubeDL(opts) as y:
|
|
try:
|
|
response = y.extract_info(url, download=False)
|
|
except youtube_dl.utils.DownloadError as e:
|
|
raise YouTubeError(f'Failed to extract_info for "{url}": {e}') from e
|
|
return response
|