[go] sign all uplynk urls and use geo bypass only for free videos(closes #12087)(closes #12210)

This commit is contained in:
Remita Amine 2017-02-23 18:42:06 +01:00
parent 050f143c12
commit 8e1409fd80

View File

@ -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()) _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 = [{ _TESTS = [{
'url': 'http://abc.go.com/shows/castle/video/most-recent/vdka0_g86w5onx', 'url': 'http://abc.go.com/shows/castle/video/most-recent/vdka0_g86w5onx',
'info_dict': { 'info_dict': {
@ -79,44 +78,60 @@ def _real_extract(self, url):
ext = determine_ext(asset_url) ext = determine_ext(asset_url)
if ext == 'm3u8': if ext == 'm3u8':
video_type = video_data.get('type') video_type = video_data.get('type')
if video_type == 'lf': data = {
data = { 'video_id': video_data['id'],
'video_id': video_data['id'], 'video_type': video_type,
'video_type': video_type, 'brand': brand,
'brand': brand, 'device': '001',
'device': '001', }
} if video_data.get('accesslevel') == '1':
if video_data.get('accesslevel') == '1': requestor_id = site_info['requestor_id']
requestor_id = site_info['requestor_id'] resource = self._get_mvpd_resource(
resource = self._get_mvpd_resource( requestor_id, title, video_id, None)
requestor_id, title, video_id, None) auth = self._extract_mvpd_auth(
auth = self._extract_mvpd_auth( url, video_id, requestor_id, resource)
url, video_id, requestor_id, resource) data.update({
data.update({ 'token': auth,
'token': auth, 'token_type': 'ap',
'token_type': 'ap', 'adobe_requestor_id': requestor_id,
'adobe_requestor_id': requestor_id, })
}) else:
entitlement = self._download_json( self._initialize_geo_bypass(['US'])
'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json', entitlement = self._download_json(
video_id, data=urlencode_postdata(data), headers=self.geo_verification_headers()) 'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json',
errors = entitlement.get('errors', {}).get('errors', []) video_id, data=urlencode_postdata(data), headers=self.geo_verification_headers())
if errors: errors = entitlement.get('errors', {}).get('errors', [])
for error in errors: if errors:
if error.get('code') == 1002: for error in errors:
self.raise_geo_restricted( if error.get('code') == 1002:
error['message'], countries=self._GEO_COUNTRIES) self.raise_geo_restricted(
error_message = ', '.join([error['message'] for error in errors]) error['message'], countries=['US'])
raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True) error_message = ', '.join([error['message'] for error in errors])
asset_url += '?' + entitlement['uplynkData']['sessionKey'] raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True)
asset_url += '?' + entitlement['uplynkData']['sessionKey']
formats.extend(self._extract_m3u8_formats( formats.extend(self._extract_m3u8_formats(
asset_url, video_id, 'mp4', m3u8_id=format_id or 'hls', fatal=False)) asset_url, video_id, 'mp4', m3u8_id=format_id or 'hls', fatal=False))
else: else:
formats.append({ f = {
'format_id': format_id, 'format_id': format_id,
'url': asset_url, 'url': asset_url,
'ext': ext, '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) self._sort_formats(formats)
subtitles = {} subtitles = {}