diff options
| -rw-r--r-- | youtube_dl/extractor/lbry.py | 46 | 
1 files changed, 36 insertions, 10 deletions
diff --git a/youtube_dl/extractor/lbry.py b/youtube_dl/extractor/lbry.py index 95782366b..ae43d56ea 100644 --- a/youtube_dl/extractor/lbry.py +++ b/youtube_dl/extractor/lbry.py @@ -6,8 +6,10 @@ import json  from .common import InfoExtractor  from ..compat import ( +    compat_parse_qs,      compat_str,      compat_urllib_parse_unquote, +    compat_urllib_parse_urlparse,  )  from ..utils import (      determine_ext, @@ -186,17 +188,18 @@ class LBRYChannelIE(LBRYBaseIE):      }]      _PAGE_SIZE = 50 -    def _fetch_page(self, claim_id, url, page): +    def _fetch_page(self, claim_id, url, params, page):          page += 1 +        page_params = { +            'channel_ids': [claim_id], +            'claim_type': 'stream', +            'no_totals': True, +            'page': page, +            'page_size': self._PAGE_SIZE, +        } +        page_params.update(params)          result = self._call_api_proxy( -            'claim_search', claim_id, { -                'channel_ids': [claim_id], -                'claim_type': 'stream', -                'no_totals': True, -                'page': page, -                'page_size': self._PAGE_SIZE, -                'stream_types': self._SUPPORTED_STREAM_TYPES, -            }, 'page %d' % page) +            'claim_search', claim_id, page_params, 'page %d' % page)          for item in (result.get('items') or []):              stream_claim_name = item.get('name')              stream_claim_id = item.get('claim_id') @@ -217,8 +220,31 @@ class LBRYChannelIE(LBRYBaseIE):          result = self._resolve_url(              'lbry://' + display_id, display_id, 'channel')          claim_id = result['claim_id'] +        qs = compat_parse_qs(compat_urllib_parse_urlparse(url).query) +        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]], +            'stream_types': [content] if content in ['audio', 'video'] else self._SUPPORTED_STREAM_TYPES, +        } +        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, claim_id, url), +            functools.partial(self._fetch_page, claim_id, url, params),              self._PAGE_SIZE)          result_value = result.get('value') or {}          return self.playlist_result(  | 
