|
|
|
@ -4,10 +4,12 @@ from __future__ import unicode_literals
|
|
|
|
|
import re
|
|
|
|
|
|
|
|
|
|
from .adobepass import AdobePassIE
|
|
|
|
|
from ..compat import compat_str
|
|
|
|
|
from ..utils import (
|
|
|
|
|
int_or_none,
|
|
|
|
|
determine_ext,
|
|
|
|
|
parse_age_limit,
|
|
|
|
|
try_get,
|
|
|
|
|
urlencode_postdata,
|
|
|
|
|
ExtractorError,
|
|
|
|
|
)
|
|
|
|
@ -116,6 +118,18 @@ class GoIE(AdobePassIE):
|
|
|
|
|
# m3u8 download
|
|
|
|
|
'skip_download': True,
|
|
|
|
|
},
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'https://abc.com/shows/modern-family/episode-guide/season-01/101-pilot',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'id': 'VDKA22600213',
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
'title': 'Pilot',
|
|
|
|
|
'description': 'md5:74306df917cfc199d76d061d66bebdb4',
|
|
|
|
|
},
|
|
|
|
|
'params': {
|
|
|
|
|
# m3u8 download
|
|
|
|
|
'skip_download': True,
|
|
|
|
|
},
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://abc.go.com/shows/the-catch/episode-guide/season-01/10-the-wedding',
|
|
|
|
|
'only_matching': True,
|
|
|
|
@ -149,14 +163,30 @@ class GoIE(AdobePassIE):
|
|
|
|
|
brand = site_info.get('brand')
|
|
|
|
|
if not video_id or not site_info:
|
|
|
|
|
webpage = self._download_webpage(url, display_id or video_id)
|
|
|
|
|
video_id = self._search_regex(
|
|
|
|
|
(
|
|
|
|
|
# There may be inner quotes, e.g. data-video-id="'VDKA3609139'"
|
|
|
|
|
# from http://freeform.go.com/shows/shadowhunters/episodes/season-2/1-this-guilty-blood
|
|
|
|
|
r'data-video-id=["\']*(VDKA\w+)',
|
|
|
|
|
# https://abc.com/shows/the-rookie/episode-guide/season-02/03-the-bet
|
|
|
|
|
r'\b(?:video)?id["\']\s*:\s*["\'](VDKA\w+)'
|
|
|
|
|
), webpage, 'video id', default=video_id)
|
|
|
|
|
data = self._parse_json(
|
|
|
|
|
self._search_regex(
|
|
|
|
|
r'["\']__abc_com__["\']\s*\]\s*=\s*({.+?})\s*;', webpage,
|
|
|
|
|
'data', default='{}'),
|
|
|
|
|
display_id or video_id, fatal=False)
|
|
|
|
|
# https://abc.com/shows/modern-family/episode-guide/season-01/101-pilot
|
|
|
|
|
layout = try_get(data, lambda x: x['page']['content']['video']['layout'], dict)
|
|
|
|
|
video_id = None
|
|
|
|
|
if layout:
|
|
|
|
|
video_id = try_get(
|
|
|
|
|
layout,
|
|
|
|
|
(lambda x: x['videoid'], lambda x: x['video']['id']),
|
|
|
|
|
compat_str)
|
|
|
|
|
if not video_id:
|
|
|
|
|
video_id = self._search_regex(
|
|
|
|
|
(
|
|
|
|
|
# There may be inner quotes, e.g. data-video-id="'VDKA3609139'"
|
|
|
|
|
# from http://freeform.go.com/shows/shadowhunters/episodes/season-2/1-this-guilty-blood
|
|
|
|
|
r'data-video-id=["\']*(VDKA\w+)',
|
|
|
|
|
# page.analytics.videoIdCode
|
|
|
|
|
r'\bvideoIdCode["\']\s*:\s*["\']((?:vdka|VDKA)\w+)',
|
|
|
|
|
# https://abc.com/shows/the-rookie/episode-guide/season-02/03-the-bet
|
|
|
|
|
r'\b(?:video)?id["\']\s*:\s*["\'](VDKA\w+)'
|
|
|
|
|
), webpage, 'video id', default=video_id)
|
|
|
|
|
if not site_info:
|
|
|
|
|
brand = self._search_regex(
|
|
|
|
|
(r'data-brand=\s*["\']\s*(\d+)',
|
|
|
|
|