aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/extractor/lbry.py
diff options
context:
space:
mode:
Diffstat (limited to 'yt_dlp/extractor/lbry.py')
-rw-r--r--yt_dlp/extractor/lbry.py51
1 files changed, 41 insertions, 10 deletions
diff --git a/yt_dlp/extractor/lbry.py b/yt_dlp/extractor/lbry.py
index 051d94873..865cda761 100644
--- a/yt_dlp/extractor/lbry.py
+++ b/yt_dlp/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,
@@ -62,6 +64,7 @@ class LBRYBaseIE(InfoExtractor):
'description': stream_value.get('description'),
'license': stream_value.get('license'),
'timestamp': int_or_none(stream.get('timestamp')),
+ 'release_timestamp': int_or_none(stream_value.get('release_time')),
'tags': stream_value.get('tags'),
'duration': int_or_none(media.get('duration')),
'channel': try_get(signing_channel, lambda x: x['value']['title']),
@@ -94,6 +97,8 @@ class LBRYIE(LBRYBaseIE):
'description': 'md5:f6cb5c704b332d37f5119313c2c98f51',
'timestamp': 1595694354,
'upload_date': '20200725',
+ 'release_timestamp': 1595340697,
+ 'release_date': '20200721',
'width': 1280,
'height': 720,
}
@@ -108,6 +113,8 @@ class LBRYIE(LBRYBaseIE):
'description': 'md5:661ac4f1db09f31728931d7b88807a61',
'timestamp': 1591312601,
'upload_date': '20200604',
+ 'release_timestamp': 1591312421,
+ 'release_date': '20200604',
'tags': list,
'duration': 2570,
'channel': 'The LBRY Foundation',
@@ -189,17 +196,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')
@@ -220,8 +228,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(