Я использую сценарий python для загрузки видеоинформации (например, просмотров, лайков, подписей и т. Д. c.), А не самого видео. Я пытался использовать объект datarange, но при указании 20191201 выбираются все семь видео вместо только последних 2 из 7: https://www.youtube.com/playlist?list=PLGGpadyh0wS7a4EeznboRmquTTSPzCo5Z.
Do c https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/YoutubeDL.py#L128 -L278 гласит: «Объект DateRange, загружайте, только если закачка находится в диапазоне». Поскольку я не загружаю видео и просто извлекаю информацию, мне было интересно, есть ли опция, позволяющая извлекать только мета-информацию видео для определенного диапазона дат c, так что возвращаются только 2, а не 7 видео.
def iterate_videos(self, url, afterDate=None):
# maybe daterange only affects the downloading of a video not extacting meta information
# https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/YoutubeDL.py#L128-L278
if afterDate is not None:
daterange = DateRange(afterDate)
ydl_opts = {'daterange': daterange}
else:
ydl_opts = {}
ydl = youtube_dl.YoutubeDL(ydl_opts)
result = ydl.extract_info(url, download=False)
list_entries = []
ch = CaptionsHandler()
chan = Channel()
chan.ctype = result['_type']
chan.cid = result['id']
chan.title = result['title']
chan.uploader = result['uploader']
chan.uploader_id = result['uploader_id']
chan.uploader_url = result['uploader_url']
chan.extractor = result['extractor']
chan.extractor_key = result['extractor_key']
chan.webpage_url = result['webpage_url']
chan.webpage_url_basename = result['webpage_url_basename']
for entry in result['entries']:
try:
vid1 = Video()
vid1.vid = entry['id']
vid1.webpage_url = entry['webpage_url']
vid1.upload_date = datetime.datetime.strptime(entry['upload_date'], "%Y%m%d")
vid1.uploader = entry['uploader']
vid1.view_count = entry['view_count']
vid1.like_count = entry['like_count']
vid1.dislike_count = entry['dislike_count']
vid1.format = entry['format']
vid1.duration = entry['duration']
vid1.title = entry['title']
vid1.description = entry['description']
cap: Caption = ch.get_captions(vid1.webpage_url)
captions = cap.text
trans_capt_srt = TransformerCaptions()
trans_capt_vtt = TransformerVTT()
if cap.caption_type == 'automatic_captions':
cleaned_captions = trans_capt_vtt.extract_plain_text(captions)
vid1.captions_type = 'automatic_captions'
else:
vid1.captions_timed = captions
cleaned_captions = trans_capt_srt.transform(captions)
if cleaned_captions == 'Youtube Video does not have any english captions':
vid1.captions_type = 'no english captions'
else:
vid1.captions_type = 'manual_captions'
vid1.captions = cleaned_captions
vid1.channel_webpage_url = chan.webpage_url
chanToVid = ChannelToVideo()
chanToVid.video = vid1
list_entries.append(chanToVid)
except Exception as e:
print('ChannelHandler -> iterate_videos: Failed to extract captions: ' + str(e))
chan.videos = list_entries
return chan