mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 08:37:07 -05:00 
			
		
		
		
	[cloudflarestream] Add support for cloudflare streams (closes #16375)
This commit is contained in:
		
							
								
								
									
										60
									
								
								youtube_dl/extractor/cloudflarestream.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								youtube_dl/extractor/cloudflarestream.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
# coding: utf-8
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
from .common import InfoExtractor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CloudflareStreamIE(InfoExtractor):
 | 
			
		||||
    _VALID_URL = r'''(?x)
 | 
			
		||||
                    https?://
 | 
			
		||||
                        (?:
 | 
			
		||||
                            (?:watch\.)?cloudflarestream\.com/|
 | 
			
		||||
                            embed\.cloudflarestream\.com/embed/[^/]+\.js\?.*?\bvideo=
 | 
			
		||||
                        )
 | 
			
		||||
                        (?P<id>[\da-f]+)
 | 
			
		||||
                    '''
 | 
			
		||||
    _TESTS = [{
 | 
			
		||||
        'url': 'https://embed.cloudflarestream.com/embed/we4g.fla9.latest.js?video=31c9291ab41fac05471db4e73aa11717',
 | 
			
		||||
        'info_dict': {
 | 
			
		||||
            'id': '31c9291ab41fac05471db4e73aa11717',
 | 
			
		||||
            'ext': 'mp4',
 | 
			
		||||
            'title': '31c9291ab41fac05471db4e73aa11717',
 | 
			
		||||
        },
 | 
			
		||||
        'params': {
 | 
			
		||||
            'skip_download': True,
 | 
			
		||||
        },
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'https://watch.cloudflarestream.com/9df17203414fd1db3e3ed74abbe936c1',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'https://cloudflarestream.com/31c9291ab41fac05471db4e73aa11717/manifest/video.mpd',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }]
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _extract_urls(webpage):
 | 
			
		||||
        return [
 | 
			
		||||
            mobj.group('url')
 | 
			
		||||
            for mobj in re.finditer(
 | 
			
		||||
                r'<script[^>]+\bsrc=(["\'])(?P<url>(?:https?:)?//embed\.cloudflarestream\.com/embed/[^/]+\.js\?.*?\bvideo=[\da-f]+?.*?)\1',
 | 
			
		||||
                webpage)]
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
        video_id = self._match_id(url)
 | 
			
		||||
 | 
			
		||||
        formats = self._extract_m3u8_formats(
 | 
			
		||||
            'https://cloudflarestream.com/%s/manifest/video.m3u8' % video_id,
 | 
			
		||||
            video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls',
 | 
			
		||||
            fatal=False)
 | 
			
		||||
        formats.extend(self._extract_mpd_formats(
 | 
			
		||||
            'https://cloudflarestream.com/%s/manifest/video.mpd' % video_id,
 | 
			
		||||
            video_id, mpd_id='dash', fatal=False))
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            'id': video_id,
 | 
			
		||||
            'title': video_id,
 | 
			
		||||
            'formats': formats,
 | 
			
		||||
        }
 | 
			
		||||
@@ -195,6 +195,7 @@ from .clippit import ClippitIE
 | 
			
		||||
from .cliprs import ClipRsIE
 | 
			
		||||
from .clipsyndicate import ClipsyndicateIE
 | 
			
		||||
from .closertotruth import CloserToTruthIE
 | 
			
		||||
from .cloudflarestream import CloudflareStreamIE
 | 
			
		||||
from .cloudy import CloudyIE
 | 
			
		||||
from .clubic import ClubicIE
 | 
			
		||||
from .clyp import ClypIE
 | 
			
		||||
 
 | 
			
		||||
@@ -107,6 +107,7 @@ from .springboardplatform import SpringboardPlatformIE
 | 
			
		||||
from .yapfiles import YapFilesIE
 | 
			
		||||
from .vice import ViceIE
 | 
			
		||||
from .xfileshare import XFileShareIE
 | 
			
		||||
from .cloudflarestream import CloudflareStreamIE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GenericIE(InfoExtractor):
 | 
			
		||||
@@ -2013,6 +2014,19 @@ class GenericIE(InfoExtractor):
 | 
			
		||||
                'skip_download': True,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            # CloudflareStream embed
 | 
			
		||||
            'url': 'https://www.cloudflare.com/products/cloudflare-stream/',
 | 
			
		||||
            'info_dict': {
 | 
			
		||||
                'id': '31c9291ab41fac05471db4e73aa11717',
 | 
			
		||||
                'ext': 'mp4',
 | 
			
		||||
                'title': '31c9291ab41fac05471db4e73aa11717',
 | 
			
		||||
            },
 | 
			
		||||
            'add_ie': [CloudflareStreamIE.ie_key()],
 | 
			
		||||
            'params': {
 | 
			
		||||
                'skip_download': True,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            'url': 'http://share-videos.se/auto/video/83645793?uid=13',
 | 
			
		||||
            'md5': 'b68d276de422ab07ee1d49388103f457',
 | 
			
		||||
@@ -3025,6 +3039,11 @@ class GenericIE(InfoExtractor):
 | 
			
		||||
            return self.playlist_from_matches(
 | 
			
		||||
                xfileshare_urls, video_id, video_title, ie=XFileShareIE.ie_key())
 | 
			
		||||
 | 
			
		||||
        cloudflarestream_urls = CloudflareStreamIE._extract_urls(webpage)
 | 
			
		||||
        if cloudflarestream_urls:
 | 
			
		||||
            return self.playlist_from_matches(
 | 
			
		||||
                cloudflarestream_urls, video_id, video_title, ie=CloudflareStreamIE.ie_key())
 | 
			
		||||
 | 
			
		||||
        sharevideos_urls = [mobj.group('url') for mobj in re.finditer(
 | 
			
		||||
            r'<iframe[^>]+?\bsrc\s*=\s*(["\'])(?P<url>(?:https?:)?//embed\.share-videos\.se/auto/embed/\d+\?.*?\buid=\d+.*?)\1',
 | 
			
		||||
            webpage)]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user