[cleanup] Fix infodict returned fields (#8906)

Authored by: seproDev
pull/9238/head
sepro 9 months ago committed by GitHub
parent dfd8c0b696
commit f4f9f6d00e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1310,6 +1310,8 @@ The available fields are:
- `description` (string): The description of the video
- `display_id` (string): An alternative identifier for the video
- `uploader` (string): Full name of the video uploader
- `uploader_id` (string): Nickname or id of the video uploader
- `uploader_url` (string): URL to the video uploader's profile
- `license` (string): License name the video is licensed under
- `creators` (list): The creators of the video
- `creator` (string): The creators of the video; comma-separated
@ -1320,9 +1322,9 @@ The available fields are:
- `release_year` (numeric): Year (YYYY) when the video or album was released
- `modified_timestamp` (numeric): UNIX timestamp of the moment the video was last modified
- `modified_date` (string): The date (YYYYMMDD) when the video was last modified in UTC
- `uploader_id` (string): Nickname or id of the video uploader
- `channel` (string): Full name of the channel the video is uploaded on
- `channel_id` (string): Id of the channel
- `channel_url` (string): URL of the channel
- `channel_follower_count` (numeric): Number of followers of the channel
- `channel_is_verified` (boolean): Whether the channel is verified on the platform
- `location` (string): Physical location where the video was filmed
@ -1362,7 +1364,10 @@ The available fields are:
- `webpage_url_basename` (string): The basename of the webpage URL
- `webpage_url_domain` (string): The domain of the webpage URL
- `original_url` (string): The URL given by the user (or same as `webpage_url` for playlist entries)
- `categories` (list): List of categories the video belongs to
- `tags` (list): List of tags assigned to the video
- `cast` (list): List of cast members
All the fields in [Filtering Formats](#filtering-formats) can also be used
Available for the video that belongs to some logical chapter or section:
@ -1374,6 +1379,7 @@ Available for the video that belongs to some logical chapter or section:
Available for the video that is an episode of some series or programme:
- `series` (string): Title of the series or programme the video episode belongs to
- `series_id` (string): Id of the series or programme the video episode belongs to
- `season` (string): Title of the season the video episode belongs to
- `season_number` (numeric): Number of the season the video episode belongs to
- `season_id` (string): Id of the season the video episode belongs to

@ -245,7 +245,6 @@ class ABCIViewIE(InfoExtractor):
'episode_id': 'NC2203H039S00',
'season_number': 2022,
'season': 'Season 2022',
'episode_number': None,
'episode': 'Locking Up Kids',
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/nc/NC2203H039S00_636d8a0944a22_1920.jpg',
'timestamp': 1668460497,
@ -271,8 +270,6 @@ class ABCIViewIE(InfoExtractor):
'episode_id': 'RF2004Q043S00',
'season_number': 2021,
'season': 'Season 2021',
'episode_number': None,
'episode': None,
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/rf/RF2004Q043S00_61a950639dbc0_1920.jpg',
'timestamp': 1638710705,

@ -259,7 +259,7 @@ class AbemaTVIE(AbemaTVBaseIE):
'title': 'ゆるキャン△ SEASON 全話一挙【無料ビデオ72時間】',
'series': 'ゆるキャン△ SEASON',
'episode': 'ゆるキャン△ SEASON 全話一挙【無料ビデオ72時間】',
'series_number': 2,
'season_number': 2,
'episode_number': 1,
'description': 'md5:9c5a3172ae763278f9303922f0ea5b17',
},

@ -3,6 +3,7 @@ from ..utils import (
float_or_none,
format_field,
int_or_none,
str_or_none,
traverse_obj,
parse_codecs,
parse_qs,
@ -129,7 +130,7 @@ class AcFunBangumiIE(AcFunVideoBaseIE):
'title': '红孩儿之趴趴蛙寻石记 第5话 ',
'duration': 760.0,
'season': '红孩儿之趴趴蛙寻石记',
'season_id': 5023171,
'season_id': '5023171',
'season_number': 1, # series has only 1 season
'episode': 'Episode 5',
'episode_number': 5,
@ -146,7 +147,7 @@ class AcFunBangumiIE(AcFunVideoBaseIE):
'title': '叽歪老表(第二季) 第5话 坚不可摧',
'season': '叽歪老表(第二季)',
'season_number': 2,
'season_id': 6065485,
'season_id': '6065485',
'episode': '坚不可摧',
'episode_number': 5,
'upload_date': '20220324',
@ -191,7 +192,7 @@ class AcFunBangumiIE(AcFunVideoBaseIE):
'title': json_bangumi_data.get('showTitle'),
'thumbnail': json_bangumi_data.get('image'),
'season': json_bangumi_data.get('bangumiTitle'),
'season_id': season_id,
'season_id': str_or_none(season_id),
'season_number': season_number,
'episode': json_bangumi_data.get('title'),
'episode_number': episode_number,

@ -31,6 +31,7 @@ from ..utils import (
unified_timestamp,
url_or_none,
urlhandle_detect_ext,
variadic,
)
@ -49,7 +50,7 @@ class ArchiveOrgIE(InfoExtractor):
'release_date': '19681210',
'timestamp': 1268695290,
'upload_date': '20100315',
'creator': 'SRI International',
'creators': ['SRI International'],
'uploader': 'laura@archive.org',
'thumbnail': r're:https://archive\.org/download/.*\.jpg',
'display_id': 'XD300-23_68HighlightsAResearchCntAugHumanIntellect.cdr',
@ -109,7 +110,7 @@ class ArchiveOrgIE(InfoExtractor):
'title': 'Turning',
'ext': 'flac',
'track': 'Turning',
'creator': 'Grateful Dead',
'creators': ['Grateful Dead'],
'display_id': 'gd1977-05-08d01t01.flac',
'track_number': 1,
'album': '1977-05-08 - Barton Hall - Cornell University',
@ -129,7 +130,7 @@ class ArchiveOrgIE(InfoExtractor):
'location': 'Barton Hall - Cornell University',
'duration': 438.68,
'track': 'Deal',
'creator': 'Grateful Dead',
'creators': ['Grateful Dead'],
'album': '1977-05-08 - Barton Hall - Cornell University',
'release_date': '19770508',
'display_id': 'gd1977-05-08d01t07.flac',
@ -167,7 +168,7 @@ class ArchiveOrgIE(InfoExtractor):
'upload_date': '20160610',
'description': 'md5:f70956a156645a658a0dc9513d9e78b7',
'uploader': 'dimitrios@archive.org',
'creator': ['British Broadcasting Corporation', 'Time-Life Films'],
'creators': ['British Broadcasting Corporation', 'Time-Life Films'],
'timestamp': 1465594947,
},
'playlist': [
@ -257,7 +258,7 @@ class ArchiveOrgIE(InfoExtractor):
'title': m['title'],
'description': clean_html(m.get('description')),
'uploader': dict_get(m, ['uploader', 'adder']),
'creator': m.get('creator'),
'creators': traverse_obj(m, ('creator', {variadic}, {lambda x: x[0] and list(x)})),
'license': m.get('licenseurl'),
'release_date': unified_strdate(m.get('date')),
'timestamp': unified_timestamp(dict_get(m, ['publicdate', 'addeddate'])),
@ -272,7 +273,7 @@ class ArchiveOrgIE(InfoExtractor):
'title': f.get('title') or f['name'],
'display_id': f['name'],
'description': clean_html(f.get('description')),
'creator': f.get('creator'),
'creators': traverse_obj(f, ('creator', {variadic}, {lambda x: x[0] and list(x)})),
'duration': parse_duration(f.get('length')),
'track_number': int_or_none(f.get('track')),
'album': f.get('album'),

@ -24,7 +24,8 @@ class AxsIE(InfoExtractor):
'timestamp': 1685729564,
'duration': 1284.216,
'series': 'Rock & Roll Road Trip with Sammy Hagar',
'season': 2,
'season': 'Season 2',
'season_number': 2,
'episode': '3',
'thumbnail': 'https://images.dotstudiopro.com/5f4e9d330a0c3b295a7e8394',
},
@ -41,7 +42,8 @@ class AxsIE(InfoExtractor):
'timestamp': 1676403615,
'duration': 2570.668,
'series': 'The Big Interview with Dan Rather',
'season': 3,
'season': 'Season 3',
'season_number': 3,
'episode': '5',
'thumbnail': 'https://images.dotstudiopro.com/5f4d1901f340b50d937cec32',
},
@ -77,7 +79,7 @@ class AxsIE(InfoExtractor):
'title': ('title', {str}),
'description': ('description', {str}),
'series': ('seriestitle', {str}),
'season': ('season', {int}),
'season_number': ('season', {int}),
'episode': ('episode', {str}),
'duration': ('duration', {float_or_none}),
'timestamp': ('updated_at', {parse_iso8601}),

