mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 00:25:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# coding: utf-8
 | 
						|
from __future__ import unicode_literals
 | 
						|
 | 
						|
from .common import InfoExtractor
 | 
						|
 | 
						|
from ..compat import compat_str
 | 
						|
from ..utils import (
 | 
						|
    parse_iso8601,
 | 
						|
    ExtractorError,
 | 
						|
    try_get
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class FancodeVodIE(InfoExtractor):
 | 
						|
    IE_NAME = 'fancode:vod'
 | 
						|
 | 
						|
    _VALID_URL = r'https?://(?:www\.)?fancode\.com/video/(?P<id>[0-9]+)\b'
 | 
						|
 | 
						|
    _TESTS = [{
 | 
						|
        'url': 'https://fancode.com/video/15043/match-preview-pbks-vs-mi',
 | 
						|
        'params': {
 | 
						|
            'skip_download': True,
 | 
						|
            'format': 'bestvideo'
 | 
						|
        },
 | 
						|
        'info_dict': {
 | 
						|
            'id': '6249806281001',
 | 
						|
            'ext': 'mp4',
 | 
						|
            'title': 'Match Preview: PBKS vs MI',
 | 
						|
            'thumbnail': r're:^https?://.*\.jpg$',
 | 
						|
            "timestamp": 1619081590,
 | 
						|
            'view_count': int,
 | 
						|
            'like_count': int,
 | 
						|
            'upload_date': '20210422',
 | 
						|
            'uploader_id': '6008340455001'
 | 
						|
        }
 | 
						|
    }, {
 | 
						|
        'url': 'https://fancode.com/video/15043',
 | 
						|
        'only_matching': True,
 | 
						|
    }]
 | 
						|
 | 
						|
    def _real_extract(self, url):
 | 
						|
 | 
						|
        BRIGHTCOVE_URL_TEMPLATE = 'https://players.brightcove.net/%s/default_default/index.html?videoId=%s'
 | 
						|
 | 
						|
        video_id = self._match_id(url)
 | 
						|
        webpage = self._download_webpage(url, video_id)
 | 
						|
        brightcove_user_id = self._html_search_regex(
 | 
						|
            r'(?:https?://)?players\.brightcove\.net/(\d+)/default_default/index(?:\.min)?\.js',
 | 
						|
            webpage, 'user id')
 | 
						|
 | 
						|
        data = '''{
 | 
						|
            "query":"query Video($id: Int\\u0021, $filter: SegmentFilter) { media(id: $id, filter: $filter) { id contentId title contentId publishedTime totalViews totalUpvotes provider thumbnail { src } mediaSource {brightcove } duration isPremium isUserEntitled tags duration }}",
 | 
						|
            "variables":{
 | 
						|
                "id":%s,
 | 
						|
                "filter":{
 | 
						|
                    "contentDataType":"DEFAULT"
 | 
						|
                }
 | 
						|
            },
 | 
						|
            "operationName":"Video"
 | 
						|
            }''' % video_id
 | 
						|
 | 
						|
        metadata_json = self._download_json(
 | 
						|
            'https://www.fancode.com/graphql', video_id, data=data.encode(), note='Downloading metadata',
 | 
						|
            headers={
 | 
						|
                'content-type': 'application/json',
 | 
						|
                'origin': 'https://fancode.com',
 | 
						|
                'referer': url,
 | 
						|
            })
 | 
						|
 | 
						|
        media = try_get(metadata_json, lambda x: x['data']['media'], dict) or {}
 | 
						|
        brightcove_video_id = try_get(media, lambda x: x['mediaSource']['brightcove'], compat_str)
 | 
						|
 | 
						|
        if brightcove_video_id is None:
 | 
						|
            raise ExtractorError('Unable to extract brightcove Video ID')
 | 
						|
 | 
						|
        is_premium = media.get('isPremium')
 | 
						|
        if is_premium:
 | 
						|
            self.report_warning('this video requires a premium account', video_id)
 | 
						|
 | 
						|
        return {
 | 
						|
            '_type': 'url_transparent',
 | 
						|
            'url': BRIGHTCOVE_URL_TEMPLATE % (brightcove_user_id, brightcove_video_id),
 | 
						|
            'ie_key': 'BrightcoveNew',
 | 
						|
            'id': video_id,
 | 
						|
            'title': media['title'],
 | 
						|
            'like_count': media.get('totalUpvotes'),
 | 
						|
            'view_count': media.get('totalViews'),
 | 
						|
            'tags': media.get('tags'),
 | 
						|
            'release_timestamp': parse_iso8601(media.get('publishedTime')),
 | 
						|
            'availability': self._availability(needs_premium=is_premium),
 | 
						|
        }
 |