mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 10:07:08 -05:00 
			
		
		
		
	@@ -3,7 +3,7 @@ from __future__ import unicode_literals
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .common import InfoExtractor
 | 
					from .adobepass import AdobePassIE
 | 
				
			||||||
from ..utils import (
 | 
					from ..utils import (
 | 
				
			||||||
    int_or_none,
 | 
					    int_or_none,
 | 
				
			||||||
    determine_ext,
 | 
					    determine_ext,
 | 
				
			||||||
@@ -13,15 +13,30 @@ from ..utils import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GoIE(InfoExtractor):
 | 
					class GoIE(AdobePassIE):
 | 
				
			||||||
    _BRANDS = {
 | 
					    _SITE_INFO = {
 | 
				
			||||||
        'abc': '001',
 | 
					        'abc': {
 | 
				
			||||||
        'freeform': '002',
 | 
					            'brand': '001',
 | 
				
			||||||
        'watchdisneychannel': '004',
 | 
					            'requestor_id': 'ABC',
 | 
				
			||||||
        'watchdisneyjunior': '008',
 | 
					        },
 | 
				
			||||||
        'watchdisneyxd': '009',
 | 
					        'freeform': {
 | 
				
			||||||
 | 
					            'brand': '002',
 | 
				
			||||||
 | 
					            'requestor_id': 'ABCFamily',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'watchdisneychannel': {
 | 
				
			||||||
 | 
					            'brand': '004',
 | 
				
			||||||
 | 
					            'requestor_id': 'Disney',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'watchdisneyjunior': {
 | 
				
			||||||
 | 
					            'brand': '008',
 | 
				
			||||||
 | 
					            'requestor_id': 'DisneyJunior',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'watchdisneyxd': {
 | 
				
			||||||
 | 
					            'brand': '009',
 | 
				
			||||||
 | 
					            'requestor_id': 'DisneyXD',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    _VALID_URL = r'https?://(?:(?P<sub_domain>%s)\.)?go\.com/(?:[^/]+/)*(?:vdka(?P<id>\w+)|season-\d+/\d+-(?P<display_id>[^/?#]+))' % '|'.join(_BRANDS.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())
 | 
				
			||||||
    _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': {
 | 
				
			||||||
@@ -47,7 +62,8 @@ class GoIE(InfoExtractor):
 | 
				
			|||||||
                # There may be inner quotes, e.g. data-video-id="'VDKA3609139'"
 | 
					                # 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
 | 
					                # from http://freeform.go.com/shows/shadowhunters/episodes/season-2/1-this-guilty-blood
 | 
				
			||||||
                r'data-video-id=["\']*VDKA(\w+)', webpage, 'video id')
 | 
					                r'data-video-id=["\']*VDKA(\w+)', webpage, 'video id')
 | 
				
			||||||
        brand = self._BRANDS[sub_domain]
 | 
					        site_info = self._SITE_INFO[sub_domain]
 | 
				
			||||||
 | 
					        brand = site_info['brand']
 | 
				
			||||||
        video_data = self._download_json(
 | 
					        video_data = self._download_json(
 | 
				
			||||||
            'http://api.contents.watchabc.go.com/vp2/ws/contents/3000/videos/%s/001/-1/-1/-1/%s/-1/-1.json' % (brand, video_id),
 | 
					            'http://api.contents.watchabc.go.com/vp2/ws/contents/3000/videos/%s/001/-1/-1/-1/%s/-1/-1.json' % (brand, video_id),
 | 
				
			||||||
            video_id)['video'][0]
 | 
					            video_id)['video'][0]
 | 
				
			||||||
@@ -63,14 +79,26 @@ class GoIE(InfoExtractor):
 | 
				
			|||||||
            if ext == 'm3u8':
 | 
					            if ext == 'm3u8':
 | 
				
			||||||
                video_type = video_data.get('type')
 | 
					                video_type = video_data.get('type')
 | 
				
			||||||
                if video_type == 'lf':
 | 
					                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(
 | 
					                    entitlement = self._download_json(
 | 
				
			||||||
                        'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json',
 | 
					                        'https://api.entitlement.watchabc.go.com/vp2/ws-secure/entitlement/2020/authorize.json',
 | 
				
			||||||
                        video_id, data=urlencode_postdata({
 | 
					                        video_id, data=urlencode_postdata(data), headers=self.geo_verification_headers())
 | 
				
			||||||
                            'video_id': video_data['id'],
 | 
					 | 
				
			||||||
                            'video_type': video_type,
 | 
					 | 
				
			||||||
                            'brand': brand,
 | 
					 | 
				
			||||||
                            'device': '001',
 | 
					 | 
				
			||||||
                        }))
 | 
					 | 
				
			||||||
                    errors = entitlement.get('errors', {}).get('errors', [])
 | 
					                    errors = entitlement.get('errors', {}).get('errors', [])
 | 
				
			||||||
                    if errors:
 | 
					                    if errors:
 | 
				
			||||||
                        error_message = ', '.join([error['message'] for error in errors])
 | 
					                        error_message = ', '.join([error['message'] for error in errors])
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user