diff options
| author | Sergey M․ <dstftw@gmail.com> | 2021-01-16 09:22:33 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2021-01-16 09:22:33 +0700 | 
| commit | 0cd4c402f0530d357bb11b660e14a303290f6caf (patch) | |
| tree | ca6304ea676f3e79b0ff4809b5de23e6cef812a0 | |
| parent | 9c9b45814582cc763d45cda2742f9574f254c6a0 (diff) | |
[animeondemand] Add support for lazy playlist extraction (closes #27829)
| -rw-r--r-- | youtube_dl/extractor/animeondemand.py | 26 | 
1 files changed, 16 insertions, 10 deletions
| diff --git a/youtube_dl/extractor/animeondemand.py b/youtube_dl/extractor/animeondemand.py index 00ce684d1..54e097d2f 100644 --- a/youtube_dl/extractor/animeondemand.py +++ b/youtube_dl/extractor/animeondemand.py @@ -116,8 +116,6 @@ class AnimeOnDemandIE(InfoExtractor):              r'(?s)<div[^>]+itemprop="description"[^>]*>(.+?)</div>',              webpage, 'anime description', default=None) -        entries = [] -          def extract_info(html, video_id, num=None):              title, description = [None] * 2              formats = [] @@ -233,7 +231,7 @@ class AnimeOnDemandIE(InfoExtractor):                  self._sort_formats(info['formats'])                  f = common_info.copy()                  f.update(info) -                entries.append(f) +                yield f              # Extract teaser/trailer only when full episode is not available              if not info['formats']: @@ -247,7 +245,7 @@ class AnimeOnDemandIE(InfoExtractor):                          'title': m.group('title'),                          'url': urljoin(url, m.group('href')),                      }) -                    entries.append(f) +                    yield f          def extract_episodes(html):              for num, episode_html in enumerate(re.findall( @@ -275,7 +273,8 @@ class AnimeOnDemandIE(InfoExtractor):                      'episode_number': episode_number,                  } -                extract_entries(episode_html, video_id, common_info) +                for e in extract_entries(episode_html, video_id, common_info): +                    yield e          def extract_film(html, video_id):              common_info = { @@ -283,11 +282,18 @@ class AnimeOnDemandIE(InfoExtractor):                  'title': anime_title,                  'description': anime_description,              } -            extract_entries(html, video_id, common_info) +            for e in extract_entries(html, video_id, common_info): +                yield e -        extract_episodes(webpage) +        def entries(): +            has_episodes = False +            for e in extract_episodes(webpage): +                has_episodes = True +                yield e -        if not entries: -            extract_film(webpage, anime_id) +            if not has_episodes: +                for e in extract_film(webpage, anime_id): +                    yield e -        return self.playlist_result(entries, anime_id, anime_title, anime_description) +        return self.playlist_result( +            entries(), anime_id, anime_title, anime_description) | 
