mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-22 06:00:00 +00:00
parent
dfd8c0b696
commit
f4f9f6d00e
74 changed files with 230 additions and 274 deletions
|
@ -1310,6 +1310,8 @@ # OUTPUT TEMPLATE
|
||||||
- `description` (string): The description of the video
|
- `description` (string): The description of the video
|
||||||
- `display_id` (string): An alternative identifier for the video
|
- `display_id` (string): An alternative identifier for the video
|
||||||
- `uploader` (string): Full name of the video uploader
|
- `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
|
- `license` (string): License name the video is licensed under
|
||||||
- `creators` (list): The creators of the video
|
- `creators` (list): The creators of the video
|
||||||
- `creator` (string): The creators of the video; comma-separated
|
- `creator` (string): The creators of the video; comma-separated
|
||||||
|
@ -1320,9 +1322,9 @@ # OUTPUT TEMPLATE
|
||||||
- `release_year` (numeric): Year (YYYY) when the video or album was released
|
- `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_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
|
- `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` (string): Full name of the channel the video is uploaded on
|
||||||
- `channel_id` (string): Id of the channel
|
- `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_follower_count` (numeric): Number of followers of the channel
|
||||||
- `channel_is_verified` (boolean): Whether the channel is verified on the platform
|
- `channel_is_verified` (boolean): Whether the channel is verified on the platform
|
||||||
- `location` (string): Physical location where the video was filmed
|
- `location` (string): Physical location where the video was filmed
|
||||||
|
@ -1362,6 +1364,9 @@ # OUTPUT TEMPLATE
|
||||||
- `webpage_url_basename` (string): The basename of the webpage URL
|
- `webpage_url_basename` (string): The basename of the webpage URL
|
||||||
- `webpage_url_domain` (string): The domain 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)
|
- `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
|
All the fields in [Filtering Formats](#filtering-formats) can also be used
|
||||||
|
|
||||||
|
@ -1374,6 +1379,7 @@ # OUTPUT TEMPLATE
|
||||||
Available for the video that is an episode of some series or programme:
|
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` (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` (string): Title of the season the video episode belongs to
|
||||||
- `season_number` (numeric): Number 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
|
- `season_id` (string): Id of the season the video episode belongs to
|
||||||
|
|
|
@ -245,7 +245,6 @@ class ABCIViewIE(InfoExtractor):
|
||||||
'episode_id': 'NC2203H039S00',
|
'episode_id': 'NC2203H039S00',
|
||||||
'season_number': 2022,
|
'season_number': 2022,
|
||||||
'season': 'Season 2022',
|
'season': 'Season 2022',
|
||||||
'episode_number': None,
|
|
||||||
'episode': 'Locking Up Kids',
|
'episode': 'Locking Up Kids',
|
||||||
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/nc/NC2203H039S00_636d8a0944a22_1920.jpg',
|
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/nc/NC2203H039S00_636d8a0944a22_1920.jpg',
|
||||||
'timestamp': 1668460497,
|
'timestamp': 1668460497,
|
||||||
|
@ -271,8 +270,6 @@ class ABCIViewIE(InfoExtractor):
|
||||||
'episode_id': 'RF2004Q043S00',
|
'episode_id': 'RF2004Q043S00',
|
||||||
'season_number': 2021,
|
'season_number': 2021,
|
||||||
'season': 'Season 2021',
|
'season': 'Season 2021',
|
||||||
'episode_number': None,
|
|
||||||
'episode': None,
|
|
||||||
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/rf/RF2004Q043S00_61a950639dbc0_1920.jpg',
|
'thumbnail': 'https://cdn.iview.abc.net.au/thumbs/i/rf/RF2004Q043S00_61a950639dbc0_1920.jpg',
|
||||||
'timestamp': 1638710705,
|
'timestamp': 1638710705,
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,7 @@ class AbemaTVIE(AbemaTVBaseIE):
|
||||||
'title': 'ゆるキャン△ SEASON2 全話一挙【無料ビデオ72時間】',
|
'title': 'ゆるキャン△ SEASON2 全話一挙【無料ビデオ72時間】',
|
||||||
'series': 'ゆるキャン△ SEASON2',
|
'series': 'ゆるキャン△ SEASON2',
|
||||||
'episode': 'ゆるキャン△ SEASON2 全話一挙【無料ビデオ72時間】',
|
'episode': 'ゆるキャン△ SEASON2 全話一挙【無料ビデオ72時間】',
|
||||||
'series_number': 2,
|
'season_number': 2,
|
||||||
'episode_number': 1,
|
'episode_number': 1,
|
||||||
'description': 'md5:9c5a3172ae763278f9303922f0ea5b17',
|
'description': 'md5:9c5a3172ae763278f9303922f0ea5b17',
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
float_or_none,
|
float_or_none,
|
||||||
format_field,
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
str_or_none,
|
||||||
traverse_obj,
|
traverse_obj,
|
||||||
parse_codecs,
|
parse_codecs,
|
||||||
parse_qs,
|
parse_qs,
|
||||||
|
@ -129,7 +130,7 @@ class AcFunBangumiIE(AcFunVideoBaseIE):
|
||||||
'title': '红孩儿之趴趴蛙寻石记 第5话 ',
|
'title': '红孩儿之趴趴蛙寻石记 第5话 ',
|
||||||
'duration': 760.0,
|
'duration': 760.0,
|
||||||
'season': '红孩儿之趴趴蛙寻石记',
|
'season': '红孩儿之趴趴蛙寻石记',
|
||||||
'season_id': 5023171,
|
'season_id': '5023171',
|
||||||
'season_number': 1, # series has only 1 season
|
'season_number': 1, # series has only 1 season
|
||||||
'episode': 'Episode 5',
|
'episode': 'Episode 5',
|
||||||
'episode_number': 5,
|
'episode_number': 5,
|
||||||
|
@ -146,7 +147,7 @@ class AcFunBangumiIE(AcFunVideoBaseIE):
|
||||||
'title': '叽歪老表(第二季) 第5话 坚不可摧',
|
'title': '叽歪老表(第二季) 第5话 坚不可摧',
|
||||||
'season': '叽歪老表(第二季)',
|
'season': '叽歪老表(第二季)',
|
||||||
'season_number': 2,
|
'season_number': 2,
|
||||||
'season_id': 6065485,
|
'season_id': '6065485',
|
||||||
'episode': '坚不可摧',
|
'episode': '坚不可摧',
|
||||||
'episode_number': 5,
|
'episode_number': 5,
|
||||||
'upload_date': '20220324',
|
'upload_date': '20220324',
|
||||||
|
@ -191,7 +192,7 @@ def _real_extract(self, url):
|
||||||
'title': json_bangumi_data.get('showTitle'),
|
'title': json_bangumi_data.get('showTitle'),
|
||||||
'thumbnail': json_bangumi_data.get('image'),
|
'thumbnail': json_bangumi_data.get('image'),
|
||||||
'season': json_bangumi_data.get('bangumiTitle'),
|
'season': json_bangumi_data.get('bangumiTitle'),
|
||||||
'season_id': season_id,
|
'season_id': str_or_none(season_id),
|
||||||
'season_number': season_number,
|
'season_number': season_number,
|
||||||
'episode': json_bangumi_data.get('title'),
|
'episode': json_bangumi_data.get('title'),
|
||||||
'episode_number': episode_number,
|
'episode_number': episode_number,
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
unified_timestamp,
|
unified_timestamp,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
urlhandle_detect_ext,
|
urlhandle_detect_ext,
|
||||||
|
variadic,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ class ArchiveOrgIE(InfoExtractor):
|
||||||
'release_date': '19681210',
|
'release_date': '19681210',
|
||||||
'timestamp': 1268695290,
|
'timestamp': 1268695290,
|
||||||
'upload_date': '20100315',
|
'upload_date': '20100315',
|
||||||
'creator': 'SRI International',
|
'creators': ['SRI International'],
|
||||||
'uploader': 'laura@archive.org',
|
'uploader': 'laura@archive.org',
|
||||||
'thumbnail': r're:https://archive\.org/download/.*\.jpg',
|
'thumbnail': r're:https://archive\.org/download/.*\.jpg',
|
||||||
'display_id': 'XD300-23_68HighlightsAResearchCntAugHumanIntellect.cdr',
|
'display_id': 'XD300-23_68HighlightsAResearchCntAugHumanIntellect.cdr',
|
||||||
|
@ -109,7 +110,7 @@ class ArchiveOrgIE(InfoExtractor):
|
||||||
'title': 'Turning',
|
'title': 'Turning',
|
||||||
'ext': 'flac',
|
'ext': 'flac',
|
||||||
'track': 'Turning',
|
'track': 'Turning',
|
||||||
'creator': 'Grateful Dead',
|
'creators': ['Grateful Dead'],
|
||||||
'display_id': 'gd1977-05-08d01t01.flac',
|
'display_id': 'gd1977-05-08d01t01.flac',
|
||||||
'track_number': 1,
|
'track_number': 1,
|
||||||
'album': '1977-05-08 - Barton Hall - Cornell University',
|
'album': '1977-05-08 - Barton Hall - Cornell University',
|
||||||
|
@ -129,7 +130,7 @@ class ArchiveOrgIE(InfoExtractor):
|
||||||
'location': 'Barton Hall - Cornell University',
|
'location': 'Barton Hall - Cornell University',
|
||||||
'duration': 438.68,
|
'duration': 438.68,
|
||||||
'track': 'Deal',
|
'track': 'Deal',
|
||||||
'creator': 'Grateful Dead',
|
'creators': ['Grateful Dead'],
|
||||||
'album': '1977-05-08 - Barton Hall - Cornell University',
|
'album': '1977-05-08 - Barton Hall - Cornell University',
|
||||||
'release_date': '19770508',
|
'release_date': '19770508',
|
||||||
'display_id': 'gd1977-05-08d01t07.flac',
|
'display_id': 'gd1977-05-08d01t07.flac',
|
||||||
|
@ -167,7 +168,7 @@ class ArchiveOrgIE(InfoExtractor):
|
||||||
'upload_date': '20160610',
|
'upload_date': '20160610',
|
||||||
'description': 'md5:f70956a156645a658a0dc9513d9e78b7',
|
'description': 'md5:f70956a156645a658a0dc9513d9e78b7',
|
||||||
'uploader': 'dimitrios@archive.org',
|
'uploader': 'dimitrios@archive.org',
|
||||||
'creator': ['British Broadcasting Corporation', 'Time-Life Films'],
|
'creators': ['British Broadcasting Corporation', 'Time-Life Films'],
|
||||||
'timestamp': 1465594947,
|
'timestamp': 1465594947,
|
||||||
},
|
},
|
||||||
'playlist': [
|
'playlist': [
|
||||||
|
@ -257,7 +258,7 @@ def _real_extract(self, url):
|
||||||
'title': m['title'],
|
'title': m['title'],
|
||||||
'description': clean_html(m.get('description')),
|
'description': clean_html(m.get('description')),
|
||||||
'uploader': dict_get(m, ['uploader', 'adder']),
|
'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'),
|
'license': m.get('licenseurl'),
|
||||||
'release_date': unified_strdate(m.get('date')),
|
'release_date': unified_strdate(m.get('date')),
|
||||||
'timestamp': unified_timestamp(dict_get(m, ['publicdate', 'addeddate'])),
|
'timestamp': unified_timestamp(dict_get(m, ['publicdate', 'addeddate'])),
|
||||||
|
@ -272,7 +273,7 @@ def _real_extract(self, url):
|
||||||
'title': f.get('title') or f['name'],
|
'title': f.get('title') or f['name'],
|
||||||
'display_id': f['name'],
|
'display_id': f['name'],
|
||||||
'description': clean_html(f.get('description')),
|
'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')),
|
'duration': parse_duration(f.get('length')),
|
||||||
'track_number': int_or_none(f.get('track')),
|
'track_number': int_or_none(f.get('track')),
|
||||||
'album': f.get('album'),
|
'album': f.get('album'),
|
||||||
|
|
|
@ -24,7 +24,8 @@ class AxsIE(InfoExtractor):
|
||||||
'timestamp': 1685729564,
|
'timestamp': 1685729564,
|
||||||
'duration': 1284.216,
|
'duration': 1284.216,
|
||||||
'series': 'Rock & Roll Road Trip with Sammy Hagar',
|
'series': 'Rock & Roll Road Trip with Sammy Hagar',
|
||||||
'season': 2,
|
'season': 'Season 2',
|
||||||
|
'season_number': 2,
|
||||||
'episode': '3',
|
'episode': '3',
|
||||||
'thumbnail': 'https://images.dotstudiopro.com/5f4e9d330a0c3b295a7e8394',
|
'thumbnail': 'https://images.dotstudiopro.com/5f4e9d330a0c3b295a7e8394',
|
||||||
},
|
},
|
||||||
|
@ -41,7 +42,8 @@ class AxsIE(InfoExtractor):
|
||||||
'timestamp': 1676403615,
|
'timestamp': 1676403615,
|
||||||
'duration': 2570.668,
|
'duration': 2570.668,
|
||||||
'series': 'The Big Interview with Dan Rather',
|
'series': 'The Big Interview with Dan Rather',
|
||||||
'season': 3,
|
'season': 'Season 3',
|
||||||
|
'season_number': 3,
|
||||||
'episode': '5',
|
'episode': '5',
|
||||||
'thumbnail': 'https://images.dotstudiopro.com/5f4d1901f340b50d937cec32',
|
'thumbnail': 'https://images.dotstudiopro.com/5f4d1901f340b50d937cec32',
|
||||||
},
|
},
|
||||||
|
@ -77,7 +79,7 @@ def _real_extract(self, url):
|
||||||
'title': ('title', {str}),
|
'title': ('title', {str}),
|
||||||
'description': ('description', {str}),
|
'description': ('description', {str}),
|
||||||
'series': ('seriestitle', {str}),
|
'series': ('seriestitle', {str}),
|
||||||
'season': ('season', {int}),
|
'season_number': ('season', {int}),
|
||||||
'episode': ('episode', {str}),
|
'episode': ('episode', {str}),
|
||||||
'duration': ('duration', {float_or_none}),
|
'duration': ('duration', {float_or_none}),
|
||||||
'timestamp': ('updated_at', {parse_iso8601}),
|
'timestamp': ('updated_at', {parse_iso8601}),
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
str_or_none,
|
||||||
traverse_obj,
|
traverse_obj,
|
||||||
try_get,
|
try_get,
|
||||||
unified_timestamp,
|
unified_timestamp,
|
||||||
|
@ -22,7 +23,7 @@ class BeegIE(InfoExtractor):
|
||||||
'age_limit': 18,
|
'age_limit': 18,
|
||||||
'upload_date': '20220131',
|
'upload_date': '20220131',
|
||||||
'timestamp': 1643656455,
|
'timestamp': 1643656455,
|
||||||
'display_id': 2540839,
|
'display_id': '2540839',
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://beeg.com/-0599050563103750?t=4-861',
|
'url': 'https://beeg.com/-0599050563103750?t=4-861',
|
||||||
|
@ -36,7 +37,7 @@ class BeegIE(InfoExtractor):
|
||||||
'age_limit': 18,
|
'age_limit': 18,
|
||||||
'description': 'md5:b4fc879a58ae6c604f8f259155b7e3b9',
|
'description': 'md5:b4fc879a58ae6c604f8f259155b7e3b9',
|
||||||
'timestamp': 1643623200,
|
'timestamp': 1643623200,
|
||||||
'display_id': 2569965,
|
'display_id': '2569965',
|
||||||
'upload_date': '20220131',
|
'upload_date': '20220131',
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
@ -78,7 +79,7 @@ def _real_extract(self, url):
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'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')),
|
'title': traverse_obj(video, ('file', 'stuff', 'sf_name')),
|
||||||
'description': traverse_obj(video, ('file', 'stuff', 'sf_story')),
|
'description': traverse_obj(video, ('file', 'stuff', 'sf_story')),
|
||||||
'timestamp': unified_timestamp(first_fact.get('fc_created')),
|
'timestamp': unified_timestamp(first_fact.get('fc_created')),
|
||||||
|
|
|
@ -32,7 +32,7 @@ class BellMediaIE(InfoExtractor):
|
||||||
'description': 'md5:810f7f8c6a83ad5b48677c3f8e5bb2c3',
|
'description': 'md5:810f7f8c6a83ad5b48677c3f8e5bb2c3',
|
||||||
'upload_date': '20180525',
|
'upload_date': '20180525',
|
||||||
'timestamp': 1527288600,
|
'timestamp': 1527288600,
|
||||||
'season_id': 73997,
|
'season_id': '73997',
|
||||||
'season': '2018',
|
'season': '2018',
|
||||||
'thumbnail': 'http://images2.9c9media.com/image_asset/2018_5_25_baf30cbd-b28d-4a18-9903-4bb8713b00f5_PNG_956x536.jpg',
|
'thumbnail': 'http://images2.9c9media.com/image_asset/2018_5_25_baf30cbd-b28d-4a18-9903-4bb8713b00f5_PNG_956x536.jpg',
|
||||||
'tags': [],
|
'tags': [],
|
||||||
|
|
|
@ -93,7 +93,6 @@ class BFMTVArticleIE(BFMTVBaseIE):
|
||||||
'id': '6318445464112',
|
'id': '6318445464112',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Le plein de bioéthanol fait de plus en plus mal à la pompe',
|
'title': 'Le plein de bioéthanol fait de plus en plus mal à la pompe',
|
||||||
'description': None,
|
|
||||||
'uploader_id': '876630703001',
|
'uploader_id': '876630703001',
|
||||||
'upload_date': '20230110',
|
'upload_date': '20230110',
|
||||||
'timestamp': 1673341692,
|
'timestamp': 1673341692,
|
||||||
|
|
|
@ -185,7 +185,6 @@ class BitChuteChannelIE(InfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'UGlrF9o9b-Q',
|
'id': 'UGlrF9o9b-Q',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'filesize': None,
|
|
||||||
'title': 'This is the first video on #BitChute !',
|
'title': 'This is the first video on #BitChute !',
|
||||||
'description': 'md5:a0337e7b1fe39e32336974af8173a034',
|
'description': 'md5:a0337e7b1fe39e32336974af8173a034',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
|
str_or_none,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ class BleacherReportIE(InfoExtractor):
|
||||||
'id': '2496438',
|
'id': '2496438',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'FSU Stat Projections: Is Jalen Ramsey Best Defensive Player in College Football?',
|
'title': 'FSU Stat Projections: Is Jalen Ramsey Best Defensive Player in College Football?',
|
||||||
'uploader_id': 3992341,
|
'uploader_id': '3992341',
|
||||||
'description': 'CFB, ACC, Florida State',
|
'description': 'CFB, ACC, Florida State',
|
||||||
'timestamp': 1434380212,
|
'timestamp': 1434380212,
|
||||||
'upload_date': '20150615',
|
'upload_date': '20150615',
|
||||||
|
@ -33,7 +34,7 @@ class BleacherReportIE(InfoExtractor):
|
||||||
'timestamp': 1446839961,
|
'timestamp': 1446839961,
|
||||||
'uploader': 'Sean Fay',
|
'uploader': 'Sean Fay',
|
||||||
'description': 'md5:b1601e2314c4d8eec23b6eafe086a757',
|
'description': 'md5:b1601e2314c4d8eec23b6eafe086a757',
|
||||||
'uploader_id': 6466954,
|
'uploader_id': '6466954',
|
||||||
'upload_date': '20151011',
|
'upload_date': '20151011',
|
||||||
},
|
},
|
||||||
'add_ie': ['Youtube'],
|
'add_ie': ['Youtube'],
|
||||||
|
@ -58,7 +59,7 @@ def _real_extract(self, url):
|
||||||
'id': article_id,
|
'id': article_id,
|
||||||
'title': article_data['title'],
|
'title': article_data['title'],
|
||||||
'uploader': article_data.get('author', {}).get('name'),
|
'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')),
|
'timestamp': parse_iso8601(article_data.get('createdAt')),
|
||||||
'thumbnails': thumbnails,
|
'thumbnails': thumbnails,
|
||||||
'comment_count': int_or_none(article_data.get('commentsCount')),
|
'comment_count': int_or_none(article_data.get('commentsCount')),
|
||||||
|
|
|
@ -51,7 +51,7 @@ class CeskaTelevizeIE(InfoExtractor):
|
||||||
'url': 'http://www.ceskatelevize.cz/ivysilani/zive/ct4/',
|
'url': 'http://www.ceskatelevize.cz/ivysilani/zive/ct4/',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 402,
|
'id': '402',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': r're:^ČT Sport \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
|
'title': r're:^ČT Sport \d{4}-\d{2}-\d{2} \d{2}:\d{2}$',
|
||||||
'is_live': True,
|
'is_live': True,
|
||||||
|
|
|
@ -17,6 +17,7 @@ class CGTNIE(InfoExtractor):
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
'timestamp': 1615295940,
|
'timestamp': 1615295940,
|
||||||
'upload_date': '20210309',
|
'upload_date': '20210309',
|
||||||
|
'categories': ['Video'],
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
'skip_download': True
|
'skip_download': True
|
||||||
|
@ -29,8 +30,8 @@ class CGTNIE(InfoExtractor):
|
||||||
'title': 'China, Indonesia vow to further deepen maritime cooperation',
|
'title': 'China, Indonesia vow to further deepen maritime cooperation',
|
||||||
'thumbnail': r're:^https?://.*\.png$',
|
'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.',
|
'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',
|
'creators': ['CGTN'],
|
||||||
'category': 'China',
|
'categories': ['China'],
|
||||||
'timestamp': 1622950200,
|
'timestamp': 1622950200,
|
||||||
'upload_date': '20210606',
|
'upload_date': '20210606',
|
||||||
},
|
},
|
||||||
|
@ -45,7 +46,12 @@ def _real_extract(self, url):
|
||||||
webpage = self._download_webpage(url, video_id)
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
|
||||||
download_url = self._html_search_regex(r'data-video ="(?P<url>.+m3u8)"', webpage, 'download_url')
|
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 {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
@ -53,9 +59,7 @@ def _real_extract(self, url):
|
||||||
'description': self._og_search_description(webpage, default=None),
|
'description': self._og_search_description(webpage, default=None),
|
||||||
'thumbnail': self._og_search_thumbnail(webpage),
|
'thumbnail': self._og_search_thumbnail(webpage),
|
||||||
'formats': self._extract_m3u8_formats(download_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls'),
|
'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>',
|
'categories': [category] if category else None,
|
||||||
webpage, 'category', fatal=False),
|
'creators': [author] if author else None,
|
||||||
'author': self._html_search_regex(r'<div class="news-author-name">\s*(.+?)\s*</div>',
|
|
||||||
webpage, 'author', default=None, fatal=False),
|
|
||||||
'timestamp': try_get(unified_timestamp(datetime_str), lambda x: x - 8 * 3600),
|
'timestamp': try_get(unified_timestamp(datetime_str), lambda x: x - 8 * 3600),
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,8 +84,6 @@ class ChingariIE(ChingariBaseIE):
|
||||||
'uploader_id': '5f0403982c8bd344f4813f8c',
|
'uploader_id': '5f0403982c8bd344f4813f8c',
|
||||||
'uploader': 'ISKCON,Inc.',
|
'uploader': 'ISKCON,Inc.',
|
||||||
'uploader_url': 'https://chingari.io/iskcon,inc',
|
'uploader_url': 'https://chingari.io/iskcon,inc',
|
||||||
'track': None,
|
|
||||||
'artist': None,
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True}
|
'params': {'skip_download': True}
|
||||||
}]
|
}]
|
||||||
|
@ -125,8 +123,6 @@ class ChingariUserIE(ChingariBaseIE):
|
||||||
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
||||||
'uploader': 'dada (girish) dhawale',
|
'uploader': 'dada (girish) dhawale',
|
||||||
'uploader_url': 'https://chingari.io/dada1023',
|
'uploader_url': 'https://chingari.io/dada1023',
|
||||||
'track': None,
|
|
||||||
'artist': None
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True}
|
'params': {'skip_download': True}
|
||||||
}, {
|
}, {
|
||||||
|
@ -147,8 +143,6 @@ class ChingariUserIE(ChingariBaseIE):
|
||||||
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
||||||
'uploader': 'dada (girish) dhawale',
|
'uploader': 'dada (girish) dhawale',
|
||||||
'uploader_url': 'https://chingari.io/dada1023',
|
'uploader_url': 'https://chingari.io/dada1023',
|
||||||
'track': None,
|
|
||||||
'artist': None
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True}
|
'params': {'skip_download': True}
|
||||||
}, {
|
}, {
|
||||||
|
@ -169,8 +163,6 @@ class ChingariUserIE(ChingariBaseIE):
|
||||||
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
'uploader_id': '5efc4b12cca35c3d1794c2d3',
|
||||||
'uploader': 'dada (girish) dhawale',
|
'uploader': 'dada (girish) dhawale',
|
||||||
'uploader_url': 'https://chingari.io/dada1023',
|
'uploader_url': 'https://chingari.io/dada1023',
|
||||||
'track': None,
|
|
||||||
'artist': None
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True}
|
'params': {'skip_download': True}
|
||||||
}],
|
}],
|
||||||
|
|
|
@ -21,7 +21,7 @@ class CNBCVideoIE(InfoExtractor):
|
||||||
'modified_date': '20231208',
|
'modified_date': '20231208',
|
||||||
'release_date': '20231207',
|
'release_date': '20231207',
|
||||||
'duration': 65,
|
'duration': 65,
|
||||||
'author': 'Sean Conlon',
|
'creators': ['Sean Conlon'],
|
||||||
'title': 'Here\'s a first look at McDonald\'s new spinoff brand, CosMc\'s',
|
'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',
|
'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',
|
'url': 'https://www.cnbc.com/video/2023/12/08/jim-cramer-shares-his-take-on-seattles-tech-scene.html',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'author': 'Jim Cramer',
|
'creators': ['Jim Cramer'],
|
||||||
'channel': 'Mad Money with Jim Cramer',
|
'channel': 'Mad Money with Jim Cramer',
|
||||||
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
|
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
|
||||||
'duration': 299.0,
|
'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',
|
'url': 'https://www.cnbc.com/video/2023/12/08/the-epicenter-of-ai-is-in-seattle-says-jim-cramer.html',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'author': 'Jim Cramer',
|
'creators': ['Jim Cramer'],
|
||||||
'channel': 'Mad Money with Jim Cramer',
|
'channel': 'Mad Money with Jim Cramer',
|
||||||
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
|
'description': 'md5:72925be21b952e95eba51178dddf4e3e',
|
||||||
'duration': 113.0,
|
'duration': 113.0,
|
||||||
|
@ -86,12 +86,12 @@ def _real_extract(self, url):
|
||||||
'id': ('id', {str_or_none}),
|
'id': ('id', {str_or_none}),
|
||||||
'title': ('title', {str}),
|
'title': ('title', {str}),
|
||||||
'description': ('description', {str}),
|
'description': ('description', {str}),
|
||||||
'author': ('author', ..., 'name', {str}),
|
'creators': ('author', ..., 'name', {str}),
|
||||||
'timestamp': ('datePublished', {parse_iso8601}),
|
'timestamp': ('datePublished', {parse_iso8601}),
|
||||||
'release_timestamp': ('uploadDate', {parse_iso8601}),
|
'release_timestamp': ('uploadDate', {parse_iso8601}),
|
||||||
'modified_timestamp': ('dateLastPublished', {parse_iso8601}),
|
'modified_timestamp': ('dateLastPublished', {parse_iso8601}),
|
||||||
'thumbnail': ('thumbnail', {url_or_none}),
|
'thumbnail': ('thumbnail', {url_or_none}),
|
||||||
'duration': ('duration', {int_or_none}),
|
'duration': ('duration', {int_or_none}),
|
||||||
'channel': ('section', 'title', {str}),
|
'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)
|
direct: True if a direct video file was given (must only be set by GenericIE)
|
||||||
alt_title: A secondary title of the video.
|
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
|
unique, but available before title. Typically, id is
|
||||||
something like "4234987", title "Dancing naked mole rats",
|
something like "4234987", title "Dancing naked mole rats",
|
||||||
and display_id "dancing-naked-mole-rats"
|
and display_id "dancing-naked-mole-rats"
|
||||||
|
|
|
@ -65,7 +65,7 @@ def is_live(v_type):
|
||||||
'title': title,
|
'title': title,
|
||||||
'description': str_or_none(content['details'].get('description_%s_t' % (url_lang, ))),
|
'description': str_or_none(content['details'].get('description_%s_t' % (url_lang, ))),
|
||||||
'timestamp': unified_timestamp(content['details'].get('liveDateTime')),
|
'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, )))),
|
'thumbnail': urljoin(url, str_or_none(content['details'].get('image_%s_s' % (url_lang, )))),
|
||||||
'is_live': is_live(content['details'].get('type')),
|
'is_live': is_live(content['details'].get('type')),
|
||||||
}
|
}
|
||||||
|
|
|
@ -514,7 +514,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
|
||||||
'track': 'Egaono Hana',
|
'track': 'Egaono Hana',
|
||||||
'artist': 'Goose house',
|
'artist': 'Goose house',
|
||||||
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
||||||
'genre': ['J-Pop'],
|
'genres': ['J-Pop'],
|
||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
}, {
|
}, {
|
||||||
|
@ -527,7 +527,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
|
||||||
'track': 'Crossing Field',
|
'track': 'Crossing Field',
|
||||||
'artist': 'LiSA',
|
'artist': 'LiSA',
|
||||||
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
||||||
'genre': ['Anime'],
|
'genres': ['Anime'],
|
||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
}, {
|
}, {
|
||||||
|
@ -541,7 +541,7 @@ class CrunchyrollMusicIE(CrunchyrollBaseIE):
|
||||||
'artist': 'LiSA',
|
'artist': 'LiSA',
|
||||||
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
'thumbnail': r're:(?i)^https://www.crunchyroll.com/imgsrv/.*\.jpeg?$',
|
||||||
'description': 'md5:747444e7e6300907b7a43f0a0503072e',
|
'description': 'md5:747444e7e6300907b7a43f0a0503072e',
|
||||||
'genre': ['J-Pop'],
|
'genres': ['J-Pop'],
|
||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
}, {
|
}, {
|
||||||
|
@ -594,7 +594,7 @@ def _transform_music_response(data):
|
||||||
'width': ('width', {int_or_none}),
|
'width': ('width', {int_or_none}),
|
||||||
'height': ('height', {int_or_none}),
|
'height': ('height', {int_or_none}),
|
||||||
}),
|
}),
|
||||||
'genre': ('genres', ..., 'displayValue'),
|
'genres': ('genres', ..., 'displayValue'),
|
||||||
'age_limit': ('maturity_ratings', -1, {parse_age_limit}),
|
'age_limit': ('maturity_ratings', -1, {parse_age_limit}),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
@ -611,7 +611,7 @@ class CrunchyrollArtistIE(CrunchyrollBaseIE):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'MA179CB50D',
|
'id': 'MA179CB50D',
|
||||||
'title': 'LiSA',
|
'title': 'LiSA',
|
||||||
'genre': ['J-Pop', 'Anime', 'Rock'],
|
'genres': ['J-Pop', 'Anime', 'Rock'],
|
||||||
'description': 'md5:16d87de61a55c3f7d6c454b73285938e',
|
'description': 'md5:16d87de61a55c3f7d6c454b73285938e',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 83,
|
'playlist_mincount': 83,
|
||||||
|
@ -645,6 +645,6 @@ def _transform_artist_response(data):
|
||||||
'width': ('width', {int_or_none}),
|
'width': ('width', {int_or_none}),
|
||||||
'height': ('height', {int_or_none}),
|
'height': ('height', {int_or_none}),
|
||||||
}),
|
}),
|
||||||
'genre': ('genres', ..., 'displayValue'),
|
'genres': ('genres', ..., 'displayValue'),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@ class CybraryCourseIE(CybraryBaseIE):
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://app.cybrary.it/browse/course/az-500-microsoft-azure-security-technologies',
|
'url': 'https://app.cybrary.it/browse/course/az-500-microsoft-azure-security-technologies',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 898,
|
'id': '898',
|
||||||
'title': 'AZ-500: Microsoft Azure Security Technologies',
|
'title': 'AZ-500: Microsoft Azure Security Technologies',
|
||||||
'description': 'md5:69549d379c0fc1dec92926d4e8b6fbd4'
|
'description': 'md5:69549d379c0fc1dec92926d4e8b6fbd4'
|
||||||
},
|
},
|
||||||
|
@ -122,7 +122,7 @@ class CybraryCourseIE(CybraryBaseIE):
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://app.cybrary.it/browse/course/cybrary-orientation',
|
'url': 'https://app.cybrary.it/browse/course/cybrary-orientation',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 1245,
|
'id': '1245',
|
||||||
'title': 'Cybrary Orientation',
|
'title': 'Cybrary Orientation',
|
||||||
'description': 'md5:9e69ff66b32fe78744e0ad4babe2e88e'
|
'description': 'md5:9e69ff66b32fe78744e0ad4babe2e88e'
|
||||||
},
|
},
|
||||||
|
|
|
@ -83,7 +83,6 @@ class DamtomoRecordIE(DamtomoBaseIE):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '27376862',
|
'id': '27376862',
|
||||||
'title': 'イカSUMMER [良音]',
|
'title': 'イカSUMMER [良音]',
|
||||||
'description': None,
|
|
||||||
'uploader': 'NANA',
|
'uploader': 'NANA',
|
||||||
'uploader_id': 'MzAyMDExNTY',
|
'uploader_id': 'MzAyMDExNTY',
|
||||||
'upload_date': '20210721',
|
'upload_date': '20210721',
|
||||||
|
|
|
@ -27,7 +27,7 @@ class DaumIE(DaumBaseIE):
|
||||||
'duration': 2117,
|
'duration': 2117,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'uploader_id': 186139,
|
'uploader_id': '186139',
|
||||||
'uploader': '콘간지',
|
'uploader': '콘간지',
|
||||||
'timestamp': 1387310323,
|
'timestamp': 1387310323,
|
||||||
},
|
},
|
||||||
|
@ -44,7 +44,7 @@ class DaumIE(DaumBaseIE):
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'uploader': 'MBC 예능',
|
'uploader': 'MBC 예능',
|
||||||
'uploader_id': 132251,
|
'uploader_id': '132251',
|
||||||
'timestamp': 1421604228,
|
'timestamp': 1421604228,
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -63,7 +63,7 @@ class DaumIE(DaumBaseIE):
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'uploader': '까칠한 墮落始祖 황비홍님의',
|
'uploader': '까칠한 墮落始祖 황비홍님의',
|
||||||
'uploader_id': 560824,
|
'uploader_id': '560824',
|
||||||
'timestamp': 1203770745,
|
'timestamp': 1203770745,
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -77,7 +77,7 @@ class DaumIE(DaumBaseIE):
|
||||||
'description': '러블리즈 - Destiny (나의 지구) (Lovelyz - Destiny)\r\n\r\n[쇼! 음악중심] 20160611, 507회',
|
'description': '러블리즈 - Destiny (나의 지구) (Lovelyz - Destiny)\r\n\r\n[쇼! 음악중심] 20160611, 507회',
|
||||||
'upload_date': '20170129',
|
'upload_date': '20170129',
|
||||||
'uploader': '쇼! 음악중심',
|
'uploader': '쇼! 음악중심',
|
||||||
'uploader_id': 2653210,
|
'uploader_id': '2653210',
|
||||||
'timestamp': 1485684628,
|
'timestamp': 1485684628,
|
||||||
},
|
},
|
||||||
}]
|
}]
|
||||||
|
@ -107,7 +107,7 @@ class DaumClipIE(DaumBaseIE):
|
||||||
'duration': 3868,
|
'duration': 3868,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'uploader': 'GOMeXP',
|
'uploader': 'GOMeXP',
|
||||||
'uploader_id': 6667,
|
'uploader_id': '6667',
|
||||||
'timestamp': 1377911092,
|
'timestamp': 1377911092,
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -32,7 +32,7 @@ class DuoplayIE(InfoExtractor):
|
||||||
'season_number': 2,
|
'season_number': 2,
|
||||||
'episode': 'Operatsioon "Öö"',
|
'episode': 'Operatsioon "Öö"',
|
||||||
'episode_number': 12,
|
'episode_number': 12,
|
||||||
'episode_id': 24,
|
'episode_id': '24',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
'note': 'Empty title',
|
'note': 'Empty title',
|
||||||
|
@ -50,7 +50,7 @@ class DuoplayIE(InfoExtractor):
|
||||||
'series_id': '17',
|
'series_id': '17',
|
||||||
'season': 'Season 2',
|
'season': 'Season 2',
|
||||||
'season_number': 2,
|
'season_number': 2,
|
||||||
'episode_id': 14,
|
'episode_id': '14',
|
||||||
'release_year': 2010,
|
'release_year': 2010,
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -99,6 +99,6 @@ def _real_extract(self, url):
|
||||||
'season_number': ('season_id', {int_or_none}),
|
'season_number': ('season_id', {int_or_none}),
|
||||||
'episode': 'subtitle',
|
'episode': 'subtitle',
|
||||||
'episode_number': ('episode_nr', {int_or_none}),
|
'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 {}),
|
}, get_all=False) if episode_attr.get('category') != 'movies' else {}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,6 @@ class EplusIbIE(InfoExtractor):
|
||||||
'live_status': 'was_live',
|
'live_status': 'was_live',
|
||||||
'release_date': '20210719',
|
'release_date': '20210719',
|
||||||
'release_timestamp': 1626703200,
|
'release_timestamp': 1626703200,
|
||||||
'description': None,
|
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
|
|
|
@ -301,7 +301,7 @@ class FunimationShowIE(FunimationBaseIE):
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://www.funimation.com/en/shows/sk8-the-infinity',
|
'url': 'https://www.funimation.com/en/shows/sk8-the-infinity',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 1315000,
|
'id': '1315000',
|
||||||
'title': 'SK8 the Infinity'
|
'title': 'SK8 the Infinity'
|
||||||
},
|
},
|
||||||
'playlist_count': 13,
|
'playlist_count': 13,
|
||||||
|
@ -312,7 +312,7 @@ class FunimationShowIE(FunimationBaseIE):
|
||||||
# without lang code
|
# without lang code
|
||||||
'url': 'https://www.funimation.com/shows/ouran-high-school-host-club/',
|
'url': 'https://www.funimation.com/shows/ouran-high-school-host-club/',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 39643,
|
'id': '39643',
|
||||||
'title': 'Ouran High School Host Club'
|
'title': 'Ouran High School Host Club'
|
||||||
},
|
},
|
||||||
'playlist_count': 26,
|
'playlist_count': 26,
|
||||||
|
@ -339,7 +339,7 @@ def _real_extract(self, url):
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'_type': 'playlist',
|
'_type': 'playlist',
|
||||||
'id': show_info['id'],
|
'id': str_or_none(show_info['id']),
|
||||||
'title': show_info['name'],
|
'title': show_info['name'],
|
||||||
'entries': orderedSet(
|
'entries': orderedSet(
|
||||||
self.url_result(
|
self.url_result(
|
||||||
|
|
|
@ -19,7 +19,6 @@ class GabTVIE(InfoExtractor):
|
||||||
'id': '61217eacea5665de450d0488',
|
'id': '61217eacea5665de450d0488',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'WHY WAS AMERICA IN AFGHANISTAN - AMERICA FIRST AGAINST AMERICAN OLIGARCHY',
|
'title': 'WHY WAS AMERICA IN AFGHANISTAN - AMERICA FIRST AGAINST AMERICAN OLIGARCHY',
|
||||||
'description': None,
|
|
||||||
'uploader': 'Wurzelroot',
|
'uploader': 'Wurzelroot',
|
||||||
'uploader_id': '608fb0a85738fd1974984f7d',
|
'uploader_id': '608fb0a85738fd1974984f7d',
|
||||||
'thumbnail': 'https://tv.gab.com/image/61217eacea5665de450d0488',
|
'thumbnail': 'https://tv.gab.com/image/61217eacea5665de450d0488',
|
||||||
|
|
|
@ -267,9 +267,9 @@ class GameJoltIE(GameJoltBaseIE):
|
||||||
'id': 'dszyjnwi',
|
'id': 'dszyjnwi',
|
||||||
'ext': 'webm',
|
'ext': 'webm',
|
||||||
'title': 'gif-presentacion-mejorado-dszyjnwi',
|
'title': 'gif-presentacion-mejorado-dszyjnwi',
|
||||||
'n_entries': 1,
|
|
||||||
}
|
}
|
||||||
}]
|
}],
|
||||||
|
'playlist_count': 1,
|
||||||
}, {
|
}, {
|
||||||
# Multiple GIFs
|
# Multiple GIFs
|
||||||
'url': 'https://gamejolt.com/p/gif-yhsqkumq',
|
'url': 'https://gamejolt.com/p/gif-yhsqkumq',
|
||||||
|
@ -374,7 +374,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '657899',
|
'id': '657899',
|
||||||
'title': 'Friday Night Funkin\': Vs Oswald',
|
'title': 'Friday Night Funkin\': Vs Oswald',
|
||||||
'n_entries': None,
|
|
||||||
},
|
},
|
||||||
'playlist': [{
|
'playlist': [{
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
@ -384,7 +383,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
|
||||||
'url': r're:^https://.+vs-oswald-menu-music\.mp3$',
|
'url': r're:^https://.+vs-oswald-menu-music\.mp3$',
|
||||||
'release_timestamp': 1635190816,
|
'release_timestamp': 1635190816,
|
||||||
'release_date': '20211025',
|
'release_date': '20211025',
|
||||||
'n_entries': 3,
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
@ -394,7 +392,6 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
|
||||||
'url': r're:^https://.+rabbit-s-luck--full-version-\.mp3$',
|
'url': r're:^https://.+rabbit-s-luck--full-version-\.mp3$',
|
||||||
'release_timestamp': 1635190841,
|
'release_timestamp': 1635190841,
|
||||||
'release_date': '20211025',
|
'release_date': '20211025',
|
||||||
'n_entries': 3,
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
@ -404,9 +401,9 @@ class GameJoltGameSoundtrackIE(GameJoltBaseIE):
|
||||||
'url': r're:^https://.+last-straw\.mp3$',
|
'url': r're:^https://.+last-straw\.mp3$',
|
||||||
'release_timestamp': 1635881104,
|
'release_timestamp': 1635881104,
|
||||||
'release_date': '20211102',
|
'release_date': '20211102',
|
||||||
'n_entries': 3,
|
|
||||||
}
|
}
|
||||||
}]
|
}],
|
||||||
|
'playlist_count': 3,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
|
|
@ -21,7 +21,6 @@ class GaskrankIE(InfoExtractor):
|
||||||
'display_id': 'strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden',
|
'display_id': 'strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden',
|
||||||
'uploader_id': 'Bikefun',
|
'uploader_id': 'Bikefun',
|
||||||
'upload_date': '20170110',
|
'upload_date': '20170110',
|
||||||
'uploader_url': None,
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.gaskrank.tv/tv/racing/isle-of-man-tt-2011-michael-du-15920.htm',
|
'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',
|
'upload_date': '20190501',
|
||||||
'duration': 1219,
|
'duration': 1219,
|
||||||
'channel': 'StarPlus',
|
'channel': 'StarPlus',
|
||||||
'channel_id': 3,
|
'channel_id': '3',
|
||||||
'series': 'Ek Bhram - Sarvagun Sampanna',
|
'series': 'Ek Bhram - Sarvagun Sampanna',
|
||||||
'season': 'Chapter 1',
|
'season': 'Chapter 1',
|
||||||
'season_number': 1,
|
'season_number': 1,
|
||||||
'season_id': 6771,
|
'season_id': '6771',
|
||||||
'episode': 'Janhvi Targets Suman',
|
'episode': 'Janhvi Targets Suman',
|
||||||
'episode_number': 8,
|
'episode_number': 8,
|
||||||
}
|
}
|
||||||
|
@ -135,12 +135,12 @@ class HotStarIE(HotStarBaseIE):
|
||||||
'channel': 'StarPlus',
|
'channel': 'StarPlus',
|
||||||
'series': 'Anupama',
|
'series': 'Anupama',
|
||||||
'season_number': 1,
|
'season_number': 1,
|
||||||
'season_id': 7399,
|
'season_id': '7399',
|
||||||
'upload_date': '20230307',
|
'upload_date': '20230307',
|
||||||
'episode': 'Anupama, Anuj Share a Moment',
|
'episode': 'Anupama, Anuj Share a Moment',
|
||||||
'episode_number': 853,
|
'episode_number': 853,
|
||||||
'duration': 1272,
|
'duration': 1272,
|
||||||
'channel_id': 3,
|
'channel_id': '3',
|
||||||
},
|
},
|
||||||
'skip': 'HTTP Error 504: Gateway Time-out', # XXX: Investigate 504 errors on some episodes
|
'skip': 'HTTP Error 504: Gateway Time-out', # XXX: Investigate 504 errors on some episodes
|
||||||
}, {
|
}, {
|
||||||
|
@ -155,12 +155,12 @@ class HotStarIE(HotStarBaseIE):
|
||||||
'channel': 'Hotstar Specials',
|
'channel': 'Hotstar Specials',
|
||||||
'series': 'Kana Kaanum Kaalangal',
|
'series': 'Kana Kaanum Kaalangal',
|
||||||
'season_number': 1,
|
'season_number': 1,
|
||||||
'season_id': 9441,
|
'season_id': '9441',
|
||||||
'upload_date': '20220421',
|
'upload_date': '20220421',
|
||||||
'episode': 'Back To School',
|
'episode': 'Back To School',
|
||||||
'episode_number': 1,
|
'episode_number': 1,
|
||||||
'duration': 1810,
|
'duration': 1810,
|
||||||
'channel_id': 54,
|
'channel_id': '54',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286',
|
'url': 'https://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286',
|
||||||
|
@ -325,11 +325,11 @@ def _real_extract(self, url):
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': subs,
|
'subtitles': subs,
|
||||||
'channel': video_data.get('channelName'),
|
'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'),
|
'series': video_data.get('showName'),
|
||||||
'season': video_data.get('seasonName'),
|
'season': video_data.get('seasonName'),
|
||||||
'season_number': int_or_none(video_data.get('seasonNo')),
|
'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': video_data.get('title'),
|
||||||
'episode_number': int_or_none(video_data.get('episodeNo')),
|
'episode_number': int_or_none(video_data.get('episodeNo')),
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,6 @@ class HungamaSongIE(InfoExtractor):
|
||||||
'title': 'Lucky Ali - Kitni Haseen Zindagi',
|
'title': 'Lucky Ali - Kitni Haseen Zindagi',
|
||||||
'track': 'Kitni Haseen Zindagi',
|
'track': 'Kitni Haseen Zindagi',
|
||||||
'artist': 'Lucky Ali',
|
'artist': 'Lucky Ali',
|
||||||
'album': None,
|
|
||||||
'release_year': 2000,
|
'release_year': 2000,
|
||||||
'thumbnail': 'https://stat2.hungama.ind.in/assets/images/default_images/da-200x200.png',
|
'thumbnail': 'https://stat2.hungama.ind.in/assets/images/default_images/da-200x200.png',
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,7 +9,7 @@ class MonsterSirenHypergryphMusicIE(InfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '514562',
|
'id': '514562',
|
||||||
'ext': 'wav',
|
'ext': 'wav',
|
||||||
'artist': ['塞壬唱片-MSR'],
|
'artists': ['塞壬唱片-MSR'],
|
||||||
'album': 'Flame Shadow',
|
'album': 'Flame Shadow',
|
||||||
'title': 'Flame Shadow',
|
'title': 'Flame Shadow',
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,6 @@ def _real_extract(self, url):
|
||||||
'url': traverse_obj(json_data, ('player', 'songDetail', 'sourceUrl')),
|
'url': traverse_obj(json_data, ('player', 'songDetail', 'sourceUrl')),
|
||||||
'ext': 'wav',
|
'ext': 'wav',
|
||||||
'vcodec': 'none',
|
'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'))
|
'album': traverse_obj(json_data, ('musicPlay', 'albumDetail', 'name'))
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,7 +231,6 @@ class LBRYIE(LBRYBaseIE):
|
||||||
'release_timestamp': int,
|
'release_timestamp': int,
|
||||||
'release_date': str,
|
'release_date': str,
|
||||||
'tags': list,
|
'tags': list,
|
||||||
'duration': None,
|
|
||||||
'channel': 'RT',
|
'channel': 'RT',
|
||||||
'channel_id': 'fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',
|
'channel_id': 'fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',
|
||||||
'channel_url': 'https://odysee.com/@RT:fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',
|
'channel_url': 'https://odysee.com/@RT:fdd11cb3ab75f95efb7b3bc2d726aa13ac915b66',
|
||||||
|
|
|
@ -22,8 +22,6 @@ class LikeeIE(InfoExtractor):
|
||||||
'description': 'md5:9a7ebe816f0e78722ee5ed76f75983b4',
|
'description': 'md5:9a7ebe816f0e78722ee5ed76f75983b4',
|
||||||
'thumbnail': r're:^https?://.+\.jpg',
|
'thumbnail': r're:^https?://.+\.jpg',
|
||||||
'uploader': 'Huỳnh Hồng Quân ',
|
'uploader': 'Huỳnh Hồng Quân ',
|
||||||
'play_count': int,
|
|
||||||
'download_count': int,
|
|
||||||
'artist': 'Huỳnh Hồng Quân ',
|
'artist': 'Huỳnh Hồng Quân ',
|
||||||
'timestamp': 1651571320,
|
'timestamp': 1651571320,
|
||||||
'upload_date': '20220503',
|
'upload_date': '20220503',
|
||||||
|
@ -44,11 +42,9 @@ class LikeeIE(InfoExtractor):
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'uploader': 'Vương Phước Nhi',
|
'uploader': 'Vương Phước Nhi',
|
||||||
'download_count': int,
|
|
||||||
'timestamp': 1651506835,
|
'timestamp': 1651506835,
|
||||||
'upload_date': '20220502',
|
'upload_date': '20220502',
|
||||||
'duration': 60024,
|
'duration': 60024,
|
||||||
'play_count': int,
|
|
||||||
'artist': 'Vương Phước Nhi',
|
'artist': 'Vương Phước Nhi',
|
||||||
'uploader_id': '649222262',
|
'uploader_id': '649222262',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
|
@ -65,9 +61,7 @@ class LikeeIE(InfoExtractor):
|
||||||
'duration': 9684,
|
'duration': 9684,
|
||||||
'uploader_id': 'fernanda_rivasg',
|
'uploader_id': 'fernanda_rivasg',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'play_count': int,
|
|
||||||
'artist': 'La Cami La✨',
|
'artist': 'La Cami La✨',
|
||||||
'download_count': int,
|
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'uploader': 'Fernanda Rivas🎶',
|
'uploader': 'Fernanda Rivas🎶',
|
||||||
'timestamp': 1614034308,
|
'timestamp': 1614034308,
|
||||||
|
@ -83,13 +77,11 @@ class LikeeIE(InfoExtractor):
|
||||||
'thumbnail': r're:^https?://.+\.jpg',
|
'thumbnail': r're:^https?://.+\.jpg',
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'duration': 18014,
|
'duration': 18014,
|
||||||
'play_count': int,
|
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'timestamp': 1611694774,
|
'timestamp': 1611694774,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'uploader': 'Fernanda Rivas🎶',
|
'uploader': 'Fernanda Rivas🎶',
|
||||||
'uploader_id': 'fernanda_rivasg',
|
'uploader_id': 'fernanda_rivasg',
|
||||||
'download_count': int,
|
|
||||||
'artist': 'ʟᴇʀɪᴋ_ᴜɴɪᴄᴏʀɴ♡︎',
|
'artist': 'ʟᴇʀɪᴋ_ᴜɴɪᴄᴏʀɴ♡︎',
|
||||||
'upload_date': '20210126',
|
'upload_date': '20210126',
|
||||||
},
|
},
|
||||||
|
@ -128,8 +120,6 @@ def _real_extract(self, url):
|
||||||
'description': info.get('share_desc'),
|
'description': info.get('share_desc'),
|
||||||
'view_count': int_or_none(info.get('video_count')),
|
'view_count': int_or_none(info.get('video_count')),
|
||||||
'like_count': int_or_none(info.get('likeCount')),
|
'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')),
|
'comment_count': int_or_none(info.get('comment_count')),
|
||||||
'uploader': str_or_none(info.get('nick_name')),
|
'uploader': str_or_none(info.get('nick_name')),
|
||||||
'uploader_id': str_or_none(info.get('likeeId')),
|
'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]+)'
|
_VALID_URL = r'https://player\.megaphone\.fm/(?P<id>[A-Z0-9]+)'
|
||||||
_EMBED_REGEX = [rf'<iframe[^>]*?\ssrc=["\'](?P<url>{_VALID_URL})']
|
_EMBED_REGEX = [rf'<iframe[^>]*?\ssrc=["\'](?P<url>{_VALID_URL})']
|
||||||
_TEST = {
|
_TEST = {
|
||||||
'url': 'https://player.megaphone.fm/GLT9749789991?"',
|
'url': 'https://player.megaphone.fm/GLT9749789991',
|
||||||
'md5': '4816a0de523eb3e972dc0dda2c191f96',
|
'md5': '4816a0de523eb3e972dc0dda2c191f96',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'GLT9749789991',
|
'id': 'GLT9749789991',
|
||||||
'ext': 'mp3',
|
'ext': 'mp3',
|
||||||
'title': '#97 What Kind Of Idiot Gets Phished?',
|
'title': '#97 What Kind Of Idiot Gets Phished?',
|
||||||
'thumbnail': r're:^https://.*\.png.*$',
|
'thumbnail': r're:^https://.*\.png.*$',
|
||||||
'duration': 1776.26375,
|
'duration': 1998.36,
|
||||||
'author': 'Reply All',
|
'creators': ['Reply All'],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ def _real_extract(self, url):
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'thumbnail': thumbnail,
|
'thumbnail': thumbnail,
|
||||||
'title': title,
|
'title': title,
|
||||||
'author': author,
|
'creators': [author] if author else None,
|
||||||
'duration': episode_data['duration'],
|
'duration': episode_data['duration'],
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,11 @@ def _return_info(self, track_json, album_json, id):
|
||||||
'track_number': track_json.get('number'),
|
'track_number': track_json.get('number'),
|
||||||
'url': format_field(track_json, 'url', 'https://www.musicdex.org/%s'),
|
'url': format_field(track_json, 'url', 'https://www.musicdex.org/%s'),
|
||||||
'duration': track_json.get('duration'),
|
'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'),
|
'like_count': track_json.get('likes_count'),
|
||||||
'view_count': track_json.get('plays'),
|
'view_count': track_json.get('plays'),
|
||||||
'artist': [artist.get('name') for artist in track_json.get('artists') or []],
|
'artists': [artist.get('name') for artist in track_json.get('artists') or []],
|
||||||
'album_artist': [artist.get('name') for artist in album_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'),
|
'thumbnail': format_field(album_json, 'image', 'https://www.musicdex.org/%s'),
|
||||||
'album': album_json.get('name'),
|
'album': album_json.get('name'),
|
||||||
'release_year': try_get(album_json, lambda x: date_from_str(unified_strdate(x['release_date'])).year),
|
'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': 'dual existence',
|
||||||
'track_number': 1,
|
'track_number': 1,
|
||||||
'duration': 266000,
|
'duration': 266000,
|
||||||
'genre': ['Anime'],
|
'genres': ['Anime'],
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'artist': ['fripSide'],
|
'artists': ['fripSide'],
|
||||||
'album_artist': ['fripSide'],
|
'album_artists': ['fripSide'],
|
||||||
'thumbnail': 'https://www.musicdex.org/storage/album/9iDIam1DHTVqUG4UclFIEq1WAFGXfPW4y0TtZa91.png',
|
'thumbnail': 'https://www.musicdex.org/storage/album/9iDIam1DHTVqUG4UclFIEq1WAFGXfPW4y0TtZa91.png',
|
||||||
'album': 'To Aru Kagaku no Railgun T OP2 Single - dual existence',
|
'album': 'To Aru Kagaku no Railgun T OP2 Single - dual existence',
|
||||||
'release_year': 2020
|
'release_year': 2020
|
||||||
|
@ -69,9 +69,9 @@ class MusicdexAlbumIE(MusicdexBaseIE):
|
||||||
'playlist_mincount': 28,
|
'playlist_mincount': 28,
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '56',
|
'id': '56',
|
||||||
'genre': ['OST'],
|
'genres': ['OST'],
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'artist': ['TENMON & Eiichiro Yanagi / minori'],
|
'artists': ['TENMON & Eiichiro Yanagi / minori'],
|
||||||
'title': 'ef - a tale of memories Original Soundtrack 2 ~fortissimo~',
|
'title': 'ef - a tale of memories Original Soundtrack 2 ~fortissimo~',
|
||||||
'release_year': 2008,
|
'release_year': 2008,
|
||||||
'thumbnail': 'https://www.musicdex.org/storage/album/2rSHkyYBYfB7sbvElpEyTMcUn6toY7AohOgJuDlE.jpg',
|
'thumbnail': 'https://www.musicdex.org/storage/album/2rSHkyYBYfB7sbvElpEyTMcUn6toY7AohOgJuDlE.jpg',
|
||||||
|
@ -88,9 +88,9 @@ def _real_extract(self, url):
|
||||||
'id': id,
|
'id': id,
|
||||||
'title': data_json.get('name'),
|
'title': data_json.get('name'),
|
||||||
'description': data_json.get('description'),
|
'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'),
|
'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'),
|
'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),
|
'release_year': try_get(data_json, lambda x: date_from_str(unified_strdate(x['release_date'])).year),
|
||||||
'entries': entries,
|
'entries': entries,
|
||||||
|
|
|
@ -118,7 +118,6 @@ class NekoHackerIE(InfoExtractor):
|
||||||
'artist': 'Neko Hacker',
|
'artist': 'Neko Hacker',
|
||||||
'track': 'md5:1a5fcbc96ca3c3265b1c6f9f79f30fd0',
|
'track': 'md5:1a5fcbc96ca3c3265b1c6f9f79f30fd0',
|
||||||
'track_number': 1,
|
'track_number': 1,
|
||||||
'duration': None
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -136,7 +135,6 @@ class NekoHackerIE(InfoExtractor):
|
||||||
'artist': 'Neko Hacker',
|
'artist': 'Neko Hacker',
|
||||||
'track': 'むじな de なじむ feat. 六科なじむ (CV: 日高里菜 )',
|
'track': 'むじな de なじむ feat. 六科なじむ (CV: 日高里菜 )',
|
||||||
'track_number': 2,
|
'track_number': 2,
|
||||||
'duration': None
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -154,7 +152,6 @@ class NekoHackerIE(InfoExtractor):
|
||||||
'artist': 'Neko Hacker',
|
'artist': 'Neko Hacker',
|
||||||
'track': '進め!むじなカンパニー (instrumental)',
|
'track': '進め!むじなカンパニー (instrumental)',
|
||||||
'track_number': 3,
|
'track_number': 3,
|
||||||
'duration': None
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -172,7 +169,6 @@ class NekoHackerIE(InfoExtractor):
|
||||||
'artist': 'Neko Hacker',
|
'artist': 'Neko Hacker',
|
||||||
'track': 'むじな de なじむ (instrumental)',
|
'track': 'むじな de なじむ (instrumental)',
|
||||||
'track_number': 4,
|
'track_number': 4,
|
||||||
'duration': None
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -163,8 +163,6 @@ class NiconicoIE(InfoExtractor):
|
||||||
'description': 'md5:15df8988e47a86f9e978af2064bf6d8e',
|
'description': 'md5:15df8988e47a86f9e978af2064bf6d8e',
|
||||||
'timestamp': 1341128008,
|
'timestamp': 1341128008,
|
||||||
'upload_date': '20120701',
|
'upload_date': '20120701',
|
||||||
'uploader': None,
|
|
||||||
'uploader_id': None,
|
|
||||||
'thumbnail': r're:https?://.*',
|
'thumbnail': r're:https?://.*',
|
||||||
'duration': 5271,
|
'duration': 5271,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
|
str_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ def _real_extract(self, url):
|
||||||
'episode_number': int_or_none(content.get('Episode')),
|
'episode_number': int_or_none(content.get('Episode')),
|
||||||
'season': season.get('Name'),
|
'season': season.get('Name'),
|
||||||
'season_number': int_or_none(season.get('Number')),
|
'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']),
|
'series': try_get(content, lambda x: x['Media']['Name']),
|
||||||
'tags': tags,
|
'tags': tags,
|
||||||
'categories': categories,
|
'categories': categories,
|
||||||
|
@ -109,10 +110,9 @@ class CPTwentyFourIE(InfoExtractor):
|
||||||
'title': 'WATCH: Truck rips ATM from Mississauga business',
|
'title': 'WATCH: Truck rips ATM from Mississauga business',
|
||||||
'description': 'md5:cf7498480885f080a754389a2b2f7073',
|
'description': 'md5:cf7498480885f080a754389a2b2f7073',
|
||||||
'timestamp': 1637618377,
|
'timestamp': 1637618377,
|
||||||
'episode_number': None,
|
|
||||||
'season': 'Season 0',
|
'season': 'Season 0',
|
||||||
'season_number': 0,
|
'season_number': 0,
|
||||||
'season_id': 57974,
|
'season_id': '57974',
|
||||||
'series': 'CTV News Toronto',
|
'series': 'CTV News Toronto',
|
||||||
'duration': 26.86,
|
'duration': 26.86,
|
||||||
'thumbnail': 'http://images2.9c9media.com/image_asset/2014_11_5_2eb609a0-475b-0132-fbd6-34b52f6f1279_jpg_2000x1125.jpg',
|
'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',
|
'upload_date': '20220722',
|
||||||
'thumbnail': 'https://nbg-img.fite.tv/img/606627_460x260.jpg',
|
'thumbnail': 'https://nbg-img.fite.tv/img/606627_460x260.jpg',
|
||||||
'description': '29 сек',
|
'description': '29 сек',
|
||||||
'view_count': False
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -34,7 +33,6 @@ class NovaPlayIE(InfoExtractor):
|
||||||
'upload_date': '20220722',
|
'upload_date': '20220722',
|
||||||
'thumbnail': 'https://nbg-img.fite.tv/img/606609_460x260.jpg',
|
'thumbnail': 'https://nbg-img.fite.tv/img/606609_460x260.jpg',
|
||||||
'description': '29 сек',
|
'description': '29 сек',
|
||||||
'view_count': False
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
parse_age_limit,
|
parse_age_limit,
|
||||||
parse_qs,
|
parse_qs,
|
||||||
|
str_or_none,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
|
@ -32,7 +33,7 @@ class OnDemandKoreaIE(InfoExtractor):
|
||||||
'duration': 5486.955,
|
'duration': 5486.955,
|
||||||
'release_date': '20220924',
|
'release_date': '20220924',
|
||||||
'series': 'Ask Us Anything',
|
'series': 'Ask Us Anything',
|
||||||
'series_id': 11790,
|
'series_id': '11790',
|
||||||
'episode_number': 351,
|
'episode_number': 351,
|
||||||
'episode': 'Jung Sung-ho, Park Seul-gi, Kim Bo-min, Yang Seung-won',
|
'episode': 'Jung Sung-ho, Park Seul-gi, Kim Bo-min, Yang Seung-won',
|
||||||
},
|
},
|
||||||
|
@ -47,7 +48,7 @@ class OnDemandKoreaIE(InfoExtractor):
|
||||||
'duration': 1586.0,
|
'duration': 1586.0,
|
||||||
'release_date': '20231001',
|
'release_date': '20231001',
|
||||||
'series': 'Breakup Probation, A Week',
|
'series': 'Breakup Probation, A Week',
|
||||||
'series_id': 22912,
|
'series_id': '22912',
|
||||||
'episode_number': 8,
|
'episode_number': 8,
|
||||||
'episode': 'E08',
|
'episode': 'E08',
|
||||||
},
|
},
|
||||||
|
@ -117,7 +118,7 @@ def if_series(key=None):
|
||||||
'duration': ('duration', {functools.partial(float_or_none, scale=1000)}),
|
'duration': ('duration', {functools.partial(float_or_none, scale=1000)}),
|
||||||
'age_limit': ('age_rating', 'name', {lambda x: x.replace('R', '')}, {parse_age_limit}),
|
'age_limit': ('age_rating', 'name', {lambda x: x.replace('R', '')}, {parse_age_limit}),
|
||||||
'series': ('episode', {if_series(key='program')}, 'title'),
|
'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': ('episode', {if_series(key='title')}),
|
||||||
'episode_number': ('episode', {if_series(key='number')}, {int_or_none}),
|
'episode_number': ('episode', {if_series(key='number')}, {int_or_none}),
|
||||||
}, get_all=False),
|
}, 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',
|
'url': 'https://tvthek.orf.at/profile/ZIB-2/1211/ZIB-2/14121079/Umfrage-Welches-Tier-ist-Sebastian-Kurz/15083150',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '14121079',
|
'id': '14121079',
|
||||||
'playlist_count': 1
|
|
||||||
},
|
},
|
||||||
'playlist': [{
|
'playlist': [{
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
|
|
@ -157,7 +157,6 @@ class PlayVidsIE(PeekVidsBaseIE):
|
||||||
'display_id': '47iUho33toY',
|
'display_id': '47iUho33toY',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'KATEE OWEN STRIPTIASE IN SEXY RED LINGERIE',
|
'title': 'KATEE OWEN STRIPTIASE IN SEXY RED LINGERIE',
|
||||||
'description': None,
|
|
||||||
'timestamp': 1507052209,
|
'timestamp': 1507052209,
|
||||||
'upload_date': '20171003',
|
'upload_date': '20171003',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
|
@ -176,7 +175,6 @@ class PlayVidsIE(PeekVidsBaseIE):
|
||||||
'display_id': 'z3_7iwWCmqt',
|
'display_id': 'z3_7iwWCmqt',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'SEXY TEEN FILIPINA STRIPTEASE - Beautiful Pinay Bargirl Strips and Dances',
|
'title': 'SEXY TEEN FILIPINA STRIPTEASE - Beautiful Pinay Bargirl Strips and Dances',
|
||||||
'description': None,
|
|
||||||
'timestamp': 1607470323,
|
'timestamp': 1607470323,
|
||||||
'upload_date': '20201208',
|
'upload_date': '20201208',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
|
|
|
@ -35,7 +35,6 @@ class PladformIE(InfoExtractor):
|
||||||
'thumbnail': str,
|
'thumbnail': str,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'description': str,
|
'description': str,
|
||||||
'category': list,
|
|
||||||
'uploader_id': '12082',
|
'uploader_id': '12082',
|
||||||
'uploader': 'Comedy Club',
|
'uploader': 'Comedy Club',
|
||||||
'duration': 367,
|
'duration': 367,
|
||||||
|
|
|
@ -20,7 +20,6 @@ class PlanetMarathiIE(InfoExtractor):
|
||||||
'title': 'ek unad divas',
|
'title': 'ek unad divas',
|
||||||
'alt_title': 'चित्रपट',
|
'alt_title': 'चित्रपट',
|
||||||
'description': 'md5:41c7ed6b041c2fea9820a3f3125bd881',
|
'description': 'md5:41c7ed6b041c2fea9820a3f3125bd881',
|
||||||
'season_number': None,
|
|
||||||
'episode_number': 1,
|
'episode_number': 1,
|
||||||
'duration': 5539,
|
'duration': 5539,
|
||||||
'upload_date': '20210829',
|
'upload_date': '20210829',
|
||||||
|
|
|
@ -29,7 +29,7 @@ class PodchaserIE(InfoExtractor):
|
||||||
'duration': 3708,
|
'duration': 3708,
|
||||||
'timestamp': 1636531259,
|
'timestamp': 1636531259,
|
||||||
'upload_date': '20211110',
|
'upload_date': '20211110',
|
||||||
'rating': 4.0
|
'average_rating': 4.0
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.podchaser.com/podcasts/the-bone-zone-28853',
|
'url': 'https://www.podchaser.com/podcasts/the-bone-zone-28853',
|
||||||
|
@ -59,7 +59,7 @@ def _parse_episode(episode, podcast):
|
||||||
'thumbnail': episode.get('image_url'),
|
'thumbnail': episode.get('image_url'),
|
||||||
'duration': str_to_int(episode.get('length')),
|
'duration': str_to_int(episode.get('length')),
|
||||||
'timestamp': unified_timestamp(episode.get('air_date')),
|
'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')))),
|
'categories': list(set(traverse_obj(podcast, (('summary', None), 'categories', ..., 'text')))),
|
||||||
'tags': traverse_obj(podcast, ('tags', ..., 'text')),
|
'tags': traverse_obj(podcast, ('tags', ..., 'text')),
|
||||||
'series': podcast.get('title'),
|
'series': podcast.get('title'),
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import json
|
import json
|
||||||
from datetime import date
|
|
||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
|
@ -10,6 +9,7 @@
|
||||||
int_or_none,
|
int_or_none,
|
||||||
make_archive_id,
|
make_archive_id,
|
||||||
mimetype2ext,
|
mimetype2ext,
|
||||||
|
str_or_none,
|
||||||
urljoin,
|
urljoin,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import traverse_obj
|
from ..utils.traversal import traverse_obj
|
||||||
|
@ -25,8 +25,8 @@ class Pr0grammIE(InfoExtractor):
|
||||||
'title': 'pr0gramm-5466437 by g11st',
|
'title': 'pr0gramm-5466437 by g11st',
|
||||||
'tags': ['Neon Genesis Evangelion', 'Touhou Project', 'Fly me to the Moon', 'Marisad', 'Marisa Kirisame', 'video', 'sound', 'Marisa', 'Anime'],
|
'tags': ['Neon Genesis Evangelion', 'Touhou Project', 'Fly me to the Moon', 'Marisad', 'Marisa Kirisame', 'video', 'sound', 'Marisa', 'Anime'],
|
||||||
'uploader': 'g11st',
|
'uploader': 'g11st',
|
||||||
'uploader_id': 394718,
|
'uploader_id': '394718',
|
||||||
'upload_timestamp': 1671590240,
|
'timestamp': 1671590240,
|
||||||
'upload_date': '20221221',
|
'upload_date': '20221221',
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
|
@ -42,8 +42,8 @@ class Pr0grammIE(InfoExtractor):
|
||||||
'title': 'pr0gramm-3052805 by Hansking1',
|
'title': 'pr0gramm-3052805 by Hansking1',
|
||||||
'tags': 'count:15',
|
'tags': 'count:15',
|
||||||
'uploader': 'Hansking1',
|
'uploader': 'Hansking1',
|
||||||
'uploader_id': 385563,
|
'uploader_id': '385563',
|
||||||
'upload_timestamp': 1552930408,
|
'timestamp': 1552930408,
|
||||||
'upload_date': '20190318',
|
'upload_date': '20190318',
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
|
@ -60,8 +60,8 @@ class Pr0grammIE(InfoExtractor):
|
||||||
'title': 'pr0gramm-5848332 by erd0pfel',
|
'title': 'pr0gramm-5848332 by erd0pfel',
|
||||||
'tags': 'count:18',
|
'tags': 'count:18',
|
||||||
'uploader': 'erd0pfel',
|
'uploader': 'erd0pfel',
|
||||||
'uploader_id': 349094,
|
'uploader_id': '349094',
|
||||||
'upload_timestamp': 1694489652,
|
'timestamp': 1694489652,
|
||||||
'upload_date': '20230912',
|
'upload_date': '20230912',
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
|
@ -77,8 +77,8 @@ class Pr0grammIE(InfoExtractor):
|
||||||
'title': 'pr0gramm-5895149 by algoholigSeeManThrower',
|
'title': 'pr0gramm-5895149 by algoholigSeeManThrower',
|
||||||
'tags': 'count:19',
|
'tags': 'count:19',
|
||||||
'uploader': 'algoholigSeeManThrower',
|
'uploader': 'algoholigSeeManThrower',
|
||||||
'uploader_id': 457556,
|
'uploader_id': '457556',
|
||||||
'upload_timestamp': 1697580902,
|
'timestamp': 1697580902,
|
||||||
'upload_date': '20231018',
|
'upload_date': '20231018',
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
|
@ -192,11 +192,10 @@ def _real_extract(self, url):
|
||||||
'_old_archive_ids': [make_archive_id('Pr0grammStatic', video_id)],
|
'_old_archive_ids': [make_archive_id('Pr0grammStatic', video_id)],
|
||||||
**traverse_obj(video_info, {
|
**traverse_obj(video_info, {
|
||||||
'uploader': ('user', {str}),
|
'uploader': ('user', {str}),
|
||||||
'uploader_id': ('userId', {int}),
|
'uploader_id': ('userId', {str_or_none}),
|
||||||
'like_count': ('up', {int}),
|
'like_count': ('up', {int}),
|
||||||
'dislike_count': ('down', {int}),
|
'dislike_count': ('down', {int}),
|
||||||
'upload_timestamp': ('created', {int}),
|
'timestamp': ('created', {int}),
|
||||||
'upload_date': ('created', {int}, {date.fromtimestamp}, {lambda x: x.strftime('%Y%m%d')}),
|
|
||||||
'thumbnail': ('thumb', {lambda x: urljoin('https://thumb.pr0gramm.com', x)})
|
'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-',
|
'display_id': 'Beverly-is-back-like-a-heart-attack-',
|
||||||
'timestamp': 1661391575,
|
'timestamp': 1661391575,
|
||||||
'uploader': 'Devonanustart',
|
'uploader': 'Devonanustart',
|
||||||
'channel_id': 4,
|
'channel_id': '4',
|
||||||
'duration': 7918,
|
'duration': 7918,
|
||||||
'cast': ['Devonanustart', 'Phonelosers'],
|
'cast': ['Devonanustart', 'Phonelosers'],
|
||||||
'description': '',
|
'description': '',
|
||||||
|
@ -33,7 +33,7 @@ class PrankCastIE(InfoExtractor):
|
||||||
'display_id': 'NOT-COOL',
|
'display_id': 'NOT-COOL',
|
||||||
'timestamp': 1665028364,
|
'timestamp': 1665028364,
|
||||||
'uploader': 'phonelosers',
|
'uploader': 'phonelosers',
|
||||||
'channel_id': 6,
|
'channel_id': '6',
|
||||||
'duration': 4044,
|
'duration': 4044,
|
||||||
'cast': ['phonelosers'],
|
'cast': ['phonelosers'],
|
||||||
'description': '',
|
'description': '',
|
||||||
|
@ -60,7 +60,7 @@ def _real_extract(self, url):
|
||||||
'url': f'{json_info["broadcast_url"]}{json_info["recording_hash"]}.mp3',
|
'url': f'{json_info["broadcast_url"]}{json_info["recording_hash"]}.mp3',
|
||||||
'timestamp': start_date,
|
'timestamp': start_date,
|
||||||
'uploader': uploader,
|
'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),
|
'duration': try_call(lambda: parse_iso8601(json_info['end_date']) - start_date),
|
||||||
'cast': list(filter(None, [uploader] + traverse_obj(guests_json, (..., 'name')))),
|
'cast': list(filter(None, [uploader] + traverse_obj(guests_json, (..., 'name')))),
|
||||||
'description': json_info.get('broadcast_description'),
|
'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.',
|
'title': 'Taylor Swift entranhando-se que nem uma espada no ventre dos fãs.',
|
||||||
'release_date': '20231025',
|
'release_date': '20231025',
|
||||||
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
'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',
|
'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',
|
'title': 'Convença-me num minuto que os lobisomens existem',
|
||||||
'release_date': '20231026',
|
'release_date': '20231026',
|
||||||
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
'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',
|
'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',
|
'description': 'md5:8a82beeb372641614772baab7246245f',
|
||||||
'release_date': '20231101',
|
'release_date': '20231101',
|
||||||
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
||||||
'season': 2
|
'season': 'Season 2',
|
||||||
|
'season_number': 2,
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
# inconsistant md5
|
# inconsistant md5
|
||||||
|
@ -68,7 +71,8 @@ class RadioComercialIE(InfoExtractor):
|
||||||
'title': 'T.N.T 29 de outubro',
|
'title': 'T.N.T 29 de outubro',
|
||||||
'release_date': '20231029',
|
'release_date': '20231029',
|
||||||
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
'thumbnail': r're:https://radiocomercial.pt/upload/[^.]+.jpg',
|
||||||
'season': 2023
|
'season': 'Season 2023',
|
||||||
|
'season_number': 2023,
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
@ -82,7 +86,7 @@ def _real_extract(self, url):
|
||||||
'release_date': unified_strdate(get_element_by_class(
|
'release_date': unified_strdate(get_element_by_class(
|
||||||
'date', get_element_html_by_class('descriptions', webpage) or '')),
|
'date', get_element_html_by_class('descriptions', webpage) or '')),
|
||||||
'thumbnail': self._og_search_thumbnail(webpage),
|
'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'),
|
'url': extract_attributes(get_element_html_by_class('audiofile', webpage) or '').get('href'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,10 +38,6 @@ class RadLiveIE(InfoExtractor):
|
||||||
'language': 'en',
|
'language': 'en',
|
||||||
'thumbnail': 'https://lsp.littlstar.com/channels/WHISTLE/BAD_JOKES/SEASON_1/BAD_JOKES_101/poster.jpg',
|
'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',
|
'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': 'E01: Bad Jokes 1',
|
||||||
'episode_number': 1,
|
'episode_number': 1,
|
||||||
'episode_id': '336',
|
'episode_id': '336',
|
||||||
|
|
|
@ -229,7 +229,7 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE):
|
||||||
'age_limit': 2,
|
'age_limit': 2,
|
||||||
'cast': ['Verrel Bramasta', 'Ranty Maria', 'Riza Syah', 'Ivan Fadilla', 'Nicole Parham', 'Dll', 'Aviv Elham'],
|
'cast': ['Verrel Bramasta', 'Ranty Maria', 'Riza Syah', 'Ivan Fadilla', 'Nicole Parham', 'Dll', 'Aviv Elham'],
|
||||||
'display_id': 'putri-untuk-pangeran',
|
'display_id': 'putri-untuk-pangeran',
|
||||||
'tag': 'count:18',
|
'tags': 'count:18',
|
||||||
},
|
},
|
||||||
}, { # No episodes
|
}, { # No episodes
|
||||||
'url': 'https://www.rctiplus.com/programs/615/inews-pagi',
|
'url': 'https://www.rctiplus.com/programs/615/inews-pagi',
|
||||||
|
@ -239,7 +239,7 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE):
|
||||||
'title': 'iNews Pagi',
|
'title': 'iNews Pagi',
|
||||||
'description': 'md5:f18ee3d4643cfb41c358e5a9b693ee04',
|
'description': 'md5:f18ee3d4643cfb41c358e5a9b693ee04',
|
||||||
'age_limit': 2,
|
'age_limit': 2,
|
||||||
'tag': 'count:11',
|
'tags': 'count:11',
|
||||||
'display_id': 'inews-pagi',
|
'display_id': 'inews-pagi',
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -327,8 +327,8 @@ def _real_extract(self, url):
|
||||||
'age_limit': try_get(series_meta, lambda x: self._AGE_RATINGS[x['age_restriction'][0]['code']]),
|
'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'),
|
'cast': traverse_obj(series_meta, (('starring', 'creator', 'writer'), ..., 'name'),
|
||||||
expected_type=lambda x: strip_or_none(x) or None),
|
expected_type=lambda x: strip_or_none(x) or None),
|
||||||
'tag': traverse_obj(series_meta, ('tag', ..., 'name'),
|
'tags': traverse_obj(series_meta, ('tag', ..., 'name'),
|
||||||
expected_type=lambda x: strip_or_none(x) or None),
|
expected_type=lambda x: strip_or_none(x) or None),
|
||||||
}
|
}
|
||||||
return self.playlist_result(
|
return self.playlist_result(
|
||||||
self._series_entries(series_id, display_id, video_type, metadata), series_id,
|
self._series_entries(series_id, display_id, video_type, metadata), series_id,
|
||||||
|
|
|
@ -38,7 +38,7 @@ class RokfinIE(InfoExtractor):
|
||||||
'upload_date': '20211023',
|
'upload_date': '20211023',
|
||||||
'timestamp': 1634998029,
|
'timestamp': 1634998029,
|
||||||
'channel': 'Jimmy Dore',
|
'channel': 'Jimmy Dore',
|
||||||
'channel_id': 65429,
|
'channel_id': '65429',
|
||||||
'channel_url': 'https://rokfin.com/TheJimmyDoreShow',
|
'channel_url': 'https://rokfin.com/TheJimmyDoreShow',
|
||||||
'availability': 'public',
|
'availability': 'public',
|
||||||
'live_status': 'not_live',
|
'live_status': 'not_live',
|
||||||
|
@ -56,7 +56,7 @@ class RokfinIE(InfoExtractor):
|
||||||
'upload_date': '20190412',
|
'upload_date': '20190412',
|
||||||
'timestamp': 1555052644,
|
'timestamp': 1555052644,
|
||||||
'channel': 'Ron Placone',
|
'channel': 'Ron Placone',
|
||||||
'channel_id': 10,
|
'channel_id': '10',
|
||||||
'channel_url': 'https://rokfin.com/RonPlacone',
|
'channel_url': 'https://rokfin.com/RonPlacone',
|
||||||
'availability': 'public',
|
'availability': 'public',
|
||||||
'live_status': 'not_live',
|
'live_status': 'not_live',
|
||||||
|
@ -73,7 +73,7 @@ class RokfinIE(InfoExtractor):
|
||||||
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
|
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
|
||||||
'description': 'md5:324ce2d3e3b62e659506409e458b9d8e',
|
'description': 'md5:324ce2d3e3b62e659506409e458b9d8e',
|
||||||
'channel': 'TLAVagabond',
|
'channel': 'TLAVagabond',
|
||||||
'channel_id': 53856,
|
'channel_id': '53856',
|
||||||
'channel_url': 'https://rokfin.com/TLAVagabond',
|
'channel_url': 'https://rokfin.com/TLAVagabond',
|
||||||
'availability': 'public',
|
'availability': 'public',
|
||||||
'is_live': False,
|
'is_live': False,
|
||||||
|
@ -86,7 +86,6 @@ class RokfinIE(InfoExtractor):
|
||||||
'dislike_count': int,
|
'dislike_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'tags': ['FreeThinkingMedia^'],
|
'tags': ['FreeThinkingMedia^'],
|
||||||
'duration': None,
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://rokfin.com/post/126703/Brave-New-World--Aldous-Huxley-DEEPDIVE--Chpts-13--Quite-Frankly--Jay-Dyer',
|
'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',
|
'title': 'Brave New World - Aldous Huxley DEEPDIVE! (Chpts 1-3) - Quite Frankly & Jay Dyer',
|
||||||
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
|
'thumbnail': r're:https://img\.production\.rokfin\.com/.+',
|
||||||
'channel': 'Jay Dyer',
|
'channel': 'Jay Dyer',
|
||||||
'channel_id': 186881,
|
'channel_id': '186881',
|
||||||
'channel_url': 'https://rokfin.com/jaydyer',
|
'channel_url': 'https://rokfin.com/jaydyer',
|
||||||
'availability': 'premium_only',
|
'availability': 'premium_only',
|
||||||
'live_status': 'not_live',
|
'live_status': 'not_live',
|
||||||
|
@ -116,7 +115,7 @@ class RokfinIE(InfoExtractor):
|
||||||
'title': 'The Grayzone live on Nordstream blame game',
|
'title': 'The Grayzone live on Nordstream blame game',
|
||||||
'thumbnail': r're:https://image\.v\.rokfin\.com/.+',
|
'thumbnail': r're:https://image\.v\.rokfin\.com/.+',
|
||||||
'channel': 'Max Blumenthal',
|
'channel': 'Max Blumenthal',
|
||||||
'channel_id': 248902,
|
'channel_id': '248902',
|
||||||
'channel_url': 'https://rokfin.com/MaxBlumenthal',
|
'channel_url': 'https://rokfin.com/MaxBlumenthal',
|
||||||
'availability': 'premium_only',
|
'availability': 'premium_only',
|
||||||
'live_status': 'was_live',
|
'live_status': 'was_live',
|
||||||
|
@ -174,7 +173,7 @@ def _real_extract(self, url):
|
||||||
'like_count': int_or_none(metadata.get('likeCount')),
|
'like_count': int_or_none(metadata.get('likeCount')),
|
||||||
'dislike_count': int_or_none(metadata.get('dislikeCount')),
|
'dislike_count': int_or_none(metadata.get('dislikeCount')),
|
||||||
'channel': str_or_none(traverse_obj(metadata, ('createdBy', 'name'), ('creator', 'name'))),
|
'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,
|
'channel_url': url_or_none(f'https://rokfin.com/{uploader}') if uploader else None,
|
||||||
'timestamp': timestamp,
|
'timestamp': timestamp,
|
||||||
'release_timestamp': timestamp if live_status != 'not_live' else None,
|
'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_url': 'https://rumble.com/c/LofiGirl',
|
||||||
'channel': 'Lofi Girl',
|
'channel': 'Lofi Girl',
|
||||||
'thumbnail': r're:https://.+\.jpg',
|
'thumbnail': r're:https://.+\.jpg',
|
||||||
'duration': None,
|
|
||||||
'uploader': 'Lofi Girl',
|
'uploader': 'Lofi Girl',
|
||||||
'live_status': 'is_live',
|
'live_status': 'is_live',
|
||||||
},
|
},
|
||||||
|
|
|
@ -46,7 +46,7 @@ def _extract_info(self, video, video_id=None, require_title=True):
|
||||||
'uploader': try_get(video, lambda x: x['author']['name']),
|
'uploader': try_get(video, lambda x: x['author']['name']),
|
||||||
'uploader_id': compat_str(uploader_id) if uploader_id else None,
|
'uploader_id': compat_str(uploader_id) if uploader_id else None,
|
||||||
'timestamp': unified_timestamp(video.get('created_ts')),
|
'timestamp': unified_timestamp(video.get('created_ts')),
|
||||||
'category': [category] if category else None,
|
'categories': [category] if category else None,
|
||||||
'age_limit': age_limit,
|
'age_limit': age_limit,
|
||||||
'view_count': int_or_none(video.get('hits')),
|
'view_count': int_or_none(video.get('hits')),
|
||||||
'comment_count': int_or_none(video.get('comments_count')),
|
'comment_count': int_or_none(video.get('comments_count')),
|
||||||
|
@ -112,7 +112,7 @@ class RutubeIE(RutubeBaseIE):
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'thumbnail': 'http://pic.rutubelist.ru/video/d2/a0/d2a0aec998494a396deafc7ba2c82add.jpg',
|
'thumbnail': 'http://pic.rutubelist.ru/video/d2/a0/d2a0aec998494a396deafc7ba2c82add.jpg',
|
||||||
'category': ['Новости и СМИ'],
|
'categories': ['Новости и СМИ'],
|
||||||
'chapters': [],
|
'chapters': [],
|
||||||
},
|
},
|
||||||
'expected_warnings': ['Unable to download f4m'],
|
'expected_warnings': ['Unable to download f4m'],
|
||||||
|
@ -144,7 +144,7 @@ class RutubeIE(RutubeBaseIE):
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'thumbnail': 'http://pic.rutubelist.ru/video/f2/d4/f2d42b54be0a6e69c1c22539e3152156.jpg',
|
'thumbnail': 'http://pic.rutubelist.ru/video/f2/d4/f2d42b54be0a6e69c1c22539e3152156.jpg',
|
||||||
'category': ['Видеоигры'],
|
'categories': ['Видеоигры'],
|
||||||
'chapters': [],
|
'chapters': [],
|
||||||
},
|
},
|
||||||
'expected_warnings': ['Unable to download f4m'],
|
'expected_warnings': ['Unable to download f4m'],
|
||||||
|
@ -154,7 +154,7 @@ class RutubeIE(RutubeBaseIE):
|
||||||
'id': 'c65b465ad0c98c89f3b25cb03dcc87c6',
|
'id': 'c65b465ad0c98c89f3b25cb03dcc87c6',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'chapters': 'count:4',
|
'chapters': 'count:4',
|
||||||
'category': ['Бизнес и предпринимательство'],
|
'categories': ['Бизнес и предпринимательство'],
|
||||||
'description': 'md5:252feac1305257d8c1bab215cedde75d',
|
'description': 'md5:252feac1305257d8c1bab215cedde75d',
|
||||||
'thumbnail': 'http://pic.rutubelist.ru/video/71/8f/718f27425ea9706073eb80883dd3787b.png',
|
'thumbnail': 'http://pic.rutubelist.ru/video/71/8f/718f27425ea9706073eb80883dd3787b.png',
|
||||||
'duration': 782,
|
'duration': 782,
|
||||||
|
|
|
@ -44,8 +44,6 @@ class SBSIE(InfoExtractor):
|
||||||
'timestamp': 1408613220,
|
'timestamp': 1408613220,
|
||||||
'upload_date': '20140821',
|
'upload_date': '20140821',
|
||||||
'uploader': 'SBSC',
|
'uploader': 'SBSC',
|
||||||
'tags': None,
|
|
||||||
'categories': None,
|
|
||||||
},
|
},
|
||||||
'expected_warnings': ['Unable to download JSON metadata'],
|
'expected_warnings': ['Unable to download JSON metadata'],
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -10,7 +10,7 @@ class SkebIE(InfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '466853',
|
'id': '466853',
|
||||||
'title': '内容はおまかせします! by 姫ノ森りぃる@一周年',
|
'title': '内容はおまかせします! by 姫ノ森りぃる@一周年',
|
||||||
'descripion': 'md5:1ec50901efc3437cfbfe3790468d532d',
|
'description': 'md5:1ec50901efc3437cfbfe3790468d532d',
|
||||||
'uploader': '姫ノ森りぃる@一周年',
|
'uploader': '姫ノ森りぃる@一周年',
|
||||||
'uploader_id': 'riiru_wm',
|
'uploader_id': 'riiru_wm',
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
|
@ -34,7 +34,7 @@ class SkebIE(InfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '489408',
|
'id': '489408',
|
||||||
'title': 'いつもお世話になってお... by 古川ノブ@音楽とVlo...',
|
'title': 'いつもお世話になってお... by 古川ノブ@音楽とVlo...',
|
||||||
'descripion': 'md5:5adc2e41d06d33b558bf7b1faeb7b9c2',
|
'description': 'md5:5adc2e41d06d33b558bf7b1faeb7b9c2',
|
||||||
'uploader': '古川ノブ@音楽とVlogのVtuber',
|
'uploader': '古川ノブ@音楽とVlogのVtuber',
|
||||||
'uploader_id': 'furukawa_nob',
|
'uploader_id': 'furukawa_nob',
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
|
@ -61,12 +61,12 @@ class SkebIE(InfoExtractor):
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '6',
|
'id': '6',
|
||||||
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
||||||
'descripion': 'md5:aa6cbf2ba320b50bce219632de195f07',
|
'description': 'md5:aa6cbf2ba320b50bce219632de195f07',
|
||||||
'_type': 'playlist',
|
'_type': 'playlist',
|
||||||
'entries': [{
|
'entries': [{
|
||||||
'id': '486430',
|
'id': '486430',
|
||||||
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
||||||
'descripion': 'md5:aa6cbf2ba320b50bce219632de195f07',
|
'description': 'md5:aa6cbf2ba320b50bce219632de195f07',
|
||||||
}, {
|
}, {
|
||||||
'id': '486431',
|
'id': '486431',
|
||||||
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
'title': 'ヒロ。\n\n私のキャラク... by 諸々',
|
||||||
|
@ -81,7 +81,7 @@ def _real_extract(self, url):
|
||||||
parent = {
|
parent = {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'title': nuxt_data.get('title'),
|
'title': nuxt_data.get('title'),
|
||||||
'descripion': nuxt_data.get('description'),
|
'description': nuxt_data.get('description'),
|
||||||
'uploader': traverse_obj(nuxt_data, ('creator', 'name')),
|
'uploader': traverse_obj(nuxt_data, ('creator', 'name')),
|
||||||
'uploader_id': traverse_obj(nuxt_data, ('creator', 'screen_name')),
|
'uploader_id': traverse_obj(nuxt_data, ('creator', 'screen_name')),
|
||||||
'age_limit': 18 if nuxt_data.get('nsfw') else 0,
|
'age_limit': 18 if nuxt_data.get('nsfw') else 0,
|
||||||
|
|
|
@ -21,7 +21,7 @@ class StagePlusVODConcertIE(InfoExtractor):
|
||||||
'id': 'vod_concert_APNM8GRFDPHMASJKBSPJACG',
|
'id': 'vod_concert_APNM8GRFDPHMASJKBSPJACG',
|
||||||
'title': 'Yuja Wang plays Rachmaninoff\'s Piano Concerto No. 2 – from Odeonsplatz',
|
'title': 'Yuja Wang plays Rachmaninoff\'s Piano Concerto No. 2 – from Odeonsplatz',
|
||||||
'description': 'md5:50f78ec180518c9bdb876bac550996fc',
|
'description': 'md5:50f78ec180518c9bdb876bac550996fc',
|
||||||
'artist': ['Yuja Wang', 'Lorenzo Viotti'],
|
'artists': ['Yuja Wang', 'Lorenzo Viotti'],
|
||||||
'upload_date': '20230331',
|
'upload_date': '20230331',
|
||||||
'timestamp': 1680249600,
|
'timestamp': 1680249600,
|
||||||
'release_date': '20210709',
|
'release_date': '20210709',
|
||||||
|
@ -40,10 +40,10 @@ class StagePlusVODConcertIE(InfoExtractor):
|
||||||
'release_timestamp': 1625788800,
|
'release_timestamp': 1625788800,
|
||||||
'duration': 2207,
|
'duration': 2207,
|
||||||
'chapters': 'count:5',
|
'chapters': 'count:5',
|
||||||
'artist': ['Yuja Wang'],
|
'artists': ['Yuja Wang'],
|
||||||
'composer': ['Sergei Rachmaninoff'],
|
'composers': ['Sergei Rachmaninoff'],
|
||||||
'album': 'Yuja Wang plays Rachmaninoff\'s Piano Concerto No. 2 – from Odeonsplatz',
|
'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': 'Piano Concerto No. 2 in C Minor, Op. 18',
|
||||||
'track_number': 1,
|
'track_number': 1,
|
||||||
'genre': 'Instrumental Concerto',
|
'genre': 'Instrumental Concerto',
|
||||||
|
@ -474,7 +474,7 @@ def _real_extract(self, url):
|
||||||
metadata = traverse_obj(data, {
|
metadata = traverse_obj(data, {
|
||||||
'title': 'title',
|
'title': 'title',
|
||||||
'description': ('shortDescription', {str}),
|
'description': ('shortDescription', {str}),
|
||||||
'artist': ('artists', 'edges', ..., 'node', 'name'),
|
'artists': ('artists', 'edges', ..., 'node', 'name'),
|
||||||
'timestamp': ('archiveReleaseDate', {unified_timestamp}),
|
'timestamp': ('archiveReleaseDate', {unified_timestamp}),
|
||||||
'release_timestamp': ('productionDate', {unified_timestamp}),
|
'release_timestamp': ('productionDate', {unified_timestamp}),
|
||||||
})
|
})
|
||||||
|
@ -494,7 +494,7 @@ def _real_extract(self, url):
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
'album': metadata.get('title'),
|
'album': metadata.get('title'),
|
||||||
'album_artist': metadata.get('artist'),
|
'album_artists': metadata.get('artist'),
|
||||||
'track_number': idx,
|
'track_number': idx,
|
||||||
**metadata,
|
**metadata,
|
||||||
**traverse_obj(video, {
|
**traverse_obj(video, {
|
||||||
|
@ -506,8 +506,8 @@ def _real_extract(self, url):
|
||||||
'title': 'title',
|
'title': 'title',
|
||||||
'start_time': ('mark', {float_or_none}),
|
'start_time': ('mark', {float_or_none}),
|
||||||
}),
|
}),
|
||||||
'artist': ('artists', 'edges', ..., 'node', 'name'),
|
'artists': ('artists', 'edges', ..., 'node', 'name'),
|
||||||
'composer': ('work', 'composers', ..., 'name'),
|
'composers': ('work', 'composers', ..., 'name'),
|
||||||
'genre': ('work', 'genre', 'title'),
|
'genre': ('work', 'genre', 'title'),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
extract_attributes,
|
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
extract_attributes,
|
||||||
get_element_by_class,
|
get_element_by_class,
|
||||||
|
str_or_none,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +31,6 @@ class SteamIE(InfoExtractor):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Terraria video 256785003',
|
'title': 'Terraria video 256785003',
|
||||||
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
|
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
|
||||||
'n_entries': 2,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -39,9 +39,7 @@ class SteamIE(InfoExtractor):
|
||||||
'id': '2040428',
|
'id': '2040428',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Terraria video 2040428',
|
'title': 'Terraria video 2040428',
|
||||||
'playlist_index': 2,
|
|
||||||
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
|
'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/',
|
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '256757115',
|
'id': '271590',
|
||||||
'title': 'Grand Theft Auto V video 256757115',
|
'title': 'Grand Theft Auto V',
|
||||||
'ext': 'mp4',
|
|
||||||
'thumbnail': r're:^https://cdn\.[^\.]+\.steamstatic\.com',
|
|
||||||
'n_entries': 20,
|
|
||||||
},
|
},
|
||||||
|
'playlist_count': 23,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
@ -136,7 +132,7 @@ class SteamCommunityBroadcastIE(InfoExtractor):
|
||||||
'id': '76561199073851486',
|
'id': '76561199073851486',
|
||||||
'title': r're:Steam Community :: pepperm!nt :: Broadcast 2022-06-26 \d{2}:\d{2}',
|
'title': r're:Steam Community :: pepperm!nt :: Broadcast 2022-06-26 \d{2}:\d{2}',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'uploader_id': 1113585758,
|
'uploader_id': '1113585758',
|
||||||
'uploader': 'pepperm!nt',
|
'uploader': 'pepperm!nt',
|
||||||
'live_status': 'is_live',
|
'live_status': 'is_live',
|
||||||
},
|
},
|
||||||
|
@ -169,6 +165,6 @@ def _real_extract(self, url):
|
||||||
'live_status': 'is_live',
|
'live_status': 'is_live',
|
||||||
'view_count': json_data.get('num_view'),
|
'view_count': json_data.get('num_view'),
|
||||||
'uploader': uploader_json.get('persona_name'),
|
'uploader': uploader_json.get('persona_name'),
|
||||||
'uploader_id': uploader_json.get('accountid'),
|
'uploader_id': str_or_none(uploader_json.get('accountid')),
|
||||||
'subtitles': subs,
|
'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',
|
'alt_title': 'Nathan Borg Is The First Aussie Actor With A Cochlear Implant To Join Neighbours',
|
||||||
'description': 'md5:a02d0199c901c2dd4c796f1e7dd0de43',
|
'description': 'md5:a02d0199c901c2dd4c796f1e7dd0de43',
|
||||||
'duration': 186,
|
'duration': 186,
|
||||||
'season': 39,
|
'season': 'Season 39',
|
||||||
|
'season_number': 39,
|
||||||
'series': 'Neighbours',
|
'series': 'Neighbours',
|
||||||
'thumbnail': r're:https://.*\.jpg',
|
'thumbnail': r're:https://.*\.jpg',
|
||||||
'uploader': 'Channel 10',
|
'uploader': 'Channel 10',
|
||||||
|
@ -108,7 +109,7 @@ def _real_extract(self, url):
|
||||||
'description': data.get('description'),
|
'description': data.get('description'),
|
||||||
'age_limit': self._AUS_AGES.get(data.get('classification')),
|
'age_limit': self._AUS_AGES.get(data.get('classification')),
|
||||||
'series': data.get('tvShow'),
|
'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')),
|
'episode_number': int_or_none(data.get('episode')),
|
||||||
'timestamp': data.get('published'),
|
'timestamp': data.get('published'),
|
||||||
'thumbnail': data.get('imageUrl'),
|
'thumbnail': data.get('imageUrl'),
|
||||||
|
|
|
@ -320,7 +320,7 @@ def extract_addr(addr, add_meta={}):
|
||||||
if is_generic_og_trackname:
|
if is_generic_og_trackname:
|
||||||
music_track, music_author = contained_music_track or 'original sound', contained_music_author
|
music_track, music_author = contained_music_track or 'original sound', contained_music_author
|
||||||
else:
|
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 {
|
return {
|
||||||
'id': aweme_id,
|
'id': aweme_id,
|
||||||
|
@ -336,15 +336,16 @@ def extract_addr(addr, add_meta={}):
|
||||||
'comment_count': 'comment_count',
|
'comment_count': 'comment_count',
|
||||||
}, expected_type=int_or_none),
|
}, expected_type=int_or_none),
|
||||||
**traverse_obj(author_info, {
|
**traverse_obj(author_info, {
|
||||||
'uploader': 'unique_id',
|
'uploader': ('unique_id', {str}),
|
||||||
'uploader_id': 'uid',
|
'uploader_id': ('uid', {str_or_none}),
|
||||||
'creator': 'nickname',
|
'creators': ('nickname', {str}, {lambda x: [x] if x else None}), # for compat
|
||||||
'channel_id': 'sec_uid',
|
'channel': ('nickname', {str}),
|
||||||
}, expected_type=str_or_none),
|
'channel_id': ('sec_uid', {str}),
|
||||||
|
}),
|
||||||
'uploader_url': user_url,
|
'uploader_url': user_url,
|
||||||
'track': music_track,
|
'track': music_track,
|
||||||
'album': str_or_none(music_info.get('album')) or None,
|
'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,
|
'formats': formats,
|
||||||
'subtitles': self.extract_subtitles(aweme_detail, aweme_id),
|
'subtitles': self.extract_subtitles(aweme_detail, aweme_id),
|
||||||
'thumbnails': thumbnails,
|
'thumbnails': thumbnails,
|
||||||
|
@ -405,7 +406,8 @@ def _parse_aweme_video_web(self, aweme_detail, webpage_url, video_id):
|
||||||
'timestamp': ('createTime', {int_or_none}),
|
'timestamp': ('createTime', {int_or_none}),
|
||||||
}),
|
}),
|
||||||
**traverse_obj(author_info or aweme_detail, {
|
**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': (('uniqueId', 'author'), {str}),
|
||||||
'uploader_id': (('authorId', 'uid', 'id'), {str_or_none}),
|
'uploader_id': (('authorId', 'uid', 'id'), {str_or_none}),
|
||||||
}, get_all=False),
|
}, get_all=False),
|
||||||
|
@ -416,10 +418,10 @@ def _parse_aweme_video_web(self, aweme_detail, webpage_url, video_id):
|
||||||
'comment_count': 'commentCount',
|
'comment_count': 'commentCount',
|
||||||
}, expected_type=int_or_none),
|
}, expected_type=int_or_none),
|
||||||
**traverse_obj(music_info, {
|
**traverse_obj(music_info, {
|
||||||
'track': 'title',
|
'track': ('title', {str}),
|
||||||
'album': ('album', {lambda x: x or None}),
|
'album': ('album', {str}, {lambda x: x or None}),
|
||||||
'artist': 'authorName',
|
'artists': ('authorName', {str}, {lambda x: [x] if x else None}),
|
||||||
}, expected_type=str),
|
}),
|
||||||
'channel_id': channel_id,
|
'channel_id': channel_id,
|
||||||
'uploader_url': user_url,
|
'uploader_url': user_url,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
|
@ -476,7 +478,8 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'uploader_id': '18702747',
|
'uploader_id': '18702747',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
|
||||||
'channel_id': 'MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
|
'channel_id': 'MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Ws',
|
||||||
'creator': 'patroX',
|
'channel': 'patroX',
|
||||||
|
'creators': ['patroX'],
|
||||||
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
||||||
'upload_date': '20190930',
|
'upload_date': '20190930',
|
||||||
'timestamp': 1569860870,
|
'timestamp': 1569860870,
|
||||||
|
@ -484,7 +487,7 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'repost_count': int,
|
'repost_count': int,
|
||||||
'comment_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',
|
'track': 'Big Fun',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -496,12 +499,13 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'title': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
|
'title': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
|
||||||
'description': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
|
'description': 'Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥',
|
||||||
'uploader': 'barudakhb_',
|
'uploader': 'barudakhb_',
|
||||||
'creator': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
|
'channel': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
|
||||||
|
'creators': ['md5:29f238c49bc0c176cb3cef1a9cea9fa6'],
|
||||||
'uploader_id': '6974687867511718913',
|
'uploader_id': '6974687867511718913',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
|
||||||
'channel_id': 'MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
|
'channel_id': 'MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7d',
|
||||||
'track': 'Boka Dance',
|
'track': 'Boka Dance',
|
||||||
'artist': 'md5:29f238c49bc0c176cb3cef1a9cea9fa6',
|
'artists': ['md5:29f238c49bc0c176cb3cef1a9cea9fa6'],
|
||||||
'timestamp': 1626121503,
|
'timestamp': 1626121503,
|
||||||
'duration': 18,
|
'duration': 18,
|
||||||
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
||||||
|
@ -520,7 +524,8 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'title': 'Slap and Run!',
|
'title': 'Slap and Run!',
|
||||||
'description': 'Slap and Run!',
|
'description': 'Slap and Run!',
|
||||||
'uploader': 'user440922249',
|
'uploader': 'user440922249',
|
||||||
'creator': 'Slap And Run',
|
'channel': 'Slap And Run',
|
||||||
|
'creators': ['Slap And Run'],
|
||||||
'uploader_id': '7036055384943690754',
|
'uploader_id': '7036055384943690754',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
|
||||||
'channel_id': 'MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
|
'channel_id': 'MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_',
|
||||||
|
@ -544,7 +549,8 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'title': 'TikTok video #7059698374567611694',
|
'title': 'TikTok video #7059698374567611694',
|
||||||
'description': '',
|
'description': '',
|
||||||
'uploader': 'pokemonlife22',
|
'uploader': 'pokemonlife22',
|
||||||
'creator': 'Pokemon',
|
'channel': 'Pokemon',
|
||||||
|
'creators': ['Pokemon'],
|
||||||
'uploader_id': '6820838815978423302',
|
'uploader_id': '6820838815978423302',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
|
||||||
'channel_id': 'MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
|
'channel_id': 'MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2W',
|
||||||
|
@ -553,7 +559,7 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'duration': 6,
|
'duration': 6,
|
||||||
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
'thumbnail': r're:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?',
|
||||||
'upload_date': '20220201',
|
'upload_date': '20220201',
|
||||||
'artist': 'Pokemon',
|
'artists': ['Pokemon'],
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'repost_count': int,
|
'repost_count': int,
|
||||||
|
@ -590,12 +596,13 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'ext': 'mp3',
|
'ext': 'mp3',
|
||||||
'title': 'TikTok video #7139980461132074283',
|
'title': 'TikTok video #7139980461132074283',
|
||||||
'description': '',
|
'description': '',
|
||||||
'creator': 'Antaura',
|
'channel': 'Antaura',
|
||||||
|
'creators': ['Antaura'],
|
||||||
'uploader': '_le_cannibale_',
|
'uploader': '_le_cannibale_',
|
||||||
'uploader_id': '6604511138619654149',
|
'uploader_id': '6604511138619654149',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
|
||||||
'channel_id': 'MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
|
'channel_id': 'MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOP',
|
||||||
'artist': 'nathan !',
|
'artists': ['nathan !'],
|
||||||
'track': 'grahamscott canon',
|
'track': 'grahamscott canon',
|
||||||
'upload_date': '20220905',
|
'upload_date': '20220905',
|
||||||
'timestamp': 1662406249,
|
'timestamp': 1662406249,
|
||||||
|
@ -603,18 +610,18 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'repost_count': int,
|
'repost_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'thumbnail': r're:^https://.+\.webp',
|
'thumbnail': r're:^https://.+\.(?:webp|jpe?g)',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
# only available via web
|
# only available via web
|
||||||
'url': 'https://www.tiktok.com/@moxypatch/video/7206382937372134662',
|
'url': 'https://www.tiktok.com/@moxypatch/video/7206382937372134662', # FIXME
|
||||||
'md5': '6aba7fad816e8709ff2c149679ace165',
|
'md5': '6aba7fad816e8709ff2c149679ace165',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '7206382937372134662',
|
'id': '7206382937372134662',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
|
'title': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
|
||||||
'description': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
|
'description': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
|
||||||
'creator': 'MoxyPatch',
|
'channel': 'MoxyPatch',
|
||||||
'creators': ['MoxyPatch'],
|
'creators': ['MoxyPatch'],
|
||||||
'uploader': 'moxypatch',
|
'uploader': 'moxypatch',
|
||||||
'uploader_id': '7039142049363379205',
|
'uploader_id': '7039142049363379205',
|
||||||
|
@ -635,7 +642,7 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'expected_warnings': ['Unable to find video in feed'],
|
'expected_warnings': ['Unable to find video in feed'],
|
||||||
}, {
|
}, {
|
||||||
# 1080p format
|
# 1080p format
|
||||||
'url': 'https://www.tiktok.com/@tatemcrae/video/7107337212743830830',
|
'url': 'https://www.tiktok.com/@tatemcrae/video/7107337212743830830', # FIXME
|
||||||
'md5': '982512017a8a917124d5a08c8ae79621',
|
'md5': '982512017a8a917124d5a08c8ae79621',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '7107337212743830830',
|
'id': '7107337212743830830',
|
||||||
|
@ -646,8 +653,9 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'uploader_id': '86328792343818240',
|
'uploader_id': '86328792343818240',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
|
||||||
'channel_id': 'MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
|
'channel_id': 'MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJd',
|
||||||
'creator': 'tate mcrae',
|
'channel': 'tate mcrae',
|
||||||
'artist': 'tate mcrae',
|
'creators': ['tate mcrae'],
|
||||||
|
'artists': ['tate mcrae'],
|
||||||
'track': 'original sound',
|
'track': 'original sound',
|
||||||
'upload_date': '20220609',
|
'upload_date': '20220609',
|
||||||
'timestamp': 1654805899,
|
'timestamp': 1654805899,
|
||||||
|
@ -672,8 +680,9 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'uploader_id': '6582536342634676230',
|
'uploader_id': '6582536342634676230',
|
||||||
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
|
'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
|
||||||
'channel_id': 'MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
|
'channel_id': 'MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLB',
|
||||||
'creator': 'лампочка',
|
'channel': 'лампочка',
|
||||||
'artist': 'Øneheart',
|
'creators': ['лампочка'],
|
||||||
|
'artists': ['Øneheart'],
|
||||||
'album': 'watching the stars',
|
'album': 'watching the stars',
|
||||||
'track': 'watching the stars',
|
'track': 'watching the stars',
|
||||||
'upload_date': '20230708',
|
'upload_date': '20230708',
|
||||||
|
@ -682,7 +691,7 @@ class TikTokIE(TikTokBaseIE):
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
'repost_count': int,
|
'repost_count': int,
|
||||||
'thumbnail': r're:^https://.+\.webp',
|
'thumbnail': r're:^https://.+\.(?:webp|jpe?g)',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
# Auto-captions available
|
# Auto-captions available
|
||||||
|
@ -949,7 +958,7 @@ class DouyinIE(TikTokBaseIE):
|
||||||
'uploader_id': '110403406559',
|
'uploader_id': '110403406559',
|
||||||
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'creator': '杨超越',
|
'channel': '杨超越',
|
||||||
'creators': ['杨超越'],
|
'creators': ['杨超越'],
|
||||||
'duration': 19,
|
'duration': 19,
|
||||||
'timestamp': 1620905839,
|
'timestamp': 1620905839,
|
||||||
|
@ -974,7 +983,7 @@ class DouyinIE(TikTokBaseIE):
|
||||||
'uploader_id': '408654318141572',
|
'uploader_id': '408654318141572',
|
||||||
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
|
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
|
||||||
'channel_id': 'MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
|
'channel_id': 'MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lA',
|
||||||
'creator': '杨超越工作室',
|
'channel': '杨超越工作室',
|
||||||
'creators': ['杨超越工作室'],
|
'creators': ['杨超越工作室'],
|
||||||
'duration': 42,
|
'duration': 42,
|
||||||
'timestamp': 1625739481,
|
'timestamp': 1625739481,
|
||||||
|
@ -999,7 +1008,7 @@ class DouyinIE(TikTokBaseIE):
|
||||||
'uploader_id': '110403406559',
|
'uploader_id': '110403406559',
|
||||||
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'creator': '杨超越',
|
'channel': '杨超越',
|
||||||
'creators': ['杨超越'],
|
'creators': ['杨超越'],
|
||||||
'duration': 17,
|
'duration': 17,
|
||||||
'timestamp': 1619098692,
|
'timestamp': 1619098692,
|
||||||
|
@ -1041,7 +1050,7 @@ class DouyinIE(TikTokBaseIE):
|
||||||
'uploader_id': '110403406559',
|
'uploader_id': '110403406559',
|
||||||
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'uploader_url': 'https://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
'channel_id': 'MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98',
|
||||||
'creator': '杨超越',
|
'channel': '杨超越',
|
||||||
'creators': ['杨超越'],
|
'creators': ['杨超越'],
|
||||||
'duration': 15,
|
'duration': 15,
|
||||||
'timestamp': 1621261163,
|
'timestamp': 1621261163,
|
||||||
|
|
|
@ -277,7 +277,6 @@ class EMPFlixIE(TNAEMPFlixBaseIE):
|
||||||
'thumbnail': r're:https?://.*\.jpg$',
|
'thumbnail': r're:https?://.*\.jpg$',
|
||||||
'duration': 83,
|
'duration': 83,
|
||||||
'age_limit': 18,
|
'age_limit': 18,
|
||||||
'uploader': None,
|
|
||||||
'categories': list,
|
'categories': list,
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -19,7 +19,6 @@ class TruthIE(InfoExtractor):
|
||||||
'id': '108779000807761862',
|
'id': '108779000807761862',
|
||||||
'ext': 'qt',
|
'ext': 'qt',
|
||||||
'title': 'Truth video #108779000807761862',
|
'title': 'Truth video #108779000807761862',
|
||||||
'description': None,
|
|
||||||
'timestamp': 1659835827,
|
'timestamp': 1659835827,
|
||||||
'upload_date': '20220807',
|
'upload_date': '20220807',
|
||||||
'uploader': 'Donald J. Trump',
|
'uploader': 'Donald J. Trump',
|
||||||
|
|
|
@ -20,7 +20,6 @@ class TV2HuIE(InfoExtractor):
|
||||||
'description': 'md5:7350147e75485a59598e806c47967b07',
|
'description': 'md5:7350147e75485a59598e806c47967b07',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
'release_date': '20210825',
|
'release_date': '20210825',
|
||||||
'season_number': None,
|
|
||||||
'episode_number': 213,
|
'episode_number': 213,
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
|
@ -38,8 +37,6 @@ class TV2HuIE(InfoExtractor):
|
||||||
'description': 'md5:47762155dc9a50241797ded101b1b08c',
|
'description': 'md5:47762155dc9a50241797ded101b1b08c',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
'release_date': '20210118',
|
'release_date': '20210118',
|
||||||
'season_number': None,
|
|
||||||
'episode_number': None,
|
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
|
|
|
@ -21,8 +21,6 @@ class TVerIE(InfoExtractor):
|
||||||
'episode': '売り場席巻のチーズSP&財前直見×森泉親子の脱東京暮らし密着!',
|
'episode': '売り場席巻のチーズSP&財前直見×森泉親子の脱東京暮らし密着!',
|
||||||
'alt_title': '売り場席巻のチーズSP&財前直見×森泉親子の脱東京暮らし密着!',
|
'alt_title': '売り場席巻のチーズSP&財前直見×森泉親子の脱東京暮らし密着!',
|
||||||
'channel': 'テレビ朝日',
|
'channel': 'テレビ朝日',
|
||||||
'onair_label': '5月3日(火)放送分',
|
|
||||||
'ext_title': '家事ヤロウ!!! 売り場席巻のチーズSP&財前直見×森泉親子の脱東京暮らし密着! テレビ朝日 5月3日(火)放送分',
|
|
||||||
},
|
},
|
||||||
'add_ie': ['BrightcoveNew'],
|
'add_ie': ['BrightcoveNew'],
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -22,7 +22,7 @@ class VideofyMeIE(InfoExtractor):
|
||||||
'uploader': 'VideofyMe',
|
'uploader': 'VideofyMe',
|
||||||
'uploader_id': 'thisisvideofyme',
|
'uploader_id': 'thisisvideofyme',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'likes': int,
|
'like_count': int,
|
||||||
'comment_count': int,
|
'comment_count': int,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,6 @@ def _real_extract(self, url):
|
||||||
'uploader': blog.get('name'),
|
'uploader': blog.get('name'),
|
||||||
'uploader_id': blog.get('identifier'),
|
'uploader_id': blog.get('identifier'),
|
||||||
'view_count': int_or_none(self._search_regex(r'([0-9]+)', video.get('views'), 'view count', fatal=False)),
|
'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')),
|
'comment_count': int_or_none(video.get('nrOfComments')),
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,7 +231,6 @@ class ViewLiftIE(ViewLiftBaseIE):
|
||||||
'description': 'md5:e28f2fb8680096a69c944d37c1fa5ffc',
|
'description': 'md5:e28f2fb8680096a69c944d37c1fa5ffc',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
'upload_date': '20211006',
|
'upload_date': '20211006',
|
||||||
'series': None
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True},
|
'params': {'skip_download': True},
|
||||||
}, { # Free film
|
}, { # Free film
|
||||||
|
@ -243,7 +242,6 @@ class ViewLiftIE(ViewLiftBaseIE):
|
||||||
'description': 'md5:605cba408e51a79dafcb824bdeded51e',
|
'description': 'md5:605cba408e51a79dafcb824bdeded51e',
|
||||||
'thumbnail': r're:^https?://.*\.jpg$',
|
'thumbnail': r're:^https?://.*\.jpg$',
|
||||||
'upload_date': '20210827',
|
'upload_date': '20210827',
|
||||||
'series': None
|
|
||||||
},
|
},
|
||||||
'params': {'skip_download': True},
|
'params': {'skip_download': True},
|
||||||
}, { # Free episode
|
}, { # Free episode
|
||||||
|
|
|
@ -375,7 +375,6 @@ class VimeoIE(VimeoBaseInfoExtractor):
|
||||||
'uploader_url': r're:https?://(?:www\.)?vimeo\.com/businessofsoftware',
|
'uploader_url': r're:https?://(?:www\.)?vimeo\.com/businessofsoftware',
|
||||||
'uploader_id': 'businessofsoftware',
|
'uploader_id': 'businessofsoftware',
|
||||||
'duration': 3610,
|
'duration': 3610,
|
||||||
'description': None,
|
|
||||||
'thumbnail': 'https://i.vimeocdn.com/video/376682406-f34043e7b766af6bef2af81366eacd6724f3fc3173179a11a97a1e26587c9529-d_1280',
|
'thumbnail': 'https://i.vimeocdn.com/video/376682406-f34043e7b766af6bef2af81366eacd6724f3fc3173179a11a97a1e26587c9529-d_1280',
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
|
|
|
@ -810,7 +810,7 @@ class VKPlayLiveIE(VKPlayBaseIE):
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': r're:эскапизм крута .*',
|
'title': r're:эскапизм крута .*',
|
||||||
'uploader': 'Bayda',
|
'uploader': 'Bayda',
|
||||||
'uploader_id': 12279401,
|
'uploader_id': '12279401',
|
||||||
'release_timestamp': 1687209962,
|
'release_timestamp': 1687209962,
|
||||||
'release_date': '20230619',
|
'release_date': '20230619',
|
||||||
'thumbnail': r're:https://images.vkplay.live/public_video_stream/12279401/preview\?change_time=\d+',
|
'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',
|
'series': 'The Power of Computing',
|
||||||
'season_id': '518',
|
'season_id': '518',
|
||||||
'episode': 'Playstation VR cambierà il nostro modo di giocare',
|
'episode': 'Playstation VR cambierà il nostro modo di giocare',
|
||||||
'episode_number': None,
|
|
||||||
'episode_id': '4747',
|
'episode_id': '4747',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
|
@ -58,7 +57,6 @@ class VVVVIDIE(InfoExtractor):
|
||||||
'description': 'md5:a5e802558d35247fee285875328c0b80',
|
'description': 'md5:a5e802558d35247fee285875328c0b80',
|
||||||
'uploader_id': '@EMOTIONLabelChannel',
|
'uploader_id': '@EMOTIONLabelChannel',
|
||||||
'uploader': 'EMOTION Label Channel',
|
'uploader': 'EMOTION Label Channel',
|
||||||
'episode_number': None,
|
|
||||||
'episode_id': '3115',
|
'episode_id': '3115',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
|
|
|
@ -324,7 +324,6 @@ class WDRElefantIE(InfoExtractor):
|
||||||
'title': 'Wippe',
|
'title': 'Wippe',
|
||||||
'id': 'mdb-1198320',
|
'id': 'mdb-1198320',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'age_limit': None,
|
|
||||||
'upload_date': '20071003'
|
'upload_date': '20071003'
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from .common import InfoExtractor
|
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):
|
class XimalayaBaseIE(InfoExtractor):
|
||||||
|
@ -19,7 +19,7 @@ class XimalayaIE(XimalayaBaseIE):
|
||||||
'id': '47740352',
|
'id': '47740352',
|
||||||
'ext': 'm4a',
|
'ext': 'm4a',
|
||||||
'uploader': '小彬彬爱听书',
|
'uploader': '小彬彬爱听书',
|
||||||
'uploader_id': 61425525,
|
'uploader_id': '61425525',
|
||||||
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
|
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
|
||||||
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
|
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
|
||||||
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
|
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
|
||||||
|
@ -48,7 +48,7 @@ class XimalayaIE(XimalayaBaseIE):
|
||||||
'id': '47740352',
|
'id': '47740352',
|
||||||
'ext': 'm4a',
|
'ext': 'm4a',
|
||||||
'uploader': '小彬彬爱听书',
|
'uploader': '小彬彬爱听书',
|
||||||
'uploader_id': 61425525,
|
'uploader_id': '61425525',
|
||||||
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
|
'uploader_url': 'http://www.ximalaya.com/zhubo/61425525/',
|
||||||
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
|
'title': '261.唐诗三百首.卷八.送孟浩然之广陵.李白',
|
||||||
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
|
'description': "contains:《送孟浩然之广陵》\n作者:李白\n故人西辞黄鹤楼,烟花三月下扬州。\n孤帆远影碧空尽,惟见长江天际流。",
|
||||||
|
@ -107,7 +107,7 @@ def _real_extract(self, url):
|
||||||
return {
|
return {
|
||||||
'id': audio_id,
|
'id': audio_id,
|
||||||
'uploader': audio_info.get('nickname'),
|
'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,
|
'uploader_url': f'{scheme}://www.ximalaya.com/zhubo/{audio_uploader_id}/' if audio_uploader_id else None,
|
||||||
'title': audio_info['title'],
|
'title': audio_info['title'],
|
||||||
'thumbnails': thumbnails,
|
'thumbnails': thumbnails,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
str_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
update_url_query,
|
update_url_query,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
|
@ -21,9 +22,9 @@ class XinpianchangIE(InfoExtractor):
|
||||||
'duration': 151,
|
'duration': 151,
|
||||||
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
|
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
|
||||||
'uploader': '正时文创',
|
'uploader': '正时文创',
|
||||||
'uploader_id': 10357277,
|
'uploader_id': '10357277',
|
||||||
'categories': ['宣传片', '国家城市', '广告', '其他'],
|
'categories': ['宣传片', '国家城市', '广告', '其他'],
|
||||||
'keywords': ['北京冬奥会', '冰墩墩', '再见', '告别', '冰墩墩哭了', '感动', '闭幕式', '熄火']
|
'tags': ['北京冬奥会', '冰墩墩', '再见', '告别', '冰墩墩哭了', '感动', '闭幕式', '熄火']
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.xinpianchang.com/a11762904',
|
'url': 'https://www.xinpianchang.com/a11762904',
|
||||||
|
@ -35,9 +36,9 @@ class XinpianchangIE(InfoExtractor):
|
||||||
'duration': 136,
|
'duration': 136,
|
||||||
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
|
'thumbnail': r're:^https?://oss-xpc0\.xpccdn\.com.+/assets/',
|
||||||
'uploader': '精品动画',
|
'uploader': '精品动画',
|
||||||
'uploader_id': 10858927,
|
'uploader_id': '10858927',
|
||||||
'categories': ['动画', '三维CG'],
|
'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',
|
'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 @@ def _real_extract(self, url):
|
||||||
'description': data.get('description'),
|
'description': data.get('description'),
|
||||||
'duration': int_or_none(data.get('duration')),
|
'duration': int_or_none(data.get('duration')),
|
||||||
'categories': data.get('categories'),
|
'categories': data.get('categories'),
|
||||||
'keywords': data.get('keywords'),
|
'tags': data.get('keywords'),
|
||||||
'thumbnail': data.get('cover'),
|
'thumbnail': data.get('cover'),
|
||||||
'uploader': try_get(data, lambda x: x['owner']['username']),
|
'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,
|
'formats': formats,
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,10 +46,6 @@ class YleAreenaIE(InfoExtractor):
|
||||||
'title': 'Albi haluaa vessan',
|
'title': 'Albi haluaa vessan',
|
||||||
'description': 'md5:15236d810c837bed861fae0e88663c33',
|
'description': 'md5:15236d810c837bed861fae0e88663c33',
|
||||||
'series': 'Albi Lumiukko',
|
'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',
|
'thumbnail': 'http://cfvod.kaltura.com/p/1955031/sp/195503100/thumbnail/entry_id/1_l38iz9ur/version/100021',
|
||||||
'uploader_id': 'ovp@yle.fi',
|
'uploader_id': 'ovp@yle.fi',
|
||||||
'duration': 319,
|
'duration': 319,
|
||||||
|
|
|
@ -42,11 +42,11 @@ class YoukuIE(InfoExtractor):
|
||||||
'uploader_id': '322014285',
|
'uploader_id': '322014285',
|
||||||
'uploader_url': 'http://i.youku.com/u/UMTI4ODA1NzE0MA==',
|
'uploader_url': 'http://i.youku.com/u/UMTI4ODA1NzE0MA==',
|
||||||
'tags': list,
|
'tags': list,
|
||||||
'skip': '404',
|
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
'videopassword': '100600',
|
'videopassword': '100600',
|
||||||
},
|
},
|
||||||
|
'skip': '404',
|
||||||
}, {
|
}, {
|
||||||
# /play/get.json contains streams with "channel_type":"tail"
|
# /play/get.json contains streams with "channel_type":"tail"
|
||||||
'url': 'http://v.youku.com/v_show/id_XOTUxMzg4NDMy.html',
|
'url': 'http://v.youku.com/v_show/id_XOTUxMzg4NDMy.html',
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
format_field,
|
format_field,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
str_or_none,
|
||||||
try_get,
|
try_get,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -102,7 +103,7 @@ def _extract_moment(item, fatal=True):
|
||||||
'timestamp': int_or_none(item.get('created')),
|
'timestamp': int_or_none(item.get('created')),
|
||||||
'creator': uploader,
|
'creator': uploader,
|
||||||
'uploader': uploader,
|
'uploader': uploader,
|
||||||
'uploader_id': uploader_id,
|
'uploader_id': str_or_none(uploader_id),
|
||||||
'uploader_url': uploader_url,
|
'uploader_url': uploader_url,
|
||||||
'formats': [{
|
'formats': [{
|
||||||
'url': 'https://hls.younow.com/momentsplaylists/live/%s/%s.m3u8'
|
'url': 'https://hls.younow.com/momentsplaylists/live/%s/%s.m3u8'
|
||||||
|
@ -184,7 +185,7 @@ class YouNowMomentIE(InfoExtractor):
|
||||||
'timestamp': 1490432040,
|
'timestamp': 1490432040,
|
||||||
'upload_date': '20170325',
|
'upload_date': '20170325',
|
||||||
'uploader': 'GABO...',
|
'uploader': 'GABO...',
|
||||||
'uploader_id': 35917228,
|
'uploader_id': '35917228',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -513,7 +513,6 @@ class ZingMp3LiveRadioIE(ZingMp3BaseIE):
|
||||||
'id': 'IWZ979UB',
|
'id': 'IWZ979UB',
|
||||||
'title': r're:^V\-POP',
|
'title': r're:^V\-POP',
|
||||||
'description': 'md5:aa857f8a91dc9ce69e862a809e4bdc10',
|
'description': 'md5:aa857f8a91dc9ce69e862a809e4bdc10',
|
||||||
'protocol': 'm3u8_native',
|
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'thumbnail': r're:^https?://.*\.jpg',
|
'thumbnail': r're:^https?://.*\.jpg',
|
||||||
|
@ -529,7 +528,6 @@ class ZingMp3LiveRadioIE(ZingMp3BaseIE):
|
||||||
'id': 'IWZ97CWB',
|
'id': 'IWZ97CWB',
|
||||||
'title': r're:^Live\s247',
|
'title': r're:^Live\s247',
|
||||||
'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
|
'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
|
||||||
'protocol': 'm3u8_native',
|
|
||||||
'ext': 'm4a',
|
'ext': 'm4a',
|
||||||
'view_count': int,
|
'view_count': int,
|
||||||
'thumbnail': r're:^https?://.*\.jpg',
|
'thumbnail': r're:^https?://.*\.jpg',
|
||||||
|
|
Loading…
Reference in a new issue