mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-18 01:35:12 +00:00
[teamcoco] relax _VALID_URL regex and add a fallback for format extraction(fixes #16484)
This commit is contained in:
parent
acd620c930
commit
f2b1fa07ec
1 changed files with 20 additions and 5 deletions
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
|
|
||||||
class TeamcocoIE(InfoExtractor):
|
class TeamcocoIE(InfoExtractor):
|
||||||
_VALID_URL = r'https?://teamcoco\.com/video/(?P<id>([^/]+/)*[^/?#]+)'
|
_VALID_URL = r'https?://teamcoco\.com/(?P<id>([^/]+/)*[^/?#]+)'
|
||||||
_TESTS = [
|
_TESTS = [
|
||||||
{
|
{
|
||||||
'url': 'http://teamcoco.com/video/mary-kay-remote',
|
'url': 'http://teamcoco.com/video/mary-kay-remote',
|
||||||
|
@ -70,6 +70,15 @@ class TeamcocoIE(InfoExtractor):
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://teamcoco.com/video/the-conan-audiencey-awards-for-04/25/18',
|
'url': 'http://teamcoco.com/video/the-conan-audiencey-awards-for-04/25/18',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'http://teamcoco.com/italy/conan-jordan-schlansky-hit-the-streets-of-florence',
|
||||||
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'http://teamcoco.com/haiti/conan-s-haitian-history-lesson',
|
||||||
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'http://teamcoco.com/israel/conan-hits-the-streets-beaches-of-tel-aviv',
|
||||||
|
'only_matching': True,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -84,7 +93,7 @@ def _real_extract(self, url):
|
||||||
display_id = self._match_id(url)
|
display_id = self._match_id(url)
|
||||||
|
|
||||||
response = self._graphql_call('''{
|
response = self._graphql_call('''{
|
||||||
%s(slug: "video/%s") {
|
%s(slug: "%s") {
|
||||||
... on RecordSlug {
|
... on RecordSlug {
|
||||||
record {
|
record {
|
||||||
id
|
id
|
||||||
|
@ -94,6 +103,9 @@ def _real_extract(self, url):
|
||||||
thumb {
|
thumb {
|
||||||
preview
|
preview
|
||||||
}
|
}
|
||||||
|
file {
|
||||||
|
url
|
||||||
|
}
|
||||||
tags {
|
tags {
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
|
@ -111,15 +123,15 @@ def _real_extract(self, url):
|
||||||
record = response['record']
|
record = response['record']
|
||||||
video_id = record['id']
|
video_id = record['id']
|
||||||
|
|
||||||
srcs = self._graphql_call('''{
|
video_sources = self._graphql_call('''{
|
||||||
%s(id: "%s") {
|
%s(id: "%s") {
|
||||||
src
|
src
|
||||||
}
|
}
|
||||||
}''', 'RecordVideoSource', video_id)['src']
|
}''', 'RecordVideoSource', video_id) or {}
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
get_quality = qualities(['low', 'sd', 'hd', 'uhd'])
|
get_quality = qualities(['low', 'sd', 'hd', 'uhd'])
|
||||||
for format_id, src in srcs.items():
|
for format_id, src in video_sources.get('src', {}).items():
|
||||||
if not isinstance(src, dict):
|
if not isinstance(src, dict):
|
||||||
continue
|
continue
|
||||||
src_url = src.get('src')
|
src_url = src.get('src')
|
||||||
|
@ -146,6 +158,9 @@ def _real_extract(self, url):
|
||||||
'format_id': format_id,
|
'format_id': format_id,
|
||||||
'quality': get_quality(format_id),
|
'quality': get_quality(format_id),
|
||||||
})
|
})
|
||||||
|
if not formats:
|
||||||
|
formats = self._extract_m3u8_formats(
|
||||||
|
record['file']['url'], video_id, 'mp4', fatal=False)
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in a new issue