Могу ли я загрузить информацию о видео (например, название, просмотры и т. Д. c.), А не само видео для определенного диапазона дат c с python youtune-dl? - PullRequest
0 голосов
/ 06 апреля 2020

Я использую сценарий 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
...