@ -2,6 +2,7 @@ from .common import InfoExtractor
from ..utils import (
int_or_none,
str_or_none,
traverse_obj,
try_get,
unified_timestamp,
@ -22,7 +23,7 @@ class BeegIE(InfoExtractor):
'age_limit': 18,
'upload_date': '20220131',
'timestamp': 1643656455,
'display_id': 2540839,
'display_id': '2540839',
}
}, {
'url': 'https://beeg.com/-0599050563103750?t=4-861',
@ -36,7 +37,7 @@ class BeegIE(InfoExtractor):
'age_limit': 18,
'description': 'md5:b4fc879a58ae6c604f8f259155b7e3b9',
'timestamp': 1643623200,
'display_id': 2569965,
'display_id': '2569965',
'upload_date': '20220131',
}
}, {
@ -78,7 +79,7 @@ class BeegIE(InfoExtractor):
return {
'id': video_id,
'display_id': first_fact.get('id'),
'display_id': str_or_none(first_fact.get('id')),
'title': traverse_obj(video, ('file', 'stuff', 'sf_name')),
'description': traverse_obj(video, ('file', 'stuff', 'sf_story')),
'timestamp': unified_timestamp(first_fact.get('fc_created')),

@ -32,7 +32,7 @@ class BellMediaIE(InfoExtractor):
'description': 'md5:810f7f8c6a83ad5b48677c3f8e5bb2c3',
'upload_date': '20180525',
'timestamp': 1527288600,
'season_id': 73997,
'season_id': '73997',
'season': '2018',
'thumbnail': 'http://images2.9c9media.com/image_asset/2018_5_25_baf30cbd-b28d-4a18-9903-4bb8713b00f5_PNG_956x536.jpg',
'tags': [],

@ -93,7 +93,6 @@ class BFMTVArticleIE(BFMTVBaseIE):
'id': '6318445464112',
'ext': 'mp4',
'title': 'Le plein de bioéthanol fait de plus en plus mal à la pompe',
'description': None,
'uploader_id': '876630703001',
'upload_date': '20230110',
'timestamp': 1673341692,

@ -185,7 +185,6 @@ class BitChuteChannelIE(InfoExtractor):
'info_dict': {
'id': 'UGlrF9o9b-Q',
'ext': 'mp4',
'filesize': None,
'title': 'This is the first video on #BitChute !',
'description': 'md5:a0337e7b1fe39e32336974af8173a034',
'thumbnail': r're:^https?://.*\.jpg$',

@ -4,6 +4,7 @@ from ..utils import (
ExtractorError,
int_or_none,
parse_iso8601,
str_or_none,
)
@ -16,7 +17,7 @@ class BleacherReportIE(InfoExtractor):
'id': '2496438',
'ext': 'mp4',
'title': 'FSU Stat Projections: Is Jalen Ramsey Best Defensive Player in College Football?',
'uploader_id': 3992341,
'uploader_id': '3992341',
'description': 'CFB, ACC, Florida State',
'timestamp': 1434380212,
'upload_date': '20150615',
@ -33,7 +34,7 @@ class BleacherReportIE(InfoExtractor):
'timestamp': 1446839961,
'uploader': 'Sean Fay',
'description': 'md5:b1601e2314c4d8eec23b6eafe086a757',
'uploader_id': 6466954,
'uploader_id': '6466954',
'upload_date': '20151011',
},
'add_ie': ['Youtube'],
@ -58,7 +59,7 @@ class BleacherReportIE(InfoExtractor):
'id': article_id,
'title': article_data['title'],
'uploader': article_data.get('author', {}).get('name'),
'uploader_id': article_data.get('authorId'),
'uploader_id': str_or_none(article_data.get('authorId')),
'timestamp': parse_iso8601(article_data.get('createdAt')),
'thumbnails': thumbnails,
'comment_count': int_or_none(article_data.get('commentsCount')),

@ -51,7 +51,7 @@ class CeskaTelevizeIE(InfoExtractor):
'url': 'http://www.ceskatelevize.cz/ivysilani/zive/ct4/',
'only_matching': True,
'info_dict': {
'id': 402,
'id': '402',
'ext': 'mp4',
'title': r're:^ČT Sport \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
'is_live': True,

@ -17,6 +17,7 @@ class CGTNIE(InfoExtractor):
'thumbnail': r're:^https?://.*\.jpg$',
'timestamp': 1615295940,
'upload_date': '20210309',
'categories': ['Video'],
},
'params': {
'skip_download': True
@ -29,8 +30,8 @@ class CGTNIE(InfoExtractor):
'title': 'China, Indonesia vow to further deepen maritime cooperation',
'thumbnail': r're:^https?://.*\.png$',
'description': 'China and Indonesia vowed to upgrade their cooperation into the maritime sector and also for political security, economy, and cultural and people-to-people exchanges.',
'author': 'CGTN',
'category': 'China',
'creators': ['CGTN'],
'categories': ['China'],
'timestamp': 1622950200,
'upload_date': '20210606',
},
@ -45,7 +46,12 @@ class CGTNIE(InfoExtractor):
webpage = self._download_webpage(url, video_id)
download_url = self._html_search_regex(r'data-video ="(?P<url>.+m3u8)"', webpage, 'download_url')
datetime_str = self._html_search_regex(r'<span class="date">\s*(.+?)\s*</span>', webpage, 'datetime_str', fatal=False)
datetime_str = self._html_search_regex(
r'<span class="date">\s*(.+?)\s*</span>', webpage, 'datetime_str', fatal=False)
category = self._html_search_regex(
r'<span class="section">\s*(.+?)\s*</span>', webpage, 'category', fatal=False)
author = self._search_regex(
r'<div class="news-author-name">\s*(.+?)\s*</div>', webpage, 'author', default=None)
return {
'id': video_id,
@ -53,9 +59,7 @@ class CGTNIE(InfoExtractor):
'description': self._og_search_description(webpage, default=None),
'thumbnail': self._og_search_thumbnail(webpage),
'formats': self._extract_m3u8_formats(download_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls'),
'category': self._html_search_regex(r'<span class="section">\s*(.+?)\s*</span>',
webpage, 'category', fatal=False),
'author': self._html_search_regex(r'<div class="news-author-name">\s*(.+?)\s*</div>',
webpage, 'author', default=None, fatal=False),
'categories': [category] if category else None,
'creators': [author] if author else None,
'timestamp': try_get(unified_timestamp(datetime_str), lambda x: x - 8 * 3600),
}

@ -84,8 +84,6 @@ class ChingariIE(ChingariBaseIE):
'uploader_id': '5f0403982c8bd344f4813f8c',
'uploader': 'ISKCON,Inc.',
'uploader_url': 'https://chingari.io/iskcon,inc',
'track': None,
'artist': None,
},
'params': {'skip_download': True}
}]
@ -125,8 +123,6 @@ class ChingariUserIE(ChingariBaseIE):
'uploader_id': '5efc4b12cca35c3d1794c2d3',
'uploader': 'dada (girish) dhawale',
'uploader_url': 'https://chingari.io/dada1023',
'track': None,
'artist': None
},
'params': {'skip_download': True}
}, {
@ -147,8 +143,6 @@ class ChingariUserIE(ChingariBaseIE):
'uploader_id': '5efc4b12cca35c3d1794c2d3',
'uploader': 'dada (girish) dhawale',
'uploader_url': 'https://chingari.io/dada1023',
'track': None,
'artist': None
},
'params': {'skip_download': True}
}, {
@ -169,8 +163,6 @@ class ChingariUserIE(ChingariBaseIE):
'uploader_id': '5efc4b12cca35c3d1794c2d3',
'uploader': 'dada (girish) dhawale',
'uploader_url': 'https://chingari.io/dada1023',
'track': None,
'artist': None
},
'params': {'skip_download': True}
}],

@ -21,7 +21,7 @@ class CNBCVideoIE(InfoExtractor):
'modified_date': '20231208',
'release_date': '20231207',
'duration': 65,
'author': 'Sean Conlon',
'creators': ['Sean Conlon'],
'title': 'Here\'s a first look at McDonald\'s new spinoff brand, CosMc\'s',
'thumbnail': 'https://image.cnbcfm.com/api/v1/image/107344192-1701894812493-CosMcsskyHero_2336x1040_hero-desktop.jpg?v=1701894855',
},
@ -29,7 +29,7 @@ class CNBCVideoIE(InfoExtractor):
}, {
'url': 'https://www.cnbc.com/video/2023/12/08/jim-cramer-shares-his-take-on-seattles-tech-scene.html',
'info_dict': {
'author': 'Jim Cramer',
'creators': ['Jim Cramer'],
'channel': 'Mad Money with Jim Cramer',
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
'duration': 299.0,
@ -49,7 +49,7 @@ class CNBCVideoIE(InfoExtractor):
}, {
'url': 'https://www.cnbc.com/video/2023/12/08/the-epicenter-of-ai-is-in-seattle-says-jim-cramer.html',
'info_dict': {
'author': 'Jim Cramer',
'creators': ['Jim Cramer'],
'channel': 'Mad Money with Jim Cramer',
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
'duration': 113.0,
@ -86,12 +86,12 @@ class CNBCVideoIE(InfoExtractor):
'id': ('id', {str_or_none}),
'title': ('title', {str}),
'description': ('description', {str}),
'author': ('author', ..., 'name', {str}),
'creators': ('author', ..., 'name', {str}),
'timestamp': ('datePublished', {parse_iso8601}),
'release_timestamp': ('uploadDate', {parse_iso8601}),
'modified_timestamp': ('dateLastPublished', {parse_iso8601}),
'thumbnail': ('thumbnail', {url_or_none}),
'duration': ('duration', {int_or_none}),
'channel': ('section', 'title', {str}),
}, get_all=False),
}),
}

@ -262,7 +262,7 @@ class InfoExtractor:
direct: True if a direct video file was given (must only be set by GenericIE)
alt_title: A secondary title of the video.
display_id An alternative identifier for the video, not necessarily
display_id: An alternative identifier for the video, not necessarily
unique, but available before title. Typically, id is
something like "4234987", title "Dancing naked mole rats",
and display_id "dancing-naked-mole-rats"

@ -65,7 +65,7 @@ class CPACIE(InfoExtractor):
'title': title,
'description': str_or_none(content['details'].get('description_%s_t' % (url_lang, ))),
'timestamp': unified_timestamp(content['details'].get('liveDateTime')),
'category': [category] if category else None,
'categories': [category] if category else None,
'thumbnail': urljoin(url, str_or_none(content['details'].get('image_%s_s' % (url_lang, )))),
'is_live': is_live(content['details'].get('type')),
}

@ -514,7 +514,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
'track': 'Egaono Hana',
'artist': 'Goose house',
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
'genre': ['J-Pop'],
'genres': ['J-Pop'],
},
'params': {'skip_download': 'm3u8'},
}, {
@ -527,7 +527,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
'track': 'Crossing Field',
'artist': 'LiSA',
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
'genre': ['Anime'],
'genres': ['Anime'],
},
'params': {'skip_download': 'm3u8'},
}, {
@ -541,7 +541,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
'artist': 'LiSA',
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
'description': 'md5:747444e7e6300907b7a43f0a0503072e',
'genre': ['J-Pop'],
'genres': ['J-Pop'],
},
'params': {'skip_download': 'm3u8'},
}, {
@ -594,7 +594,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
'width': ('width', {int_or_none}),
'height': ('height', {int_or_none}),
}),
'genre': ('genres', ..., 'displayValue'),
'genres': ('genres', ..., 'displayValue'),
'age_limit': ('maturity_ratings', -1, {parse_age_limit}),
}),
}
@ -611,7 +611,7 @@ class CrunchyrollArtistIE(CrunchyrollBaseIE):
'info_dict': {
'id': 'MA179CB50D',
'title': 'LiSA',
'genre': ['J-Pop', 'Anime', 'Rock'],
'genres': ['J-Pop', 'Anime', 'Rock'],
'description': 'md5:16d87de61a55c3f7d6c454b73285938e',
},
'playlist_mincount': 83,
@ -645,6 +645,6 @@ class CrunchyrollArtistIE(CrunchyrollBaseIE):
'width': ('width', {int_or_none}),
'height': ('height', {int_or_none}),
}),
'genre': ('genres', ..., 'displayValue'),
'genres': ('genres', ..., 'displayValue'),
}),
}

