diff options
Diffstat (limited to 'youtube_dl/YoutubeDL.py')
| -rw-r--r-- | youtube_dl/YoutubeDL.py | 43 | 
1 files changed, 30 insertions, 13 deletions
| diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 2700051cf..beb7d0cd1 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -355,15 +355,17 @@ class YoutubeDL(object):      def _match_entry(self, info_dict):          """ Returns None iff the file should be downloaded """ -        title = info_dict['title'] -        matchtitle = self.params.get('matchtitle', False) -        if matchtitle: -            if not re.search(matchtitle, title, re.IGNORECASE): -                return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"' -        rejecttitle = self.params.get('rejecttitle', False) -        if rejecttitle: -            if re.search(rejecttitle, title, re.IGNORECASE): -                return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"' +        if 'title' in info_dict: +            # This can happen when we're just evaluating the playlist +            title = info_dict['title'] +            matchtitle = self.params.get('matchtitle', False) +            if matchtitle: +                if not re.search(matchtitle, title, re.IGNORECASE): +                    return u'[download] "' + title + '" title did not match pattern "' + matchtitle + '"' +            rejecttitle = self.params.get('rejecttitle', False) +            if rejecttitle: +                if re.search(rejecttitle, title, re.IGNORECASE): +                    return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'          date = info_dict.get('upload_date', None)          if date is not None:              dateRange = self.params.get('daterange', DateRange()) @@ -374,8 +376,8 @@ class YoutubeDL(object):              if age_limit < info_dict.get('age_limit', 0):                  return u'Skipping "' + title + '" because it is age restricted'          if self.in_download_archive(info_dict): -            return (u'%(title)s has already been recorded in archive' -                    % info_dict) +            return (u'%s has already been recorded in archive' +                    % info_dict.get('title', info_dict.get('id', u'video')))          return None      @staticmethod @@ -454,7 +456,7 @@ class YoutubeDL(object):                                       ie_key=ie_result.get('ie_key'),                                       extra_info=extra_info)          elif result_type == 'playlist': -            self.add_extra_info(ie_result, extra_info) +              # We process each entry in the playlist              playlist = ie_result.get('title', None) or ie_result.get('id', None)              self.to_screen(u'[download] Downloading playlist: %s' % playlist) @@ -484,6 +486,12 @@ class YoutubeDL(object):                      'webpage_url': ie_result['webpage_url'],                      'extractor_key': ie_result['extractor_key'],                  } + +                reason = self._match_entry(entry) +                if reason is not None: +                    self.to_screen(u'[download] ' + reason) +                    continue +                  entry_result = self.process_ie_result(entry,                                                        download=download,                                                        extra_info=extra) @@ -810,7 +818,16 @@ class YoutubeDL(object):          fn = self.params.get('download_archive')          if fn is None:              return False -        vid_id = info_dict['extractor'] + u' ' + info_dict['id'] +        extractor = info_dict.get('extractor_id') +        if extractor is None: +            if 'id' in info_dict: +                extractor = info_dict.get('ie_key')  # key in a playlist +        if extractor is None: +            return False  # Incomplete video information +        # Future-proof against any change in case +        # and backwards compatibility with prior versions +        extractor = extractor.lower() +        vid_id = extractor + u' ' + info_dict['id']          try:              with locked_file(fn, 'r', encoding='utf-8') as archive_file:                  for line in archive_file: | 
