|
|
|
@ -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(
|
|
|
|
|