@ -114,7 +114,7 @@ class CybraryCourseIE(CybraryBaseIE):
_TESTS = [{
'url': 'https://app.cybrary.it/browse/course/az-500-microsoft-azure-security-technologies',
'info_dict': {
'id': 898,
'id': '898',
'title': 'AZ-500: Microsoft Azure Security Technologies',
'description': 'md5:69549d379c0fc1dec92926d4e8b6fbd4'
},
@ -122,7 +122,7 @@ class CybraryCourseIE(CybraryBaseIE):
}, {
'url': 'https://app.cybrary.it/browse/course/cybrary-orientation',
'info_dict': {
'id': 1245,
'id': '1245',
'title': 'Cybrary Orientation',
'description': 'md5:9e69ff66b32fe78744e0ad4babe2e88e'
},

@ -83,7 +83,6 @@ class DamtomoRecordIE(DamtomoBaseIE):
'info_dict': {
'id': '27376862',
'title': 'イカSUMMER [良音]',
'description': None,
'uploader': '',
'uploader_id': 'MzAyMDExNTY',
'upload_date': '20210721',

@ -27,7 +27,7 @@ class DaumIE(DaumBaseIE):
'duration': 2117,
'view_count': int,
'comment_count': int,
'uploader_id': 186139,
'uploader_id': '186139',
'uploader': '콘간지',
'timestamp': 1387310323,
},
@ -44,7 +44,7 @@ class DaumIE(DaumBaseIE):
'view_count': int,
'comment_count': int,
'uploader': 'MBC 예능',
'uploader_id': 132251,
'uploader_id': '132251',
'timestamp': 1421604228,
},
}, {
@ -63,7 +63,7 @@ class DaumIE(DaumBaseIE):
'view_count': int,
'comment_count': int,
'uploader': '까칠한 墮落始祖 황비홍님의',
'uploader_id': 560824,
'uploader_id': '560824',
'timestamp': 1203770745,
},
}, {
@ -77,7 +77,7 @@ class DaumIE(DaumBaseIE):
'description': '러블리즈 - Destiny (나의 지구) (Lovelyz - Destiny)\r\n\r\n[쇼! 음악중심] 20160611, 507회',
'upload_date': '20170129',
'uploader': '쇼! 음악중심',
'uploader_id': 2653210,
'uploader_id': '2653210',
'timestamp': 1485684628,
},
}]
@ -107,7 +107,7 @@ class DaumClipIE(DaumBaseIE):
'duration': 3868,
'view_count': int,
'uploader': 'GOMeXP',
'uploader_id': 6667,
'uploader_id': '6667',
'timestamp': 1377911092,
},
}, {

@ -32,7 +32,7 @@ class DuoplayIE(InfoExtractor):
'season_number': 2,
'episode': 'Operatsioon "Öö"',
'episode_number': 12,
'episode_id': 24,
'episode_id': '24',
},
}, {
'note': 'Empty title',
@ -50,7 +50,7 @@ class DuoplayIE(InfoExtractor):
'series_id': '17',
'season': 'Season 2',
'season_number': 2,
'episode_id': 14,
'episode_id': '14',
'release_year': 2010,
},
}, {
@ -99,6 +99,6 @@ class DuoplayIE(InfoExtractor):
'season_number': ('season_id', {int_or_none}),
'episode': 'subtitle',
'episode_number': ('episode_nr', {int_or_none}),
'episode_id': ('episode_id', {int_or_none}),
'episode_id': ('episode_id', {str_or_none}),
}, get_all=False) if episode_attr.get('category') != 'movies' else {}),
}

@ -42,7 +42,6 @@ class EplusIbIE(InfoExtractor):
'live_status': 'was_live',
'release_date': '20210719',
'release_timestamp': 1626703200,
'description': None,
},
'params': {
'skip_download': True,

@ -301,7 +301,7 @@ class FunimationShowIE(FunimationBaseIE):
_TESTS = [{
'url': 'https://www.funimation.com/en/shows/sk8-the-infinity',
'info_dict': {
'id': 1315000,
'id': '1315000',
'title': 'SK8 the Infinity'
},
'playlist_count': 13,
@ -312,7 +312,7 @@ class FunimationShowIE(FunimationBaseIE):
# without lang code
'url': 'https://www.funimation.com/shows/ouran-high-school-host-club/',
'info_dict': {
'id': 39643,
'id': '39643',
'title': 'Ouran High School Host Club'
},
'playlist_count': 26,
@ -339,7 +339,7 @@ class FunimationShowIE(FunimationBaseIE):
return {
'_type': 'playlist',
'id': show_info['id'],
'id': str_or_none(show_info['id']),
'title': show_info['name'],
'entries': orderedSet(
self.url_result(

@ -19,7 +19,6 @@ class GabTVIE(InfoExtractor):
'id': '61217eacea5665de450d0488',
'ext': 'mp4',
'title': 'WHY WAS AMERICA IN AFGHANISTAN - AMERICA FIRST AGAINST AMERICAN OLIGARCHY',
'description': None,
'uploader': 'Wurzelroot',
'uploader_id': '608fb0a85738fd1974984f7d',
'thumbnail': 'https://tv.gab.com/image/61217eacea5665de450d0488',

@ -267,9 +267,9 @@ class GameJoltIE(GameJoltBaseIE):
'id': 'dszyjnwi',
'ext': 'webm',
'title': 'gif-presentacion-mejorado-dszyjnwi',
'n_entries': 1,
}
}]
}],
'playlist_count': 1,
}, {
# Multiple GIFs
'url': 'https://gamejolt.com/p/gif-yhsqkumq',
@ -374,7 +374,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
'info_dict': {
'id': '657899',
'title': 'Friday Night Funkin\': Vs Oswald',
'n_entries': None,
},
'playlist': [{
'info_dict': {
@ -384,7 +383,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
'url': r're:^https://.+vs-oswald-menu-music\.mp3$',
'release_timestamp': 1635190816,
'release_date': '20211025',
'n_entries': 3,
}
}, {
'info_dict': {
@ -394,7 +392,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
'url': r're:^https://.+rabbit-s-luck--full-version-\.mp3$',
'release_timestamp': 1635190841,
'release_date': '20211025',
'n_entries': 3,
}
}, {
'info_dict': {
@ -404,9 +401,9 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
'url': r're:^https://.+last-straw\.mp3$',
'release_timestamp': 1635881104,
'release_date': '20211102',
'n_entries': 3,
}
}]
}],
'playlist_count': 3,
}]
def _real_extract(self, url):

@ -21,7 +21,6 @@ class GaskrankIE(InfoExtractor):
'display_id': 'strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden',
'uploader_id': 'Bikefun',
'upload_date': '20170110',
'uploader_url': None,
}
}, {
'url': 'http://www.gaskrank.tv/tv/racing/isle-of-man-tt-2011-michael-du-15920.htm',

@ -115,11 +115,11 @@ class HotStarIE(HotStarBaseIE):
'upload_date': '20190501',
'duration': 1219,
'channel': 'StarPlus',
'channel_id': 3,
'channel_id': '3',
'series': 'Ek Bhram - Sarvagun Sampanna',
'season': 'Chapter 1',
'season_number': 1,
'season_id': 6771,
'season_id': '6771',
'episode': 'Janhvi Targets Suman',
'episode_number': 8,
}
@ -135,12 +135,12 @@ class HotStarIE(HotStarBaseIE):
'channel': 'StarPlus',
'series': 'Anupama',
'season_number': 1,
'season_id': 7399,
'season_id': '7399',
'upload_date': '20230307',
'episode': 'Anupama, Anuj Share a Moment',
'episode_number': 853,
'duration': 1272,
'channel_id': 3,
'channel_id': '3',
},
'skip': 'HTTP Error 504: Gateway Time-out', # XXX: Investigate 504 errors on some episodes
}, {
@ -155,12 +155,12 @@ class HotStarIE(HotStarBaseIE):
'channel': 'Hotstar Specials',
'series': 'Kana Kaanum Kaalangal',
'season_number': 1,
'season_id': 9441,
'season_id': '9441',
'upload_date': '20220421',
'episode': 'Back To School',
'episode_number': 1,
'duration': 1810,
'channel_id': 54,
'channel_id': '54',
},
}, {
'url': 'https://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286',
@ -325,11 +325,11 @@ class HotStarIE(HotStarBaseIE):
'formats': formats,
'subtitles': subs,
'channel': video_data.get('channelName'),
'channel_id': video_data.get('channelId'),
'channel_id': str_or_none(video_data.get('channelId')),
'series': video_data.get('showName'),
'season': video_data.get('seasonName'),
'season_number': int_or_none(video_data.get('seasonNo')),
'season_id': video_data.get('seasonId'),
'season_id': str_or_none(video_data.get('seasonId')),
'episode': video_data.get('title'),
'episode_number': int_or_none(video_data.get('episodeNo')),
}

@ -114,7 +114,6 @@ class HungamaSongIE(InfoExtractor):
'title': 'Lucky Ali - Kitni Haseen Zindagi',
'track': 'Kitni Haseen Zindagi',
'artist': 'Lucky Ali',
'album': None,
'release_year': 2000,
'thumbnail': 'https://stat2.hungama.ind.in/assets/images/default_images/da-200x200.png',
},

@ -9,7 +9,7 @@ class MonsterSirenHypergryphMusicIE(InfoExtractor):
'info_dict': {
'id': '514562',
'ext': 'wav',
'artist': ['塞壬唱片-MSR'],
'artists': ['塞壬唱片-MSR'],
'album': 'Flame Shadow',
'title': 'Flame Shadow',
}
@ -27,6 +27,6 @@ class MonsterSirenHypergryphMusicIE(InfoExtractor):
'url': traverse_obj(json_data, ('player', 'songDetail', 'sourceUrl')),
'ext': 'wav',
'vcodec': 'none',
'artist': traverse_obj(json_data, ('player', 'songDetail', 'artists')),
'artists': traverse_obj(json_data, ('player', 'songDetail', 'artists', ...)),
'album': traverse_obj(json_data, ('musicPlay', 'albumDetail', 'name'))
}

@ -231,7 +231,6 @@ class LBRYIE(LBRYBaseIE):
'release_timestamp': int,
'release_date': str,
'tags': list,
'duration': None,
'channel': 'RT',
'channel_id': 'fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',
'channel_url': 'https://odysee.com/@RT:fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',

