aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemita Amine <remitamine@gmail.com>2018-05-19 13:05:51 +0100
committerRemita Amine <remitamine@gmail.com>2018-05-19 13:05:51 +0100
commitf2b1fa07ec063ca63373e8558223e7af544f2cf8 (patch)
treeb88c8b2ecc4429e24e73adfb02f509fecb17c062
parentacd620c930a92511c2e2099a4fc82d41825fdf93 (diff)
downloadyoutube-dl-f2b1fa07ec063ca63373e8558223e7af544f2cf8.tar.xz
[teamcoco] relax _VALID_URL regex and add a fallback for format extraction(fixes #16484)
-rw-r--r--youtube_dl/extractor/teamcoco.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/youtube_dl/extractor/teamcoco.py b/youtube_dl/extractor/teamcoco.py
index 64235b0f6..63fd4fe1c 100644
--- a/youtube_dl/extractor/teamcoco.py
+++ b/youtube_dl/extractor/teamcoco.py
@@ -16,7 +16,7 @@ from ..utils import (
class TeamcocoIE(InfoExtractor):
- _VALID_URL = r'https?://teamcoco\.com/video/(?P<id>([^/]+/)*[^/?#]+)'
+ _VALID_URL = r'https?://teamcoco\.com/(?P<id>([^/]+/)*[^/?#]+)'
_TESTS = [
{
'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',
'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 @@ class TeamcocoIE(InfoExtractor):
display_id = self._match_id(url)
response = self._graphql_call('''{
- %s(slug: "video/%s") {
+ %s(slug: "%s") {
... on RecordSlug {
record {
id
@@ -94,6 +103,9 @@ class TeamcocoIE(InfoExtractor):
thumb {
preview
}
+ file {
+ url
+ }
tags {
name
}
@@ -111,15 +123,15 @@ class TeamcocoIE(InfoExtractor):
record = response['record']
video_id = record['id']
- srcs = self._graphql_call('''{
+ video_sources = self._graphql_call('''{
%s(id: "%s") {
src
}
-}''', 'RecordVideoSource', video_id)['src']
+}''', 'RecordVideoSource', video_id) or {}
formats = []
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):
continue
src_url = src.get('src')
@@ -146,6 +158,9 @@ class TeamcocoIE(InfoExtractor):
'format_id': 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)
return {