Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/abematv.py (Python)

Code before:
        },
        'playlist_mincount': 2,
    }, {
        'url': 'https://abema.tv/video/title/193-132',
        'info_dict': {
            'id': '193-132',
            'title': '真心が届く~僕とスターのオフィス・ラブ!?~',
            'description': 'md5:9b59493d1f3a792bafbc7319258e7af8',
        },
        'playlist_mincount': 16,
    }, {
        'url': 'https://abema.tv/video/title/25-1nzan-whrxe',
        'info_dict': {
            'id': '25-1nzan-whrxe',
            'title': 'ソードアート・オンライン',
            'description': 'md5:c094904052322e6978495532bdbf06e6',
        },
        'playlist_mincount': 25,
    }, {
        'url': 'https://abema.tv/video/title/26-2mzbynr-cph?s=26-2mzbynr-cph_s40',
        'info_dict': {
            'title': '〈物語〉シリーズ',
            'id': '26-2mzbynr-cph',
            'description': 'md5:e67873de1c88f360af1f0a4b84847a52',
        },
        'playlist_mincount': 31,
    }]

    def _fetch_page(self, playlist_id, series_version, season_id, page):
        query = {
            'seriesVersion': series_version,
            'offset': str(page * self._PAGE_SIZE),
            'order': 'seq',
            'limit': str(self._PAGE_SIZE),
        }
        if season_id:
            query['seasonId'] = season_id
        programs = self._call_api(
            f'v1/video/series/{playlist_id}/programs', playlist_id,
            note=f'Downloading page {page + 1}',
            query=query)
        yield from (
            self.url_result(f'https://abema.tv/video/episode/{x}')
            for x in traverse_obj(programs, ('programs', ..., 'id')))

    def _entries(self, playlist_id, series_version, season_id):
        return OnDemandPagedList(
            functools.partial(self._fetch_page, playlist_id, series_version, season_id),
            self._PAGE_SIZE)

    def _real_extract(self, url):

Review comment (suggestion):
With mincount, we can't know whether only the season has been downloaded.
```suggestion
        'playlist_count': 31,
```

Code after:
        },
        'playlist_mincount': 2,
    }, {
        'url': 'https://abema.tv/video/title/193-132',
        'info_dict': {
            'id': '193-132',
            'title': '真心が届く~僕とスターのオフィス・ラブ!?~',
            'description': 'md5:9b59493d1f3a792bafbc7319258e7af8',
        },
        'playlist_mincount': 16,
    }, {
        'url': 'https://abema.tv/video/title/25-1nzan-whrxe',
        'info_dict': {
            'id': '25-1nzan-whrxe',
            'title': 'ソードアート・オンライン',
            'description': 'md5:c094904052322e6978495532bdbf06e6',
        },
        'playlist_mincount': 25,
    }, {
        'url': 'https://abema.tv/video/title/26-2mzbynr-cph?s=26-2mzbynr-cph_s40',
        'info_dict': {
            'title': '〈物語〉シリーズ',
            'id': '26-2mzbynr-cph',
            'description': 'md5:e67873de1c88f360af1f0a4b84847a52',
        },
        'playlist_count': 59,
    }]

    def _fetch_page(self, playlist_id, series_version, season_id, page):
        query = {
            'seriesVersion': series_version,
            'offset': str(page * self._PAGE_SIZE),
            'order': 'seq',
            'limit': str(self._PAGE_SIZE),
        }
        if season_id:
            query['seasonId'] = season_id
        programs = self._call_api(
            f'v1/video/series/{playlist_id}/programs', playlist_id,
            note=f'Downloading page {page + 1}',
            query=query)
        yield from (
            self.url_result(f'https://abema.tv/video/episode/{x}')
            for x in traverse_obj(programs, ('programs', ..., 'id')))

    def _entries(self, playlist_id, series_version, season_id):
        return OnDemandPagedList(
            functools.partial(self._fetch_page, playlist_id, series_version, season_id),
            self._PAGE_SIZE)

    def _real_extract(self, url):