@ -22,8 +22,6 @@ class LikeeIE(InfoExtractor):
'description': 'md5:9a7ebe816f0e78722ee5ed76f75983b4',
'thumbnail': r're:^https?://.+\.jpg',
'uploader': 'Huỳnh Hồng Qu&acirc;n ',
'play_count': int,
'download_count': int,
'artist': 'Huỳnh Hồng Qu&acirc;n ',
'timestamp': 1651571320,
'upload_date': '20220503',
@ -44,11 +42,9 @@ class LikeeIE(InfoExtractor):
'comment_count': int,
'like_count': int,
'uploader': 'Vương Phước Nhi',
'download_count': int,
'timestamp': 1651506835,
'upload_date': '20220502',
'duration': 60024,
'play_count': int,
'artist': 'Vương Phước Nhi',
'uploader_id': '649222262',
'view_count': int,
@ -65,9 +61,7 @@ class LikeeIE(InfoExtractor):
'duration': 9684,
'uploader_id': 'fernanda_rivasg',
'view_count': int,
'play_count': int,
'artist': 'La Cami La✨',
'download_count': int,
'like_count': int,
'uploader': 'Fernanda Rivas🎶',
'timestamp': 1614034308,
@ -83,13 +77,11 @@ class LikeeIE(InfoExtractor):
'thumbnail': r're:^https?://.+\.jpg',
'comment_count': int,
'duration': 18014,
'play_count': int,
'view_count': int,
'timestamp': 1611694774,
'like_count': int,
'uploader': 'Fernanda Rivas🎶',
'uploader_id': 'fernanda_rivasg',
'download_count': int,
'artist': 'ʟᴇʀɪᴋ_ɴɪʀɴ♡',
'upload_date': '20210126',
},
@ -128,8 +120,6 @@ class LikeeIE(InfoExtractor):
'description': info.get('share_desc'),
'view_count': int_or_none(info.get('video_count')),
'like_count': int_or_none(info.get('likeCount')),
'play_count': int_or_none(info.get('play_count')),
'download_count': int_or_none(info.get('download_count')),
'comment_count': int_or_none(info.get('comment_count')),
'uploader': str_or_none(info.get('nick_name')),
'uploader_id': str_or_none(info.get('likeeId')),

@ -8,15 +8,15 @@ class MegaphoneIE(InfoExtractor):
_VALID_URL = r'https://player\.megaphone\.fm/(?P<id>[A-Z0-9]+)'
_EMBED_REGEX = [rf'<iframe[^>]*?\ssrc=["\'](?P<url>{_VALID_URL})']
_TEST = {
'url': 'https://player.megaphone.fm/GLT9749789991?"',
'url': 'https://player.megaphone.fm/GLT9749789991',
'md5': '4816a0de523eb3e972dc0dda2c191f96',
'info_dict': {
'id': 'GLT9749789991',
'ext': 'mp3',
'title': '#97 What Kind Of Idiot Gets Phished?',
'thumbnail': r're:^https://.*\.png.*$',
'duration': 1776.26375,
'author': 'Reply All',
'duration': 1998.36,
'creators': ['Reply All'],
},
}
@ -40,7 +40,7 @@ class MegaphoneIE(InfoExtractor):
'id': video_id,
'thumbnail': thumbnail,
'title': title,
'author': author,
'creators': [author] if author else None,
'duration': episode_data['duration'],
'formats': formats,
}

@ -17,11 +17,11 @@ class MusicdexBaseIE(InfoExtractor):
'track_number': track_json.get('number'),
'url': format_field(track_json, 'url', 'https://www.musicdex.org/%s'),
'duration': track_json.get('duration'),
'genre': [genre.get('name') for genre in track_json.get('genres') or []],
'genres': [genre.get('name') for genre in track_json.get('genres') or []],
'like_count': track_json.get('likes_count'),
'view_count': track_json.get('plays'),
'artist': [artist.get('name') for artist in track_json.get('artists') or []],
'album_artist': [artist.get('name') for artist in album_json.get('artists') or []],
'artists': [artist.get('name') for artist in track_json.get('artists') or []],
'album_artists': [artist.get('name') for artist in album_json.get('artists') or []],
'thumbnail': format_field(album_json, 'image', 'https://www.musicdex.org/%s'),
'album': album_json.get('name'),
'release_year': try_get(album_json, lambda x: date_from_str(unified_strdate(x['release_date'])).year),
@ -43,11 +43,11 @@ class MusicdexSongIE(MusicdexBaseIE):
'track': 'dual existence',
'track_number': 1,
'duration': 266000,
'genre': ['Anime'],
'genres': ['Anime'],
'like_count': int,
'view_count': int,
'artist': ['fripSide'],
'album_artist': ['fripSide'],
'artists': ['fripSide'],
'album_artists': ['fripSide'],
'thumbnail': 'https://www.musicdex.org/storage/album/9iDIam1DHTVqUG4UclFIEq1WAFGXfPW4y0TtZa91.png',
'album': 'To Aru Kagaku no Railgun T OP2 Single - dual existence',
'release_year': 2020
@ -69,9 +69,9 @@ class MusicdexAlbumIE(MusicdexBaseIE):
'playlist_mincount': 28,
'info_dict': {
'id': '56',
'genre': ['OST'],
'genres': ['OST'],
'view_count': int,
'artist': ['TENMON & Eiichiro Yanagi / minori'],
'artists': ['TENMON & Eiichiro Yanagi / minori'],
'title': 'ef - a tale of memories Original Soundtrack 2 ~fortissimo~',
'release_year': 2008,
'thumbnail': 'https://www.musicdex.org/storage/album/2rSHkyYBYfB7sbvElpEyTMcUn6toY7AohOgJuDlE.jpg',
@ -88,9 +88,9 @@ class MusicdexAlbumIE(MusicdexBaseIE):
'id': id,
'title': data_json.get('name'),
'description': data_json.get('description'),
'genre': [genre.get('name') for genre in data_json.get('genres') or []],
'genres': [genre.get('name') for genre in data_json.get('genres') or []],
'view_count': data_json.get('plays'),
'artist': [artist.get('name') for artist in data_json.get('artists') or []],
'artists': [artist.get('name') for artist in data_json.get('artists') or []],
'thumbnail': format_field(data_json, 'image', 'https://www.musicdex.org/%s'),
'release_year': try_get(data_json, lambda x: date_from_str(unified_strdate(x['release_date'])).year),
'entries': entries,

@ -118,7 +118,6 @@ class NekoHackerIE(InfoExtractor):
'artist': 'Neko Hacker',
'track': 'md5:1a5fcbc96ca3c3265b1c6f9f79f30fd0',
'track_number': 1,
'duration': None
}
},
{
@ -136,7 +135,6 @@ class NekoHackerIE(InfoExtractor):
'artist': 'Neko Hacker',
'track': 'むじな de なじむ feat. 六科なじむ (CV: 日高里菜 )',
'track_number': 2,
'duration': None
}
},
{
@ -154,7 +152,6 @@ class NekoHackerIE(InfoExtractor):
'artist': 'Neko Hacker',
'track': '進め!むじなカンパニー (instrumental)',
'track_number': 3,
'duration': None
}
},
{
@ -172,7 +169,6 @@ class NekoHackerIE(InfoExtractor):
'artist': 'Neko Hacker',
'track': 'むじな de なじむ (instrumental)',
'track_number': 4,
'duration': None
}
}
]

@ -163,8 +163,6 @@ class NiconicoIE(InfoExtractor):
'description': 'md5:15df8988e47a86f9e978af2064bf6d8e',
'timestamp': 1341128008,
'upload_date': '20120701',
'uploader': None,
'uploader_id': None,
'thumbnail': r're:https?://.*',
'duration': 5271,
'view_count': int,

@ -3,6 +3,7 @@ from ..utils import (
float_or_none,
int_or_none,
parse_iso8601,
str_or_none,
try_get,
)
@ -73,7 +74,7 @@ class NineCNineMediaIE(InfoExtractor):
'episode_number': int_or_none(content.get('Episode')),
'season': season.get('Name'),
'season_number': int_or_none(season.get('Number')),
'season_id': season.get('Id'),
'season_id': str_or_none(season.get('Id')),
'series': try_get(content, lambda x: x['Media']['Name']),
'tags': tags,
'categories': categories,
@ -109,10 +110,9 @@ class CPTwentyFourIE(InfoExtractor):
'title': 'WATCH: Truck rips ATM from Mississauga business',
'description': 'md5:cf7498480885f080a754389a2b2f7073',
'timestamp': 1637618377,
'episode_number': None,
'season': 'Season 0',
'season_number': 0,
'season_id': 57974,
'season_id': '57974',
'series': 'CTV News Toronto',
'duration': 26.86,
'thumbnail': 'http://images2.9c9media.com/image_asset/2014_11_5_2eb609a0-475b-0132-fbd6-34b52f6f1279_jpg_2000x1125.jpg',

@ -18,7 +18,6 @@ class NovaPlayIE(InfoExtractor):
'upload_date': '20220722',
'thumbnail': 'https://nbg-img.fite.tv/img/606627_460x260.jpg',
'description': '29 сек',
'view_count': False
},
},
{
@ -34,7 +33,6 @@ class NovaPlayIE(InfoExtractor):
'upload_date': '20220722',
'thumbnail': 'https://nbg-img.fite.tv/img/606609_460x260.jpg',
'description': '29 сек',
'view_count': False
},
}
]

@ -11,6 +11,7 @@ from ..utils import (
join_nonempty,
parse_age_limit,
parse_qs,
str_or_none,
unified_strdate,
url_or_none,
)
@ -32,7 +33,7 @@ class OnDemandKoreaIE(InfoExtractor):
'duration': 5486.955,
'release_date': '20220924',
'series': 'Ask Us Anything',
'series_id': 11790,
'series_id': '11790',
'episode_number': 351,
'episode': 'Jung Sung-ho, Park Seul-gi, Kim Bo-min, Yang Seung-won',
},
@ -47,7 +48,7 @@ class OnDemandKoreaIE(InfoExtractor):
'duration': 1586.0,
'release_date': '20231001',
'series': 'Breakup Probation, A Week',
'series_id': 22912,
'series_id': '22912',
'episode_number': 8,
'episode': 'E08',
},
@ -117,7 +118,7 @@ class OnDemandKoreaIE(InfoExtractor):
'duration': ('duration', {functools.partial(float_or_none, scale=1000)}),
'age_limit': ('age_rating', 'name', {lambda x: x.replace('R', '')}, {parse_age_limit}),
'series': ('episode', {if_series(key='program')}, 'title'),
'series_id': ('episode', {if_series(key='program')}, 'id'),
'series_id': ('episode', {if_series(key='program')}, 'id', {str_or_none}),
'episode': ('episode', {if_series(key='title')}),
'episode_number': ('episode', {if_series(key='number')}, {int_or_none}),
}, get_all=False),

