mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2026-09-14 06:53:47 +03:00
Refactor extractor
This commit is contained in:
@@ -10,7 +10,9 @@ from ..utils import (
|
|||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
|
url_or_none,
|
||||||
)
|
)
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
class MixcloudBaseIE(InfoExtractor):
|
class MixcloudBaseIE(InfoExtractor):
|
||||||
@@ -72,7 +74,6 @@ class MixcloudIE(MixcloudBaseIE):
|
|||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'repost_count': int,
|
'repost_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'artists': list,
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': '404 playback error on site'},
|
'params': {'skip_download': '404 playback error on site'},
|
||||||
}, {
|
}, {
|
||||||
@@ -151,8 +152,6 @@ class MixcloudIE(MixcloudBaseIE):
|
|||||||
elif reason:
|
elif reason:
|
||||||
raise ExtractorError('Track is restricted', expected=True)
|
raise ExtractorError('Track is restricted', expected=True)
|
||||||
|
|
||||||
title = cloudcast['name']
|
|
||||||
|
|
||||||
stream_info = cloudcast['streamInfo']
|
stream_info = cloudcast['streamInfo']
|
||||||
formats = []
|
formats = []
|
||||||
|
|
||||||
@@ -184,47 +183,39 @@ class MixcloudIE(MixcloudBaseIE):
|
|||||||
self.raise_login_required(metadata_available=True)
|
self.raise_login_required(metadata_available=True)
|
||||||
|
|
||||||
comments = []
|
comments = []
|
||||||
for edge in (try_get(cloudcast, lambda x: x['comments']['edges']) or []):
|
for node in traverse_obj(cloudcast, ('comments', 'edges', ..., 'node', {dict})):
|
||||||
node = edge.get('node') or {}
|
|
||||||
text = strip_or_none(node.get('comment'))
|
text = strip_or_none(node.get('comment'))
|
||||||
if not text:
|
if not text:
|
||||||
continue
|
continue
|
||||||
user = node.get('user') or {}
|
|
||||||
comments.append({
|
comments.append({
|
||||||
'author': user.get('displayName'),
|
|
||||||
'author_id': user.get('username'),
|
|
||||||
'text': text,
|
'text': text,
|
||||||
'timestamp': parse_iso8601(node.get('created')),
|
**traverse_obj(node, {
|
||||||
|
'author': ('user', 'displayName', {str}),
|
||||||
|
'author_id': ('user', 'username', {str}),
|
||||||
|
'timestamp': ('created', {parse_iso8601}),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
tags = []
|
|
||||||
for t in cloudcast.get('tags'):
|
|
||||||
tag = try_get(t, lambda x: x['tag']['name'], str)
|
|
||||||
if tag:
|
|
||||||
tags.append(tag)
|
|
||||||
|
|
||||||
get_count = lambda x: int_or_none(try_get(cloudcast, lambda y: y[x]['totalCount']))
|
|
||||||
|
|
||||||
owner = cloudcast.get('owner') or {}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': track_id,
|
'id': track_id,
|
||||||
'title': title,
|
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'description': cloudcast.get('description'),
|
|
||||||
'thumbnail': try_get(cloudcast, lambda x: x['picture']['url'], str),
|
|
||||||
'uploader': owner.get('displayName'),
|
|
||||||
'timestamp': parse_iso8601(cloudcast.get('publishDate')),
|
|
||||||
'uploader_id': owner.get('username'),
|
|
||||||
'uploader_url': owner.get('url'),
|
|
||||||
'duration': int_or_none(cloudcast.get('audioLength')),
|
|
||||||
'view_count': int_or_none(cloudcast.get('plays')),
|
|
||||||
'like_count': get_count('favorites'),
|
|
||||||
'repost_count': get_count('reposts'),
|
|
||||||
'comment_count': get_count('comments'),
|
|
||||||
'comments': comments,
|
'comments': comments,
|
||||||
'tags': tags,
|
**traverse_obj(cloudcast, {
|
||||||
'artist': ', '.join(cloudcast.get('featuringArtistList') or []) or None,
|
'title': ('name', {str}),
|
||||||
|
'description': ('description', {str}),
|
||||||
|
'thumbnail': ('picture', 'url', {url_or_none}),
|
||||||
|
'timestamp': ('publishDate', {parse_iso8601}),
|
||||||
|
'duration': ('audioLength', {int_or_none}),
|
||||||
|
'uploader': ('owner', 'displayName', {str}),
|
||||||
|
'uploader_id': ('owner', 'username', {str}),
|
||||||
|
'uploader_url': ('owner', 'url', {url_or_none}),
|
||||||
|
'view_count': ('plays', {int_or_none}),
|
||||||
|
'like_count': ('favorites', 'totalCount', {int_or_none}),
|
||||||
|
'repost_count': ('reposts', 'totalCount', {int_or_none}),
|
||||||
|
'comment_count': ('comments', 'totalCount', {int_or_none}),
|
||||||
|
'tags': ('tags', ..., 'tag', 'name', {str}, all, filter),
|
||||||
|
'artists': ('featuringArtistList', ..., {str}, all, filter),
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user