+ def _fetch_page(self, display_id, url, params, page):
+ page += 1
+ page_params = {
+ 'no_totals': True,
+ 'page': page,
+ 'page_size': self._PAGE_SIZE,
+ **params,
+ }
+ result = self._call_api_proxy(
+ 'claim_search', display_id, page_params, f'page {page}')
+ for item in traverse_obj(result, ('items', lambda _, v: v['name'] and v['claim_id'])):
+ yield {
+ **self._parse_stream(item, url),
+ '_type': 'url',
+ 'id': item['claim_id'],
+ 'url': self._permanent_url(url, item['name'], item['claim_id']),
+ }
+
+ def _playlist_entries(self, url, display_id, claim_param, metadata):
+ qs = parse_qs(url)
+ content = qs.get('content', [None])[0]
+ params = {
+ 'fee_amount': qs.get('fee_amount', ['>=0'])[0],
+ 'order_by': {
+ 'new': ['release_time'],
+ 'top': ['effective_amount'],
+ 'trending': ['trending_group', 'trending_mixed'],
+ }[qs.get('order', ['new'])[0]],
+ 'claim_type': 'stream',
+ 'stream_types': [content] if content in ['audio', 'video'] else self._SUPPORTED_STREAM_TYPES,
+ **claim_param,
+ }
+ duration = qs.get('duration', [None])[0]
+ if duration:
+ params['duration'] = {
+ 'long': '>=1200',
+ 'short': '<=240',
+ }[duration]
+ language = qs.get('language', ['all'])[0]
+ if language != 'all':
+ languages = [language]
+ if language == 'en':
+ languages.append('none')
+ params['any_languages'] = languages
+
+ entries = OnDemandPagedList(
+ functools.partial(self._fetch_page, display_id, url, params),
+ self._PAGE_SIZE)
+
+ return self.playlist_result(
+ entries, display_id, **traverse_obj(metadata, ('value', {
+ 'title': 'title',
+ 'description': 'description',
+ })))
+