@ -49,7 +49,6 @@ class ORFTVthekIE(InfoExtractor):
'url': 'https://tvthek.orf.at/profile/ZIB-2/1211/ZIB-2/14121079/Umfrage-Welches-Tier-ist-Sebastian-Kurz/15083150',
'info_dict': {
'id': '14121079',
'playlist_count': 1
},
'playlist': [{
'info_dict': {

@ -157,7 +157,6 @@ class PlayVidsIE(PeekVidsBaseIE):
'display_id': '47iUho33toY',
'ext': 'mp4',
'title': 'KATEE OWEN STRIPTIASE IN SEXY RED LINGERIE',
'description': None,
'timestamp': 1507052209,
'upload_date': '20171003',
'thumbnail': r're:^https?://.*\.jpg$',
@ -176,7 +175,6 @@ class PlayVidsIE(PeekVidsBaseIE):
'display_id': 'z3_7iwWCmqt',
'ext': 'mp4',
'title': 'SEXY TEEN FILIPINA STRIPTEASE - Beautiful Pinay Bargirl Strips and Dances',
'description': None,
'timestamp': 1607470323,
'upload_date': '20201208',
'thumbnail': r're:^https?://.*\.jpg$',

@ -35,7 +35,6 @@ class PladformIE(InfoExtractor):
'thumbnail': str,
'view_count': int,
'description': str,
'category': list,
'uploader_id': '12082',
'uploader': 'Comedy Club',
'duration': 367,

@ -20,7 +20,6 @@ class PlanetMarathiIE(InfoExtractor):
'title': 'ek unad divas',
'alt_title': 'चित्रपट',
'description': 'md5:41c7ed6b041c2fea9820a3f3125bd881',
'season_number': None,
'episode_number': 1,
'duration': 5539,
'upload_date': '20210829',

@ -29,7 +29,7 @@ class PodchaserIE(InfoExtractor):
'duration': 3708,
'timestamp': 1636531259,
'upload_date': '20211110',
'rating': 4.0
'average_rating': 4.0
}
}, {
'url': 'https://www.podchaser.com/podcasts/the-bone-zone-28853',
@ -59,7 +59,7 @@ class PodchaserIE(InfoExtractor):
'thumbnail': episode.get('image_url'),
'duration': str_to_int(episode.get('length')),
'timestamp': unified_timestamp(episode.get('air_date')),
'rating': float_or_none(episode.get('rating')),
'average_rating': float_or_none(episode.get('rating')),
'categories': list(set(traverse_obj(podcast, (('summary', None), 'categories', ..., 'text')))),
'tags': traverse_obj(podcast, ('tags', ..., 'text')),
'series': podcast.get('title'),

@ -1,5 +1,4 @@
import json
from datetime import date
from urllib.parse import unquote
from .common import InfoExtractor
@ -10,6 +9,7 @@ from ..utils import (
int_or_none,
make_archive_id,
mimetype2ext,
str_or_none,
urljoin,
)
from ..utils.traversal import traverse_obj
@ -25,8 +25,8 @@ class Pr0grammIE(InfoExtractor):
'title': 'pr0gramm-5466437 by g11st',
'tags': ['Neon Genesis Evangelion', 'Touhou Project', 'Fly me to the Moon', 'Marisad', 'Marisa Kirisame', 'video', 'sound', 'Marisa', 'Anime'],
'uploader': 'g11st',
'uploader_id': 394718,
'upload_timestamp': 1671590240,
'uploader_id': '394718',
'timestamp': 1671590240,
'upload_date': '20221221',
'like_count': int,
'dislike_count': int,
@ -42,8 +42,8 @@ class Pr0grammIE(InfoExtractor):
'title': 'pr0gramm-3052805 by Hansking1',
'tags': 'count:15',
'uploader': 'Hansking1',
'uploader_id': 385563,
'upload_timestamp': 1552930408,
'uploader_id': '385563',
'timestamp': 1552930408,
'upload_date': '20190318',
'like_count': int,
'dislike_count': int,
@ -60,8 +60,8 @@ class Pr0grammIE(InfoExtractor):
'title': 'pr0gramm-5848332 by erd0pfel',
'tags': 'count:18',
'uploader': 'erd0pfel',
'uploader_id': 349094,
'upload_timestamp': 1694489652,
'uploader_id': '349094',
'timestamp': 1694489652,
'upload_date': '20230912',
'like_count': int,
'dislike_count': int,
@ -77,8 +77,8 @@ class Pr0grammIE(InfoExtractor):
'title': 'pr0gramm-5895149 by algoholigSeeManThrower',
'tags': 'count:19',
'uploader': 'algoholigSeeManThrower',
'uploader_id': 457556,
'upload_timestamp': 1697580902,
'uploader_id': '457556',
'timestamp': 1697580902,
'upload_date': '20231018',
'like_count': int,
'dislike_count': int,
@ -192,11 +192,10 @@ class Pr0grammIE(InfoExtractor):
'_old_archive_ids': [make_archive_id('Pr0grammStatic', video_id)],
**traverse_obj(video_info, {
'uploader': ('user', {str}),
'uploader_id': ('userId', {int}),
'uploader_id': ('userId', {str_or_none}),
'like_count': ('up', {int}),
'dislike_count': ('down', {int}),
'upload_timestamp': ('created', {int}),
'upload_date': ('created', {int}, {date.fromtimestamp}, {lambda x: x.strftime('%Y%m%d')}),
'timestamp': ('created', {int}),
'thumbnail': ('thumb', {lambda x: urljoin('https://thumb.pr0gramm.com', x)})
}),
}

@ -16,7 +16,7 @@ class PrankCastIE(InfoExtractor):
'display_id': 'Beverly-is-back-like-a-heart-attack-',
'timestamp': 1661391575,
'uploader': 'Devonanustart',
'channel_id': 4,
'channel_id': '4',
'duration': 7918,
'cast': ['Devonanustart', 'Phonelosers'],
'description': '',
@ -33,7 +33,7 @@ class PrankCastIE(InfoExtractor):
'display_id': 'NOT-COOL',
'timestamp': 1665028364,
'uploader': 'phonelosers',
'channel_id': 6,
'channel_id': '6',
'duration': 4044,
'cast': ['phonelosers'],
'description': '',
@ -60,7 +60,7 @@ class PrankCastIE(InfoExtractor):
'url': f'{json_info["broadcast_url"]}{json_info["recording_hash"]}.mp3',
'timestamp': start_date,
'uploader': uploader,
'channel_id': json_info.get('user_id'),
'channel_id': str_or_none(json_info.get('user_id')),
'duration': try_call(lambda: parse_iso8601(json_info['end_date']) - start_date),
'cast': list(filter(None, [uploader] + traverse_obj(guests_json, (..., 'name')))),
'description': json_info.get('broadcast_description'),

@ -30,7 +30,8 @@ class RadioComercialIE(InfoExtractor):
'title': 'Taylor Swift entranhando-se que nem uma espada no ventre dos fãs.',
'release_date': '20231025',
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
'season': 6
'season': 'Season 6',
'season_number': 6,
}
}, {
'url': 'https://radiocomercial.pt/podcasts/convenca-me-num-minuto/t3/convenca-me-num-minuto-que-os-lobisomens-existem',
@ -41,7 +42,8 @@ class RadioComercialIE(InfoExtractor):
'title': 'Convença-me num minuto que os lobisomens existem',
'release_date': '20231026',
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
'season': 3
'season': 'Season 3',
'season_number': 3,
}
}, {
'url': 'https://radiocomercial.pt/podcasts/inacreditavel-by-ines-castel-branco/t2/o-desastre-de-aviao',
@ -53,7 +55,8 @@ class RadioComercialIE(InfoExtractor):
'description': 'md5:8a82beeb372641614772baab7246245f',
'release_date': '20231101',
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
'season': 2
'season': 'Season 2',
'season_number': 2,
},
'params': {
# inconsistant md5
@ -68,7 +71,8 @@ class RadioComercialIE(InfoExtractor):
'title': 'T.N.T 29 de outubro',
'release_date': '20231029',
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
'season': 2023
'season': 'Season 2023',
'season_number': 2023,
}
}]
@ -82,7 +86,7 @@ class RadioComercialIE(InfoExtractor):
'release_date': unified_strdate(get_element_by_class(
'date', get_element_html_by_class('descriptions', webpage) or '')),
'thumbnail': self._og_search_thumbnail(webpage),
'season': int_or_none(season),
'season_number': int_or_none(season),
'url': extract_attributes(get_element_html_by_class('audiofile', webpage) or '').get('href'),
}

@ -38,10 +38,6 @@ class RadLiveIE(InfoExtractor):
'language': 'en',
'thumbnail': 'https://lsp.littlstar.com/channels/WHISTLE/BAD_JOKES/SEASON_1/BAD_JOKES_101/poster.jpg',
'description': 'Bad Jokes - Champions, Adam Pally, Super Troopers, Team Edge and 2Hype',
'release_timestamp': None,
'channel': None,
'channel_id': None,
'channel_url': None,
'episode': 'E01: Bad Jokes 1',
'episode_number': 1,
'episode_id': '336',

