mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-25 02:45:12 +00:00
[cleanup] Use format_field where applicable
This commit is contained in:
parent
0bfc53d05c
commit
e0ddbd02bd
26 changed files with 59 additions and 52 deletions
|
@ -7,6 +7,7 @@
|
||||||
compat_urllib_parse_urlparse,
|
compat_urllib_parse_urlparse,
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
|
@ -92,7 +93,7 @@ def _real_extract(self, url):
|
||||||
'timestamp': parse_iso8601(video.get('creationTime')),
|
'timestamp': parse_iso8601(video.get('creationTime')),
|
||||||
'channel': channel.get('name'),
|
'channel': channel.get('name'),
|
||||||
'channel_id': channel_id,
|
'channel_id': channel_id,
|
||||||
'channel_url': self._BASE_URL + '/?channel=' + channel_id if channel_id else None,
|
'channel_url': format_field(channel_id, template=f'{self._BASE_URL}/?channel=%s'),
|
||||||
'duration': float_or_none(video.get('duration'), 1000),
|
'duration': float_or_none(video.get('duration'), 1000),
|
||||||
'view_count': int_or_none(video.get('views')),
|
'view_count': int_or_none(video.get('views')),
|
||||||
'tags': video.get('hashtags'),
|
'tags': video.get('hashtags'),
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
compat_str,
|
compat_str,
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
|
@ -43,7 +44,7 @@ def _parse_video_data(self, video_data, video_id, is_live):
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'title': title,
|
'title': title,
|
||||||
'description': video_data.get('description_en') or video_data.get('description_ar'),
|
'description': video_data.get('description_en') or video_data.get('description_ar'),
|
||||||
'thumbnail': 'http://admin.mangomolo.com/analytics/%s' % img if img else None,
|
'thumbnail': format_field(img, template='http://admin.mangomolo.com/analytics/%s'),
|
||||||
'duration': int_or_none(video_data.get('duration')),
|
'duration': int_or_none(video_data.get('duration')),
|
||||||
'timestamp': parse_iso8601(video_data.get('create_time'), ' '),
|
'timestamp': parse_iso8601(video_data.get('create_time'), ' '),
|
||||||
'is_live': is_live,
|
'is_live': is_live,
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
|
@ -43,7 +44,7 @@ def _real_extract(self, url):
|
||||||
formats = [{
|
formats = [{
|
||||||
'url': base_url + f['fn'],
|
'url': base_url + f['fn'],
|
||||||
'height': int_or_none(f.get('height')),
|
'height': int_or_none(f.get('height')),
|
||||||
'format_id': '%sp' % f['height'] if f.get('height') else None,
|
'format_id': format_field(f, 'height', '%sp'),
|
||||||
} for f in video['qualities'] if f.get('fn')]
|
} for f in video['qualities'] if f.get('fn')]
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
qualities,
|
qualities,
|
||||||
)
|
)
|
||||||
|
@ -95,7 +96,7 @@ def _real_extract(self, url):
|
||||||
owner = video_info.get('owner', {})
|
owner = video_info.get('owner', {})
|
||||||
uploader_id = owner.get('nsid')
|
uploader_id = owner.get('nsid')
|
||||||
uploader_path = owner.get('path_alias') or uploader_id
|
uploader_path = owner.get('path_alias') or uploader_id
|
||||||
uploader_url = 'https://www.flickr.com/photos/%s/' % uploader_path if uploader_path else None
|
uploader_url = format_field(uploader_path, template='https://www.flickr.com/photos/%s/')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
from ..compat import compat_urllib_parse_unquote
|
from ..compat import compat_urllib_parse_unquote
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
determine_ext,
|
determine_ext,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
traverse_obj,
|
traverse_obj,
|
||||||
|
@ -86,7 +87,7 @@ def _parse_post(self, post_data):
|
||||||
'display_id': post_data.get('slug'),
|
'display_id': post_data.get('slug'),
|
||||||
'uploader': user_data.get('display_name') or user_data.get('name'),
|
'uploader': user_data.get('display_name') or user_data.get('name'),
|
||||||
'uploader_id': user_data.get('username'),
|
'uploader_id': user_data.get('username'),
|
||||||
'uploader_url': 'https://gamejolt.com' + user_data['url'] if user_data.get('url') else None,
|
'uploader_url': format_field(user_data, 'url', 'https://gamejolt.com%s'),
|
||||||
'categories': [try_get(category, lambda x: '%s - %s' % (x['community']['name'], x['channel'].get('display_title') or x['channel']['title']))
|
'categories': [try_get(category, lambda x: '%s - %s' % (x['community']['name'], x['channel'].get('display_title') or x['channel']['title']))
|
||||||
for category in post_data.get('communities' or [])],
|
for category in post_data.get('communities' or [])],
|
||||||
'tags': traverse_obj(
|
'tags': traverse_obj(
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
get_element_by_attribute,
|
get_element_by_attribute,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
@ -341,7 +342,7 @@ def _real_extract(self, url):
|
||||||
if nodes:
|
if nodes:
|
||||||
return self.playlist_result(
|
return self.playlist_result(
|
||||||
self._extract_nodes(nodes, True), video_id,
|
self._extract_nodes(nodes, True), video_id,
|
||||||
'Post by %s' % uploader_id if uploader_id else None, description)
|
format_field(uploader_id, template='Post by %s'), description)
|
||||||
|
|
||||||
video_url = self._og_search_video_url(webpage, secure=False)
|
video_url = self._og_search_video_url(webpage, secure=False)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
try_get,
|
try_get,
|
||||||
|
@ -72,7 +73,7 @@ def _real_extract(self, url):
|
||||||
r'(\d+)[pP]\.', format_url, 'height', default=None)
|
r'(\d+)[pP]\.', format_url, 'height', default=None)
|
||||||
formats.append({
|
formats.append({
|
||||||
'url': format_url,
|
'url': format_url,
|
||||||
'format_id': '%sp' % height if height else None,
|
'format_id': format_field(height, template='%sp'),
|
||||||
'height': int(height),
|
'height': int(height),
|
||||||
})
|
})
|
||||||
if not formats:
|
if not formats:
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
clean_html,
|
clean_html,
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
unsmuggle_url,
|
unsmuggle_url,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
|
@ -372,6 +373,6 @@ def sign_url(unsigned_url):
|
||||||
'thumbnail': info.get('thumbnailUrl'),
|
'thumbnail': info.get('thumbnailUrl'),
|
||||||
'duration': info.get('duration'),
|
'duration': info.get('duration'),
|
||||||
'timestamp': info.get('createdAt'),
|
'timestamp': info.get('createdAt'),
|
||||||
'uploader_id': info.get('userId') if info.get('userId') != 'None' else None,
|
'uploader_id': format_field(info, 'userId', ignore=('None', None)),
|
||||||
'view_count': info.get('plays'),
|
'view_count': info.get('plays'),
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
determine_ext,
|
determine_ext,
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
str_to_int,
|
str_to_int,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
|
@ -69,7 +70,7 @@ def extract_format(format_url, height=None):
|
||||||
video_url, title, 32).decode('utf-8')
|
video_url, title, 32).decode('utf-8')
|
||||||
formats.append({
|
formats.append({
|
||||||
'url': format_url,
|
'url': format_url,
|
||||||
'format_id': '%dp' % height if height else None,
|
'format_id': format_field(height, template='%dp'),
|
||||||
'height': height,
|
'height': height,
|
||||||
'tbr': tbr,
|
'tbr': tbr,
|
||||||
})
|
})
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
@ -121,7 +122,7 @@ def _parse_broadcast_item(self, item):
|
||||||
'timestamp': int_or_none(item.get('createdAt')),
|
'timestamp': int_or_none(item.get('createdAt')),
|
||||||
'channel': channel.get('name'),
|
'channel': channel.get('name'),
|
||||||
'channel_id': channel_id,
|
'channel_id': channel_id,
|
||||||
'channel_url': 'https://live.line.me/channels/' + channel_id if channel_id else None,
|
'channel_url': format_field(channel_id, template='https://live.line.me/channels/%s'),
|
||||||
'duration': int_or_none(item.get('archiveDuration')),
|
'duration': int_or_none(item.get('archiveDuration')),
|
||||||
'view_count': int_or_none(item.get('viewerCount')),
|
'view_count': int_or_none(item.get('viewerCount')),
|
||||||
'comment_count': int_or_none(item.get('chatCount')),
|
'comment_count': int_or_none(item.get('chatCount')),
|
||||||
|
|
|
@ -73,14 +73,12 @@ def _real_extract(self, url):
|
||||||
video_id, 'mp4', 'm3u8_native')
|
video_id, 'mp4', 'm3u8_native')
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
poster_image = video_info.get('posterImage')
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'display_id': display_id,
|
'display_id': display_id,
|
||||||
'title': title,
|
'title': title,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'thumbnail': 'https://lnk.lt/all-images/' + poster_image if poster_image else None,
|
'thumbnail': format_field(video_info, 'posterImage', 'https://lnk.lt/all-images/%s'),
|
||||||
'duration': int_or_none(video_info.get('duration')),
|
'duration': int_or_none(video_info.get('duration')),
|
||||||
'description': clean_html(video_info.get('htmlDescription')),
|
'description': clean_html(video_info.get('htmlDescription')),
|
||||||
'age_limit': self._AGE_LIMITS.get(video_info.get('pgRating'), 0),
|
'age_limit': self._AGE_LIMITS.get(video_info.get('pgRating'), 0),
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
@ -118,7 +119,7 @@ def add_item(container, item_url, height, id_key='format_id', item_id=None):
|
||||||
author = try_get(
|
author = try_get(
|
||||||
hydration_data, lambda x: list(x['profiles'].values())[0], dict) or {}
|
hydration_data, lambda x: list(x['profiles'].values())[0], dict) or {}
|
||||||
author_id = str_or_none(author.get('id'))
|
author_id = str_or_none(author.get('id'))
|
||||||
author_url = 'https://medal.tv/users/{0}'.format(author_id) if author_id else None
|
author_url = format_field(author_id, template='https://medal.tv/users/%s')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
clean_html,
|
clean_html,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
|
@ -120,7 +121,7 @@ def _real_extract(self, url):
|
||||||
'timestamp': int_or_none(entity.get('time_created')),
|
'timestamp': int_or_none(entity.get('time_created')),
|
||||||
'uploader': strip_or_none(owner.get('name')),
|
'uploader': strip_or_none(owner.get('name')),
|
||||||
'uploader_id': uploader_id,
|
'uploader_id': uploader_id,
|
||||||
'uploader_url': 'https://www.minds.com/' + uploader_id if uploader_id else None,
|
'uploader_url': format_field(uploader_id, template='https://www.minds.com/%s'),
|
||||||
'view_count': int_or_none(entity.get('play:count')),
|
'view_count': int_or_none(entity.get('play:count')),
|
||||||
'like_count': int_or_none(entity.get('thumbs:up:count')),
|
'like_count': int_or_none(entity.get('thumbs:up:count')),
|
||||||
'dislike_count': int_or_none(entity.get('thumbs:down:count')),
|
'dislike_count': int_or_none(entity.get('thumbs:down:count')),
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_resolution,
|
parse_resolution,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
@ -1386,8 +1387,7 @@ def _extract_playlist(self, host, type, id):
|
||||||
playlist_timestamp = unified_timestamp(info.get('createdAt'))
|
playlist_timestamp = unified_timestamp(info.get('createdAt'))
|
||||||
channel = try_get(info, lambda x: x['ownerAccount']['name']) or info.get('displayName')
|
channel = try_get(info, lambda x: x['ownerAccount']['name']) or info.get('displayName')
|
||||||
channel_id = try_get(info, lambda x: x['ownerAccount']['id']) or info.get('id')
|
channel_id = try_get(info, lambda x: x['ownerAccount']['id']) or info.get('id')
|
||||||
thumbnail = info.get('thumbnailPath')
|
thumbnail = format_field(info, 'thumbnailPath', f'https://{host}%s')
|
||||||
thumbnail = f'https://{host}{thumbnail}' if thumbnail else None
|
|
||||||
|
|
||||||
entries = OnDemandPagedList(functools.partial(
|
entries = OnDemandPagedList(functools.partial(
|
||||||
self.fetch_page, host, id, type), self._PAGE_SIZE)
|
self.fetch_page, host, id, type), self._PAGE_SIZE)
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
clean_html,
|
clean_html,
|
||||||
determine_ext,
|
determine_ext,
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
merge_dicts,
|
merge_dicts,
|
||||||
NO_DEFAULT,
|
NO_DEFAULT,
|
||||||
|
@ -431,7 +432,7 @@ def add_format(format_url, height=None):
|
||||||
default=None))
|
default=None))
|
||||||
formats.append({
|
formats.append({
|
||||||
'url': format_url,
|
'url': format_url,
|
||||||
'format_id': '%dp' % height if height else None,
|
'format_id': format_field(height, template='%dp'),
|
||||||
'height': height,
|
'height': height,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from ..utils import ExtractorError, traverse_obj, try_get, unified_timestamp
|
from ..utils import (
|
||||||
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
|
traverse_obj,
|
||||||
|
try_get,
|
||||||
|
unified_timestamp
|
||||||
|
)
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +80,7 @@ def _real_extract(self, url):
|
||||||
'release_timestamp': release_date,
|
'release_timestamp': release_date,
|
||||||
'channel': channel.get('name'),
|
'channel': channel.get('name'),
|
||||||
'channel_id': channel_id,
|
'channel_id': channel_id,
|
||||||
'channel_url': f'https://rad.live/content/channel/{channel_id}' if channel_id else None,
|
'channel_url': format_field(channel_id, template='https://rad.live/content/channel/%s'),
|
||||||
|
|
||||||
}
|
}
|
||||||
if content_type == 'episode':
|
if content_type == 'episode':
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
# HEADRequest,
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
OnDemandPagedList,
|
OnDemandPagedList,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
|
@ -26,18 +26,6 @@ def _parse_video(self, video):
|
||||||
r'https?://player\.vimeo\.com/external/(\d+)',
|
r'https?://player\.vimeo\.com/external/(\d+)',
|
||||||
video['vimeoVideoURL'], 'vimeo id')
|
video['vimeoVideoURL'], 'vimeo id')
|
||||||
|
|
||||||
# video_url = self._request_webpage(
|
|
||||||
# HEADRequest(video['vimeoVideoURL']), video_id).geturl()
|
|
||||||
# formats = []
|
|
||||||
# for v_url, suffix in [(video_url, '_sep'), (video_url.replace('/sep/video/', '/video/'), '')]:
|
|
||||||
# formats.extend(self._extract_m3u8_formats(
|
|
||||||
# v_url, video_id, 'mp4', 'm3u8_native',
|
|
||||||
# m3u8_id='hls' + suffix, fatal=False))
|
|
||||||
# formats.extend(self._extract_mpd_formats(
|
|
||||||
# v_url.replace('.m3u8', '.mpd'), video_id,
|
|
||||||
# mpd_id='dash' + suffix, fatal=False))
|
|
||||||
# self._sort_formats(formats)
|
|
||||||
|
|
||||||
uploader_id = video.get('hostID')
|
uploader_id = video.get('hostID')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -51,7 +39,6 @@ def _parse_video(self, video):
|
||||||
'Referer': 'https://storyfire.com/',
|
'Referer': 'https://storyfire.com/',
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
# 'formats': formats,
|
|
||||||
'thumbnail': video.get('storyImage'),
|
'thumbnail': video.get('storyImage'),
|
||||||
'view_count': int_or_none(video.get('views')),
|
'view_count': int_or_none(video.get('views')),
|
||||||
'like_count': int_or_none(video.get('likesCount')),
|
'like_count': int_or_none(video.get('likesCount')),
|
||||||
|
@ -60,7 +47,7 @@ def _parse_video(self, video):
|
||||||
'timestamp': int_or_none(video.get('publishDate')),
|
'timestamp': int_or_none(video.get('publishDate')),
|
||||||
'uploader': video.get('username'),
|
'uploader': video.get('username'),
|
||||||
'uploader_id': uploader_id,
|
'uploader_id': uploader_id,
|
||||||
'uploader_url': 'https://storyfire.com/user/%s/video' % uploader_id if uploader_id else None,
|
'uploader_url': format_field(uploader_id, template='https://storyfire.com/user/%s/video'),
|
||||||
'episode_number': int_or_none(video.get('episodeNumber') or video.get('episode_number')),
|
'episode_number': int_or_none(video.get('episodeNumber') or video.get('episode_number')),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
|
@ -28,7 +29,7 @@ def _extract_streamer_info(self, data):
|
||||||
return {
|
return {
|
||||||
'uploader': streamer_info.get('nickName'),
|
'uploader': streamer_info.get('nickName'),
|
||||||
'uploader_id': str_or_none(streamer_info.get('uid')),
|
'uploader_id': str_or_none(streamer_info.get('uid')),
|
||||||
'uploader_url': 'https://trovo.live/' + username if username else None,
|
'uploader_url': format_field(username, template='https://trovo.live/%s'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
dict_get,
|
dict_get,
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
traverse_obj,
|
traverse_obj,
|
||||||
|
@ -469,7 +470,7 @@ def _real_extract(self, url):
|
||||||
'uploader': uploader,
|
'uploader': uploader,
|
||||||
'timestamp': unified_timestamp(status.get('created_at')),
|
'timestamp': unified_timestamp(status.get('created_at')),
|
||||||
'uploader_id': uploader_id,
|
'uploader_id': uploader_id,
|
||||||
'uploader_url': 'https://twitter.com/' + uploader_id if uploader_id else None,
|
'uploader_url': format_field(uploader_id, template='https://twitter.com/%s'),
|
||||||
'like_count': int_or_none(status.get('favorite_count')),
|
'like_count': int_or_none(status.get('favorite_count')),
|
||||||
'repost_count': int_or_none(status.get('retweet_count')),
|
'repost_count': int_or_none(status.get('retweet_count')),
|
||||||
'comment_count': int_or_none(status.get('reply_count')),
|
'comment_count': int_or_none(status.get('reply_count')),
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
clean_html,
|
clean_html,
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
get_element_by_class,
|
get_element_by_class,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
|
@ -160,7 +161,7 @@ def _real_extract(self, url):
|
||||||
'uploader': user.get('name'),
|
'uploader': user.get('name'),
|
||||||
'timestamp': parse_iso8601(video.get('created_at')),
|
'timestamp': parse_iso8601(video.get('created_at')),
|
||||||
'uploader_id': username,
|
'uploader_id': username,
|
||||||
'uploader_url': 'https://www.vidio.com/@' + username if username else None,
|
'uploader_url': format_field(username, template='https://www.vidio.com/@%s'),
|
||||||
'channel': channel.get('name'),
|
'channel': channel.get('name'),
|
||||||
'channel_id': str_or_none(channel.get('id')),
|
'channel_id': str_or_none(channel.get('id')),
|
||||||
'view_count': get_count('view_count'),
|
'view_count': get_count('view_count'),
|
||||||
|
@ -291,5 +292,5 @@ def _real_extract(self, url):
|
||||||
'uploader': user.get('name'),
|
'uploader': user.get('name'),
|
||||||
'timestamp': parse_iso8601(stream_meta.get('start_time')),
|
'timestamp': parse_iso8601(stream_meta.get('start_time')),
|
||||||
'uploader_id': username,
|
'uploader_id': username,
|
||||||
'uploader_url': 'https://www.vidio.com/@' + username if username else None,
|
'uploader_url': format_field(username, template='https://www.vidio.com/@%s'),
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
HEADRequest,
|
HEADRequest,
|
||||||
|
format_field,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
get_element_by_id,
|
get_element_by_id,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
@ -102,7 +103,7 @@ def _real_extract(self, url):
|
||||||
uploader = self._search_regex(
|
uploader = self._search_regex(
|
||||||
r'<div[^>]+class=["\']wt_person[^>]+>\s*<a[^>]+\bhref=["\']/user/[^>]+>([^<]+)',
|
r'<div[^>]+class=["\']wt_person[^>]+>\s*<a[^>]+\bhref=["\']/user/[^>]+>([^<]+)',
|
||||||
webpage, 'uploader', fatal=False)
|
webpage, 'uploader', fatal=False)
|
||||||
uploader_url = 'https://www.vidlii.com/user/%s' % uploader if uploader else None
|
uploader_url = format_field(uploader, template='https://www.vidlii.com/user/%s')
|
||||||
|
|
||||||
upload_date = unified_strdate(self._html_search_meta(
|
upload_date = unified_strdate(self._html_search_meta(
|
||||||
'datePublished', webpage, default=None) or self._search_regex(
|
'datePublished', webpage, default=None) or self._search_regex(
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
determine_ext,
|
determine_ext,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
unified_timestamp,
|
unified_timestamp,
|
||||||
)
|
)
|
||||||
|
@ -92,7 +93,7 @@ def video_url(kind):
|
||||||
|
|
||||||
username = data.get('username')
|
username = data.get('username')
|
||||||
|
|
||||||
alt_title = 'Vine by %s' % username if username else None
|
alt_title = format_field(username, template='Vine by %s')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
from ..compat import compat_str
|
from ..compat import compat_str
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
)
|
)
|
||||||
|
@ -93,7 +94,7 @@ def _extract_moment(item, fatal=True):
|
||||||
|
|
||||||
uploader = try_get(item, lambda x: x['owner']['name'], compat_str)
|
uploader = try_get(item, lambda x: x['owner']['name'], compat_str)
|
||||||
uploader_id = try_get(item, lambda x: x['owner']['userId'])
|
uploader_id = try_get(item, lambda x: x['owner']['userId'])
|
||||||
uploader_url = 'https://www.younow.com/%s' % uploader if uploader else None
|
uploader_url = format_field(uploader, template='https://www.younow.com/%s')
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
'extractor_key': 'YouNowMoment',
|
'extractor_key': 'YouNowMoment',
|
||||||
|
|
|
@ -3331,7 +3331,7 @@ def feed_entry(name):
|
||||||
'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None,
|
'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None,
|
||||||
'uploader_url': owner_profile_url,
|
'uploader_url': owner_profile_url,
|
||||||
'channel_id': channel_id,
|
'channel_id': channel_id,
|
||||||
'channel_url': f'https://www.youtube.com/channel/{channel_id}' if channel_id else None,
|
'channel_url': format_field(channel_id, template='https://www.youtube.com/channel/%s'),
|
||||||
'duration': duration,
|
'duration': duration,
|
||||||
'view_count': int_or_none(
|
'view_count': int_or_none(
|
||||||
get_first((video_details, microformats), (..., 'viewCount'))
|
get_first((video_details, microformats), (..., 'viewCount'))
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import float_or_none, int_or_none
|
from ..utils import format_field, float_or_none, int_or_none
|
||||||
|
|
||||||
|
|
||||||
class ZhihuIE(InfoExtractor):
|
class ZhihuIE(InfoExtractor):
|
||||||
|
@ -61,7 +61,7 @@ def _real_extract(self, url):
|
||||||
'uploader': author.get('name'),
|
'uploader': author.get('name'),
|
||||||
'timestamp': int_or_none(zvideo.get('published_at')),
|
'timestamp': int_or_none(zvideo.get('published_at')),
|
||||||
'uploader_id': author.get('id'),
|
'uploader_id': author.get('id'),
|
||||||
'uploader_url': 'https://www.zhihu.com/people/' + url_token if url_token else None,
|
'uploader_url': format_field(url_token, template='https://www.zhihu.com/people/%s'),
|
||||||
'duration': float_or_none(video.get('duration')),
|
'duration': float_or_none(video.get('duration')),
|
||||||
'view_count': int_or_none(zvideo.get('play_count')),
|
'view_count': int_or_none(zvideo.get('play_count')),
|
||||||
'like_count': int_or_none(zvideo.get('liked_count')),
|
'like_count': int_or_none(zvideo.get('liked_count')),
|
||||||
|
|
|
@ -4975,13 +4975,10 @@ def to_high_limit_path(path):
|
||||||
|
|
||||||
|
|
||||||
def format_field(obj, field=None, template='%s', ignore=(None, ''), default='', func=None):
|
def format_field(obj, field=None, template='%s', ignore=(None, ''), default='', func=None):
|
||||||
if field is None:
|
val = traverse_obj(obj, *variadic(field))
|
||||||
val = obj if obj is not None else default
|
if val in ignore:
|
||||||
else:
|
return default
|
||||||
val = obj.get(field, default)
|
return template % (func(val) if func else val)
|
||||||
if func and val not in ignore:
|
|
||||||
val = func(val)
|
|
||||||
return template % val if val not in ignore else default
|
|
||||||
|
|
||||||
|
|
||||||
def clean_podcast_url(url):
|
def clean_podcast_url(url):
|
||||||
|
|
Loading…
Reference in a new issue