[teamcoco] relax _VALID_URL regex and add a fallback for format extraction(fixes #16484)

This commit is contained in:
Remita Amine 2018-05-19 13:05:51 +01:00
parent acd620c930
commit f2b1fa07ec

View File

@ -16,7 +16,7 @@ from ..utils import (
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 @@ class TeamcocoIE(InfoExtractor):
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 @@ class TeamcocoIE(InfoExtractor):
thumb { thumb {
preview preview
} }
file {
url
}
tags { tags {
name name
} }
@ -111,15 +123,15 @@ class TeamcocoIE(InfoExtractor):
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 @@ class TeamcocoIE(InfoExtractor):
'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 {