@ -229,7 +229,7 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE):
'age_limit': 2,
'cast': ['Verrel Bramasta', 'Ranty Maria', 'Riza Syah', 'Ivan Fadilla', 'Nicole Parham', 'Dll', 'Aviv Elham'],
'display_id': 'putri-untuk-pangeran',
'tag': 'count:18',
'tags': 'count:18',
},
}, { # No episodes
'url': 'https://www.rctiplus.com/programs/615/inews-pagi',
@ -239,7 +239,7 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE):
'title': 'iNews Pagi',
'description': 'md5:f18ee3d4643cfb41c358e5a9b693ee04',
'age_limit': 2,
'tag': 'count:11',
'tags': 'count:11',
'display_id': 'inews-pagi',
}
}]
@ -327,8 +327,8 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE):
'age_limit': try_get(series_meta, lambda x: self._AGE_RATINGS[x['age_restriction'][0]['code']]),
'cast': traverse_obj(series_meta, (('starring', 'creator', 'writer'), ..., 'name'),
expected_type=lambda x: strip_or_none(x) or None),
'tag': traverse_obj(series_meta, ('tag', ..., 'name'),
expected_type=lambda x: strip_or_none(x) or None),
'tags': traverse_obj(series_meta, ('tag', ..., 'name'),
expected_type=lambda x: strip_or_none(x) or None),
}
return self.playlist_result(
self._series_entries(series_id, display_id, video_type, metadata), series_id,

@ -38,7 +38,7 @@ class RokfinIE(InfoExtractor):
'upload_date': '20211023',
'timestamp': 1634998029,
'channel': 'Jimmy Dore',
'channel_id': 65429,
'channel_id': '65429',
'channel_url': 'https://rokfin.com/TheJimmyDoreShow',
'availability': 'public',
'live_status': 'not_live',
@ -56,7 +56,7 @@ class RokfinIE(InfoExtractor):
'upload_date': '20190412',
'timestamp': 1555052644,
'channel': 'Ron Placone',
'channel_id': 10,
'channel_id': '10',
'channel_url': 'https://rokfin.com/RonPlacone',
'availability': 'public',
'live_status': 'not_live',
@ -73,7 +73,7 @@ class RokfinIE(InfoExtractor):
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
'description': 'md5:324ce2d3e3b62e659506409e458b9d8e',
'channel': 'TLAVagabond',
'channel_id': 53856,
'channel_id': '53856',
'channel_url': 'https://rokfin.com/TLAVagabond',
'availability': 'public',
'is_live': False,
@ -86,7 +86,6 @@ class RokfinIE(InfoExtractor):
'dislike_count': int,
'like_count': int,
'tags': ['FreeThinkingMedia^'],
'duration': None,
}
}, {
'url': 'https://rokfin.com/post/126703/Brave-New-World--Aldous-Huxley-DEEPDIVE--Chpts-13--Quite-Frankly--Jay-Dyer',
@ -96,7 +95,7 @@ class RokfinIE(InfoExtractor):
'title': 'Brave New World - Aldous Huxley DEEPDIVE! (Chpts 1-3) - Quite Frankly & Jay Dyer',
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
'channel': 'Jay Dyer',
'channel_id': 186881,
'channel_id': '186881',
'channel_url': 'https://rokfin.com/jaydyer',
'availability': 'premium_only',
'live_status': 'not_live',
@ -116,7 +115,7 @@ class RokfinIE(InfoExtractor):
'title': 'The Grayzone live on Nordstream blame game',
'thumbnail': r're:https://image\.v\.rokfin\.com/.+',
'channel': 'Max Blumenthal',
'channel_id': 248902,
'channel_id': '248902',
'channel_url': 'https://rokfin.com/MaxBlumenthal',
'availability': 'premium_only',
'live_status': 'was_live',
@ -174,7 +173,7 @@ class RokfinIE(InfoExtractor):
'like_count': int_or_none(metadata.get('likeCount')),
'dislike_count': int_or_none(metadata.get('dislikeCount')),
'channel': str_or_none(traverse_obj(metadata, ('createdBy', 'name'), ('creator', 'name'))),
'channel_id': traverse_obj(metadata, ('createdBy', 'id'), ('creator', 'id')),
'channel_id': str_or_none(traverse_obj(metadata, ('createdBy', 'id'), ('creator', 'id'))),
'channel_url': url_or_none(f'https://rokfin.com/{uploader}') if uploader else None,
'timestamp': timestamp,
'release_timestamp': timestamp if live_status != 'not_live' else None,

@ -90,7 +90,6 @@ class RumbleEmbedIE(InfoExtractor):
'channel_url': 'https://rumble.com/c/LofiGirl',
'channel': 'Lofi Girl',
'thumbnail': r're:https://.+\.jpg',
'duration': None,
'uploader': 'Lofi Girl',
'live_status': 'is_live',
},

@ -46,7 +46,7 @@ class RutubeBaseIE(InfoExtractor):
'uploader': try_get(video, lambda x: x['author']['name']),
'uploader_id': compat_str(uploader_id) if uploader_id else None,
'timestamp': unified_timestamp(video.get('created_ts')),
'category': [category] if category else None,
'categories': [category] if category else None,
'age_limit': age_limit,
'view_count': int_or_none(video.get('hits')),
'comment_count': int_or_none(video.get('comments_count')),
@ -112,7 +112,7 @@ class RutubeIE(RutubeBaseIE):
'age_limit': 0,
'view_count': int,
'thumbnail': 'http://pic.rutubelist.ru/video/d2/a0/d2a0aec998494a396deafc7ba2c82add.jpg',
'category': ['Новости и СМИ'],
'categories': ['Новости и СМИ'],
'chapters': [],
},
'expected_warnings': ['Unable to download f4m'],
@ -144,7 +144,7 @@ class RutubeIE(RutubeBaseIE):
'age_limit': 0,
'view_count': int,
'thumbnail': 'http://pic.rutubelist.ru/video/f2/d4/f2d42b54be0a6e69c1c22539e3152156.jpg',
'category': ['Видеоигры'],
'categories': ['Видеоигры'],
'chapters': [],
},
'expected_warnings': ['Unable to download f4m'],
@ -154,7 +154,7 @@ class RutubeIE(RutubeBaseIE):
'id': 'c65b465ad0c98c89f3b25cb03dcc87c6',
'ext': 'mp4',
'chapters': 'count:4',
'category': ['Бизнес и предпринимательство'],
'categories': ['Бизнес и предпринимательство'],
'description': 'md5:252feac1305257d8c1bab215cedde75d',
'thumbnail': 'http://pic.rutubelist.ru/video/71/8f/718f27425ea9706073eb80883dd3787b.png',
'duration': 782,

@ -44,8 +44,6 @@ class SBSIE(InfoExtractor):
'timestamp': 1408613220,
'upload_date': '20140821',
'uploader': 'SBSC',
'tags': None,
'categories': None,
},
'expected_warnings': ['Unable to download JSON metadata'],
}, {

@ -10,7 +10,7 @@ class SkebIE(InfoExtractor):
'info_dict': {
'id': '466853',
'title': '内容はおまかせします! by 姫ノ森りぃる@一周年',
'descripion': 'md5:1ec50901efc3437cfbfe3790468d532d',
'description': 'md5:1ec50901efc3437cfbfe3790468d532d',
'uploader': '姫ノ森りぃる@一周年',
'uploader_id': 'riiru_wm',
'age_limit': 0,
@ -34,7 +34,7 @@ class SkebIE(InfoExtractor):
'info_dict': {
'id': '489408',
'title': 'いつもお世話になってお... by 古川ノブ@音楽とVlo...',
'descripion': 'md5:5adc2e41d06d33b558bf7b1faeb7b9c2',
'description': 'md5:5adc2e41d06d33b558bf7b1faeb7b9c2',
'uploader': '古川ノブ@音楽とVlogのVtuber',
'uploader_id': 'furukawa_nob',
'age_limit': 0,
@ -61,12 +61,12 @@ class SkebIE(InfoExtractor):
'info_dict': {
'id': '6',
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
'descripion': 'md5:aa6cbf2ba320b50bce219632de195f07',
'description': 'md5:aa6cbf2ba320b50bce219632de195f07',
'_type': 'playlist',
'entries': [{
'id': '486430',
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
'descripion': 'md5:aa6cbf2ba320b50bce219632de195f07',
'description': 'md5:aa6cbf2ba320b50bce219632de195f07',
}, {
'id': '486431',
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
@ -81,7 +81,7 @@ class SkebIE(InfoExtractor):
parent = {
'id': video_id,
'title': nuxt_data.get('title'),
'descripion': nuxt_data.get('description'),
'description': nuxt_data.get('description'),
'uploader': traverse_obj(nuxt_data, ('creator', 'name')),
'uploader_id': traverse_obj(nuxt_data, ('creator', 'screen_name')),
'age_limit': 18 if nuxt_data.get('nsfw') else 0,

@ -21,7 +21,7 @@ class StagePlusVODConcertIE(InfoExtractor):
'id': 'vod_concert_APNM8GRFDPHMASJKBSPJACG',
'title': 'Yuja Wang plays Rachmaninoff\'s Piano Concerto No. 2 from Odeonsplatz',
'description': 'md5:50f78ec180518c9bdb876bac550996fc',
'artist': ['Yuja Wang', 'Lorenzo Viotti'],
'artists': ['Yuja Wang', 'Lorenzo Viotti'],
'upload_date': '20230331',
'timestamp': 1680249600,
'release_date': '20210709',
@ -40,10 +40,10 @@ class StagePlusVODConcertIE(InfoExtractor):
'release_timestamp': 1625788800,
'duration': 2207,
'chapters': 'count:5',
'artist': ['Yuja Wang'],
'composer': ['Sergei Rachmaninoff'],
'artists': ['Yuja Wang'],
'composers': ['Sergei Rachmaninoff'],
'album': 'Yuja Wang plays Rachmaninoff\'s Piano Concerto No. 2 from Odeonsplatz',
'album_artist': ['Yuja Wang', 'Lorenzo Viotti'],
'album_artists': ['Yuja Wang', 'Lorenzo Viotti'],
'track': 'Piano Concerto No. 2 in C Minor, Op. 18',
'track_number': 1,
'genre': 'Instrumental Concerto',
@ -474,7 +474,7 @@ fragment BannerFields on Banner {
metadata = traverse_obj(data, {
'title': 'title',
'description': ('shortDescription', {str}),
'artist': ('artists', 'edges', ..., 'node', 'name'),
'artists': ('artists', 'edges', ..., 'node', 'name'),
'timestamp': ('archiveReleaseDate', {unified_timestamp}),
'release_timestamp': ('productionDate', {unified_timestamp}),
})
@ -494,7 +494,7 @@ fragment BannerFields on Banner {
'formats': formats,
'subtitles': subtitles,
'album': metadata.get('title'),
'album_artist': metadata.get('artist'),
'album_artists': metadata.get('artist'),
'track_number': idx,
**metadata,
**traverse_obj(video, {
@ -506,8 +506,8 @@ fragment BannerFields on Banner {
'title': 'title',
'start_time': ('mark', {float_or_none}),
}),
'artist': ('artists', 'edges', ..., 'node', 'name'),
'composer': ('work', 'composers', ..., 'name'),
'artists': ('artists', 'edges', ..., 'node', 'name'),
'composers': ('work', 'composers', ..., 'name'),
'genre': ('work', 'genre', 'title'),
}),
})

@ -2,9 +2,10 @@ import re
from .common import InfoExtractor
from ..utils import (
extract_attributes,
ExtractorError,
extract_attributes,
get_element_by_class,
str_or_none,
)
@ -30,7 +31,6 @@ class SteamIE(InfoExtractor):
'ext': 'mp4',
'title': 'Terraria video 256785003',
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
'n_entries': 2,
}
},
{
@ -39,9 +39,7 @@ class SteamIE(InfoExtractor):
'id': '2040428',
'ext': 'mp4',
'title': 'Terraria video 2040428',
'playlist_index': 2,
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
'n_entries': 2,
}
}
],
@ -55,12 +53,10 @@ class SteamIE(InfoExtractor):
}, {
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
'info_dict': {
'id': '256757115',
'title': 'Grand Theft Auto V video 256757115',
'ext': 'mp4',
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
'n_entries': 20,
'id': '271590',
'title': 'Grand Theft Auto V',
},
'playlist_count': 23,
}]
def _real_extract(self, url):
@ -136,7 +132,7 @@ class SteamCommunityBroadcastIE(InfoExtractor):
'id': '76561199073851486',
'title': r're:Steam Community :: pepperm!nt :: Broadcast 2022-06-26 \d{2}:\d{2}',
'ext': 'mp4',
'uploader_id': 1113585758,
'uploader_id': '1113585758',
'uploader': 'pepperm!nt',
'live_status': 'is_live',
},
@ -169,6 +165,6 @@ class SteamCommunityBroadcastIE(InfoExtractor):
'live_status': 'is_live',
'view_count': json_data.get('num_view'),
'uploader': uploader_json.get('persona_name'),
'uploader_id': uploader_json.get('accountid'),
'uploader_id': str_or_none(uploader_json.get('accountid')),
'subtitles': subs,
}

