diff options
Diffstat (limited to 'youtube_dl/extractor/go.py')
| -rw-r--r-- | youtube_dl/extractor/go.py | 81 | 
1 files changed, 48 insertions, 33 deletions
diff --git a/youtube_dl/extractor/go.py b/youtube_dl/extractor/go.py index b205bfc7c..21ed846b2 100644 --- a/youtube_dl/extractor/go.py +++ b/youtube_dl/extractor/go.py @@ -37,7 +37,6 @@ class GoIE(AdobePassIE):          }      }      _VALID_URL = r'https?://(?:(?P<sub_domain>%s)\.)?go\.com/(?:[^/]+/)*(?:vdka(?P<id>\w+)|season-\d+/\d+-(?P<display_id>[^/?#]+))' % '|'.join(_SITE_INFO.keys()) -    _GEO_COUNTRIES = ['US']      _TESTS = [{          'url': 'http://abc.go.com/shows/castle/video/most-recent/vdka0_g86w5onx',          'info_dict': { @@ -79,44 +78,60 @@ class GoIE(AdobePassIE):              ext = determine_ext(asset_url)              if ext == 'm3u8':                  video_type = video_data.get('type') -                if video_type == 'lf': -                    data = { -                        'video_id': video_data['id'], -                        'video_type': video_type, -                        'brand': brand, -                        'device': '001', -                    } -                    if video_data.get('accesslevel') == '1': -                        requestor_id = site_info['requestor_id'] -                        resource = self._get_mvpd_resource( -                            requestor_id, title, video_id, None) -                        auth = self._extract_mvpd_auth( -                            url, video_id, requestor_id, resource) -                        data.update({ -                            'token': auth, -                            'token_type': 'ap', -                            'adobe_requestor_id': requestor_id, -                        }) -                    entitlement = self._download_json( -                        'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json', -                        video_id, data=urlencode_postdata(data), headers=self.geo_verification_headers()) -                    errors = entitlement.get('errors', {}).get('errors', []) -                    if errors: -                        for error in errors: -                            if error.get('code') == 1002: -                                self.raise_geo_restricted( -                                    error['message'], countries=self._GEO_COUNTRIES) -                        error_message = ', '.join([error['message'] for error in errors]) -                        raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True) -                    asset_url += '?' + entitlement['uplynkData']['sessionKey'] +                data = { +                    'video_id': video_data['id'], +                    'video_type': video_type, +                    'brand': brand, +                    'device': '001', +                } +                if video_data.get('accesslevel') == '1': +                    requestor_id = site_info['requestor_id'] +                    resource = self._get_mvpd_resource( +                        requestor_id, title, video_id, None) +                    auth = self._extract_mvpd_auth( +                        url, video_id, requestor_id, resource) +                    data.update({ +                        'token': auth, +                        'token_type': 'ap', +                        'adobe_requestor_id': requestor_id, +                    }) +                else: +                    self._initialize_geo_bypass(['US']) +                entitlement = self._download_json( +                    'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json', +                    video_id, data=urlencode_postdata(data), headers=self.geo_verification_headers()) +                errors = entitlement.get('errors', {}).get('errors', []) +                if errors: +                    for error in errors: +                        if error.get('code') == 1002: +                            self.raise_geo_restricted( +                                error['message'], countries=['US']) +                    error_message = ', '.join([error['message'] for error in errors]) +                    raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True) +                asset_url += '?' + entitlement['uplynkData']['sessionKey']                  formats.extend(self._extract_m3u8_formats(                      asset_url, video_id, 'mp4', m3u8_id=format_id or 'hls', fatal=False))              else: -                formats.append({ +                f = {                      'format_id': format_id,                      'url': asset_url,                      'ext': ext, -                }) +                } +                if re.search(r'(?:/mp4/source/|_source\.mp4)', asset_url): +                    f.update({ +                        'format_id': ('%s-' % format_id if format_id else '') + 'SOURCE', +                        'preference': 1, +                    }) +                else: +                    mobj = re.search(r'/(\d+)x(\d+)/', asset_url) +                    if mobj: +                        height = int(mobj.group(2)) +                        f.update({ +                            'format_id': ('%s-' % format_id if format_id else '') + '%dP' % height, +                            'width': int(mobj.group(1)), +                            'height': height, +                        }) +                formats.append(f)          self._sort_formats(formats)          subtitles = {}  | 