@ -20,7 +20,8 @@ class TenPlayIE(InfoExtractor):
'alt_title': 'Nathan Borg Is The First Aussie Actor With A Cochlear Implant To Join Neighbours',
'description': 'md5:a02d0199c901c2dd4c796f1e7dd0de43',
'duration': 186,
'season': 39,
'season': 'Season 39',
'season_number': 39,
'series': 'Neighbours',
'thumbnail': r're:https://.*\.jpg',
'uploader': 'Channel 10',
@ -108,7 +109,7 @@ class TenPlayIE(InfoExtractor):
'description': data.get('description'),
'age_limit': self._AUS_AGES.get(data.get('classification')),
'series': data.get('tvShow'),
'season': int_or_none(data.get('season')),
'season_number': int_or_none(data.get('season')),
'episode_number': int_or_none(data.get('episode')),
'timestamp': data.get('published'),
'thumbnail': data.get('imageUrl'),

@ -320,7 +320,7 @@ class TikTokBaseIE(InfoExtractor):
if is_generic_og_trackname:
music_track, music_author = contained_music_track or 'original sound', contained_music_author
else:
music_track, music_author = music_info.get('title'), music_info.get('author')
music_track, music_author = music_info.get('title'), traverse_obj(music_info, ('author', {str}))
return {
'id': aweme_id,
@ -336,15 +336,16 @@ class TikTokBaseIE(InfoExtractor):
'comment_count': 'comment_count',
}, expected_type=int_or_none),
**traverse_obj(author_info, {
'uploader': 'unique_id',
'uploader_id': 'uid',
'creator': 'nickname',
'channel_id': 'sec_uid',
}, expected_type=str_or_none),
'uploader': ('unique_id', {str}),
'uploader_id': ('uid', {str_or_none}),
'creators': ('nickname', {str}, {lambda x: [x] if x else None}), # for compat
'channel': ('nickname', {str}),
'channel_id': ('sec_uid', {str}),
}),
'uploader_url': user_url,
'track': music_track,
'album': str_or_none(music_info.get('album')) or None,
'artist': music_author or None,
'artists': re.split(r'(?:, | & )', music_author) if music_author else None,
'formats': formats,
'subtitles': self.extract_subtitles(aweme_detail, aweme_id),
'thumbnails': thumbnails,
@ -405,7 +406,8 @@ class TikTokBaseIE(InfoExtractor):
'timestamp': ('createTime', {int_or_none}),
}),
**traverse_obj(author_info or aweme_detail, {
'creator': ('nickname', {str}),
'creators': ('nickname', {str}, {lambda x: [x] if x else None}), # for compat
'channel': ('nickname', {str}),
'uploader': (('uniqueId', 'author'), {str}),
'uploader_id': (('authorId', 'uid', 'id'), {str_or_none}),
}, get_all=False),
@ -416,10 +418,10 @@ class TikTokBaseIE(InfoExtractor):
'comment_count': 'commentCount',
}, expected_type=int_or_none),
**traverse_obj(music_info, {
'track': 'title',
'album': ('album', {lambda x: x or None}),
'artist': 'authorName',
}, expected_type=str),
'track': ('title', {str}),
'album': ('album', {str}, {lambda x: x or None}),
'artists': ('authorName', {str}, {lambda x: [x] if x else None}),
}),
'channel_id': channel_id,
'uploader_url': user_url,
'formats': formats,
@ -476,7 +478,8 @@ class TikTokIE(TikTokBaseIE):
'uploader_id': '18702747',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
'channel_id': 'MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
'creator': 'patroX',
'channel': 'patroX',
'creators': ['patroX'],
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
'upload_date': '20190930',
'timestamp': 1569860870,
@ -484,7 +487,7 @@ class TikTokIE(TikTokBaseIE):
'like_count': int,
'repost_count': int,
'comment_count': int,
'artist': 'Evan Todd, Jessica Keenan Wynn, Alice Lee, Barrett Wilbert Weed & Jon Eidson',
'artists': ['Evan Todd', 'Jessica Keenan Wynn', 'Alice Lee', 'Barrett Wilbert Weed', 'Jon Eidson'],
'track': 'Big Fun',
},
}, {
@ -496,12 +499,13 @@ class TikTokIE(TikTokBaseIE):
'title': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
'description': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
'uploader': 'barudakhb_',
'creator': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
'channel': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
'creators': ['md5:29f238c49bc0c176cb3cef1a9cea9fa6'],
'uploader_id': '6974687867511718913',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
'channel_id': 'MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
'track': 'Boka Dance',
'artist': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
'artists': ['md5:29f238c49bc0c176cb3cef1a9cea9fa6'],
'timestamp': 1626121503,
'duration': 18,
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
@ -520,7 +524,8 @@ class TikTokIE(TikTokBaseIE):
'title': 'Slap and Run!',
'description': 'Slap and Run!',
'uploader': 'user440922249',
'creator': 'Slap And Run',
'channel': 'Slap And Run',
'creators': ['Slap And Run'],
'uploader_id': '7036055384943690754',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
'channel_id': 'MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
@ -544,7 +549,8 @@ class TikTokIE(TikTokBaseIE):
'title': 'TikTok video #7059698374567611694',
'description': '',
'uploader': 'pokemonlife22',
'creator': 'Pokemon',
'channel': 'Pokemon',
'creators': ['Pokemon'],
'uploader_id': '6820838815978423302',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
'channel_id': 'MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
@ -553,7 +559,7 @@ class TikTokIE(TikTokBaseIE):
'duration': 6,
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
'upload_date': '20220201',
'artist': 'Pokemon',
'artists': ['Pokemon'],
'view_count': int,
'like_count': int,
'repost_count': int,
@ -590,12 +596,13 @@ class TikTokIE(TikTokBaseIE):
'ext': 'mp3',
'title': 'TikTok video #7139980461132074283',
'description': '',
'creator': 'Antaura',
'channel': 'Antaura',
'creators': ['Antaura'],
'uploader': '_le_cannibale_',
'uploader_id': '6604511138619654149',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
'channel_id': 'MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
'artist': 'nathan !',
'artists': ['nathan !'],
'track': 'grahamscott canon',
'upload_date': '20220905',
'timestamp': 1662406249,
@ -603,18 +610,18 @@ class TikTokIE(TikTokBaseIE):
'like_count': int,
'repost_count': int,
'comment_count': int,
'thumbnail': r're:^https://.+\.webp',
'thumbnail': r're:^https://.+\.(?:webp|jpe?g)',
},
}, {
# only available via web
'url': 'https://www.tiktok.com/@moxypatch/video/7206382937372134662',
'url': 'https://www.tiktok.com/@moxypatch/video/7206382937372134662', # FIXME
'md5': '6aba7fad816e8709ff2c149679ace165',
'info_dict': {
'id': '7206382937372134662',
'ext': 'mp4',
'title': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
'description': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
'creator': 'MoxyPatch',
'channel': 'MoxyPatch',
'creators': ['MoxyPatch'],
'uploader': 'moxypatch',
'uploader_id': '7039142049363379205',
@ -635,7 +642,7 @@ class TikTokIE(TikTokBaseIE):
'expected_warnings': ['Unable to find video in feed'],
}, {
# 1080p format
'url': 'https://www.tiktok.com/@tatemcrae/video/7107337212743830830',
'url': 'https://www.tiktok.com/@tatemcrae/video/7107337212743830830', # FIXME
'md5': '982512017a8a917124d5a08c8ae79621',
'info_dict': {
'id': '7107337212743830830',
@ -646,8 +653,9 @@ class TikTokIE(TikTokBaseIE):
'uploader_id': '86328792343818240',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
'channel_id': 'MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
'creator': 'tate mcrae',
'artist': 'tate mcrae',
'channel': 'tate mcrae',
'creators': ['tate mcrae'],
'artists': ['tate mcrae'],
'track': 'original sound',
'upload_date': '20220609',
'timestamp': 1654805899,
@ -672,8 +680,9 @@ class TikTokIE(TikTokBaseIE):
'uploader_id': '6582536342634676230',
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
'channel_id': 'MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
'creator': 'лампочка',
'artist': 'Øneheart',
'channel': 'лампочка',
'creators': ['лампочка'],
'artists': ['Øneheart'],
'album': 'watching the stars',
'track': 'watching the stars',
'upload_date': '20230708',
@ -682,7 +691,7 @@ class TikTokIE(TikTokBaseIE):
'like_count': int,
'comment_count': int,
'repost_count': int,
'thumbnail': r're:^https://.+\.webp',
'thumbnail': r're:^https://.+\.(?:webp|jpe?g)',
},
}, {
# Auto-captions available
@ -949,7 +958,7 @@ class DouyinIE(TikTokBaseIE):
'uploader_id': '110403406559',
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'creator': '杨超越',
'channel': '杨超越',
'creators': ['杨超越'],
'duration': 19,
'timestamp': 1620905839,
@ -974,7 +983,7 @@ class DouyinIE(TikTokBaseIE):
'uploader_id': '408654318141572',
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
'channel_id': 'MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
'creator': '杨超越工作室',
'channel': '杨超越工作室',
'creators': ['杨超越工作室'],
'duration': 42,
'timestamp': 1625739481,
@ -999,7 +1008,7 @@ class DouyinIE(TikTokBaseIE):
'uploader_id': '110403406559',
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'creator': '杨超越',
'channel': '杨超越',
'creators': ['杨超越'],
'duration': 17,
'timestamp': 1619098692,
@ -1041,7 +1050,7 @@ class DouyinIE(TikTokBaseIE):
'uploader_id': '110403406559',
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
'creator': '杨超越',
'channel': '杨超越',
'creators': ['杨超越'],
'duration': 15,
'timestamp': 1621261163,

@ -277,7 +277,6 @@ class EMPFlixIE(TNAEMPFlixBaseIE):
'thumbnail': r're:https?://.*\.jpg$',
'duration': 83,
'age_limit': 18,
'uploader': None,
'categories': list,
}
}, {

@ -19,7 +19,6 @@ class TruthIE(InfoExtractor):
'id': '108779000807761862',
'ext': 'qt',
'title': 'Truth video #108779000807761862',
'description': None,
'timestamp': 1659835827,
'upload_date': '20220807',
'uploader': 'Donald J. Trump',

@ -20,7 +20,6 @@ class TV2HuIE(InfoExtractor):
'description': 'md5:7350147e75485a59598e806c47967b07',
'thumbnail': r're:^https?://.*\.jpg$',
'release_date': '20210825',
'season_number': None,
'episode_number': 213,
},
'params': {
@ -38,8 +37,6 @@ class TV2HuIE(InfoExtractor):
'description': 'md5:47762155dc9a50241797ded101b1b08c',
'thumbnail': r're:^https?://.*\.jpg$',
'release_date': '20210118',
'season_number': None,
'episode_number': None,
},
'params': {
'skip_download': True,

@ -21,8 +21,6 @@ class TVerIE(InfoExtractor):
'episode': '売り場席巻のチーズSP財前直見×森泉親子の脱東京暮らし密着',
'alt_title': '売り場席巻のチーズSP財前直見×森泉親子の脱東京暮らし密着',
'channel': 'テレビ朝日',
'onair_label': '5月3日(火)放送分',
'ext_title': '家事ヤロウ!!! 売り場席巻のチーズSP財前直見×森泉親子の脱東京暮らし密着 テレビ朝日 5月3日(火)放送分',
},
'add_ie': ['BrightcoveNew'],
}, {

@ -22,7 +22,7 @@ class VideofyMeIE(InfoExtractor):
'uploader': 'VideofyMe',
'uploader_id': 'thisisvideofyme',
'view_count': int,
'likes': int,
'like_count': int,
'comment_count': int,
},
}
@ -45,6 +45,6 @@ class VideofyMeIE(InfoExtractor):
'uploader': blog.get('name'),
'uploader_id': blog.get('identifier'),
'view_count': int_or_none(self._search_regex(r'([0-9]+)', video.get('views'), 'view count', fatal=False)),
'likes': int_or_none(video.get('likes')),
'like_count': int_or_none(video.get('likes')),
'comment_count': int_or_none(video.get('nrOfComments')),
}

@ -231,7 +231,6 @@ class ViewLiftIE(ViewLiftBaseIE):
'description': 'md5:e28f2fb8680096a69c944d37c1fa5ffc',
'thumbnail': r're:^https?://.*\.jpg$',
'upload_date': '20211006',
'series': None
},
'params': {'skip_download': True},
}, { # Free film
@ -243,7 +242,6 @@ class ViewLiftIE(ViewLiftBaseIE):
'description': 'md5:605cba408e51a79dafcb824bdeded51e',
'thumbnail': r're:^https?://.*\.jpg$',
'upload_date': '20210827',
'series': None
},
'params': {'skip_download': True},
}, { # Free episode

@ -375,7 +375,6 @@ class VimeoIE(VimeoBaseInfoExtractor):
'uploader_url': r're:https?://(?:www\.)?vimeo\.com/businessofsoftware',
'uploader_id': 'businessofsoftware',
'duration': 3610,
'description': None,
'thumbnail': 'https://i.vimeocdn.com/video/376682406-f34043e7b766af6bef2af81366eacd6724f3fc3173179a11a97a1e26587c9529-d_1280',
},
'params': {

@ -810,7 +810,7 @@ class VKPlayLiveIE(VKPlayBaseIE):
'ext': 'mp4',
'title': r're:эскапизм крута .*',
'uploader': 'Bayda',
'uploader_id': 12279401,
'uploader_id': '12279401',
'release_timestamp': 1687209962,
'release_date': '20230619',
'thumbnail': r're:https://images.vkplay.live/public_video_stream/12279401/preview\?change_time=\d+',

@ -24,7 +24,6 @@ class VVVVIDIE(InfoExtractor):
'series': 'The Power of Computing',
'season_id': '518',
'episode': 'Playstation VR cambierà il nostro modo di giocare',
'episode_number': None,
'episode_id': '4747',
'view_count': int,
'like_count': int,
@ -58,7 +57,6 @@ class VVVVIDIE(InfoExtractor):
'description': 'md5:a5e802558d35247fee285875328c0b80',
'uploader_id': '@EMOTIONLabelChannel',
'uploader': 'EMOTION Label Channel',
'episode_number': None,
'episode_id': '3115',
'view_count': int,
'like_count': int,

@ -324,7 +324,6 @@ class WDRElefantIE(InfoExtractor):
'title': 'Wippe',
'id': 'mdb-1198320',
'ext': 'mp4',
'age_limit': None,
'upload_date': '20071003'
},
}

@ -1,7 +1,7 @@
import math
from .common import InfoExtractor
from ..utils import traverse_obj, try_call, InAdvancePagedList
from ..utils import InAdvancePagedList, str_or_none, traverse_obj, try_call
class XimalayaBaseIE(InfoExtractor):
@ -19,7 +19,7 @@ class XimalayaIE(XimalayaBaseIE):
'id': '47740352',
'ext': 'm4a',
'uploader': '小彬彬爱听书',
'uploader_id': 61425525,
'uploader_id': '61425525',
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
@ -48,7 +48,7 @@ class XimalayaIE(XimalayaBaseIE):
'id': '47740352',
'ext': 'm4a',
'uploader': '小彬彬爱听书',
'uploader_id': 61425525,
'uploader_id': '61425525',
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
@ -107,7 +107,7 @@ class XimalayaIE(XimalayaBaseIE):
return {
'id': audio_id,
'uploader': audio_info.get('nickname'),
'uploader_id': audio_uploader_id,
'uploader_id': str_or_none(audio_uploader_id),
'uploader_url': f'{scheme}://www.ximalaya.com/zhubo/{audio_uploader_id}/' if audio_uploader_id else None,
'title': audio_info['title'],
'thumbnails': thumbnails,

@ -1,6 +1,7 @@
from .common import InfoExtractor
from ..utils import (
int_or_none,
str_or_none,
try_get,
update_url_query,
url_or_none,
@ -21,9 +22,9 @@ class XinpianchangIE(InfoExtractor):
'duration': 151,
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
'uploader': '正时文创',
'uploader_id': 10357277,
'uploader_id': '10357277',
'categories': ['宣传片', '国家城市', '广告', '其他'],
'keywords': ['北京冬奥会', '冰墩墩', '再见', '告别', '冰墩墩哭了', '感动', '闭幕式', '熄火']
'tags': ['北京冬奥会', '冰墩墩', '再见', '告别', '冰墩墩哭了', '感动', '闭幕式', '熄火']
},
}, {
'url': 'https://www.xinpianchang.com/a11762904',
@ -35,9 +36,9 @@ class XinpianchangIE(InfoExtractor):
'duration': 136,
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
'uploader': '精品动画',
'uploader_id': 10858927,
'uploader_id': '10858927',
'categories': ['动画', '三维CG'],
'keywords': ['France Télévisions', '法国3台', '蠢萌', '冬奥会']
'tags': ['France Télévisions', '法国3台', '蠢萌', '冬奥会']
},
}, {
'url': 'https://www.xinpianchang.com/a11779743?from=IndexPick&part=%E7%BC%96%E8%BE%91%E7%B2%BE%E9%80%89&index=2',
@ -78,10 +79,10 @@ class XinpianchangIE(InfoExtractor):
'description': data.get('description'),
'duration': int_or_none(data.get('duration')),
'categories': data.get('categories'),
'keywords': data.get('keywords'),
'tags': data.get('keywords'),
'thumbnail': data.get('cover'),
'uploader': try_get(data, lambda x: x['owner']['username']),
'uploader_id': try_get(data, lambda x: x['owner']['id']),
'uploader_id': str_or_none(try_get(data, lambda x: x['owner']['id'])),
'formats': formats,
'subtitles': subtitles,
}

@ -46,10 +46,6 @@ class YleAreenaIE(InfoExtractor):
'title': 'Albi haluaa vessan',
'description': 'md5:15236d810c837bed861fae0e88663c33',
'series': 'Albi Lumiukko',
'season': None,
'season_number': None,
'episode': None,
'episode_number': None,
'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/1_l38iz9ur/version/100021',
'uploader_id': 'ovp@yle.fi',
'duration': 319,

@ -42,11 +42,11 @@ class YoukuIE(InfoExtractor):
'uploader_id': '322014285',
'uploader_url': 'http://i.youku.com/u/UMTI4ODA1NzE0MA==',
'tags': list,
'skip': '404',
},
'params': {
'videopassword': '100600',
},
'skip': '404',
}, {
# /play/get.json contains streams with "channel_type":"tail"
'url': 'http://v.youku.com/v_show/id_XOTUxMzg4NDMy.html',

@ -6,6 +6,7 @@ from ..utils import (
ExtractorError,
format_field,
int_or_none,
str_or_none,
try_get,
)
@ -102,7 +103,7 @@ def _extract_moment(item, fatal=True):
'timestamp': int_or_none(item.get('created')),
'creator': uploader,
'uploader': uploader,
'uploader_id': uploader_id,
'uploader_id': str_or_none(uploader_id),
'uploader_url': uploader_url,
'formats': [{
'url': 'https://hls.younow.com/momentsplaylists/live/%s/%s.m3u8'
@ -184,7 +185,7 @@ class YouNowMomentIE(InfoExtractor):
'timestamp': 1490432040,
'upload_date': '20170325',
'uploader': 'GABO...',
'uploader_id': 35917228,
'uploader_id': '35917228',
},
}

@ -513,7 +513,6 @@ class ZingMp3LiveRadioIE(ZingMp3BaseIE):
'id': 'IWZ979UB',
'title': r're:^V\-POP',
'description': 'md5:aa857f8a91dc9ce69e862a809e4bdc10',
'protocol': 'm3u8_native',
'ext': 'mp4',
'view_count': int,
'thumbnail': r're:^https?://.*\.jpg',
@ -529,7 +528,6 @@ class ZingMp3LiveRadioIE(ZingMp3BaseIE):
'id': 'IWZ97CWB',
'title': r're:^Live\s247',
'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
'protocol': 'm3u8_native',
'ext': 'm4a',
'view_count': int,
'thumbnail': r're:^https?://.*\.jpg',

Loading…
Cancel
Save