[espn] add support for espnfc and extract more formats(closes #8053)
This commit is contained in:
		
							parent
							
								
									173558ce96
								
							
						
					
					
						commit
						0f897e0929
					
				
					 1 changed files with 50 additions and 20 deletions
				
			
		| 
						 | 
					@ -1,6 +1,9 @@
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .common import InfoExtractor
 | 
					from .common import InfoExtractor
 | 
				
			||||||
 | 
					from .once import OnceIE
 | 
				
			||||||
from ..compat import compat_str
 | 
					from ..compat import compat_str
 | 
				
			||||||
from ..utils import (
 | 
					from ..utils import (
 | 
				
			||||||
    determine_ext,
 | 
					    determine_ext,
 | 
				
			||||||
| 
						 | 
					@ -9,22 +12,27 @@ from ..utils import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ESPNIE(InfoExtractor):
 | 
					class ESPNIE(OnceIE):
 | 
				
			||||||
    _VALID_URL = r'''(?x)
 | 
					    _VALID_URL = r'''(?x)
 | 
				
			||||||
                    https?://
 | 
					                    https?://
 | 
				
			||||||
                        (?:
 | 
					 | 
				
			||||||
                            (?:(?:\w+\.)+)?espn\.go|
 | 
					 | 
				
			||||||
                            (?:www\.)?espn
 | 
					 | 
				
			||||||
                        )\.com/
 | 
					 | 
				
			||||||
                        (?:
 | 
					                        (?:
 | 
				
			||||||
                            (?:
 | 
					                            (?:
 | 
				
			||||||
                                video/clip|
 | 
					                                (?:
 | 
				
			||||||
                                watch/player
 | 
					                                    (?:(?:\w+\.)+)?espn\.go|
 | 
				
			||||||
                            )
 | 
					                                    (?:www\.)?espn
 | 
				
			||||||
                            (?:
 | 
					                                )\.com/
 | 
				
			||||||
                                \?.*?\bid=|
 | 
					                                (?:
 | 
				
			||||||
                                /_/id/
 | 
					                                    (?:
 | 
				
			||||||
                            )
 | 
					                                        video/(?:clip|iframe/twitter)|
 | 
				
			||||||
 | 
					                                        watch/player
 | 
				
			||||||
 | 
					                                    )
 | 
				
			||||||
 | 
					                                    (?:
 | 
				
			||||||
 | 
					                                        .*?\?.*?\bid=|
 | 
				
			||||||
 | 
					                                        /_/id/
 | 
				
			||||||
 | 
					                                    )
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                            )|
 | 
				
			||||||
 | 
					                            (?:www\.)espnfc\.(?:com|us)/(?:video/)?[^/]+/\d+/video/
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        (?P<id>\d+)
 | 
					                        (?P<id>\d+)
 | 
				
			||||||
                    '''
 | 
					                    '''
 | 
				
			||||||
| 
						 | 
					@ -77,6 +85,15 @@ class ESPNIE(InfoExtractor):
 | 
				
			||||||
    }, {
 | 
					    }, {
 | 
				
			||||||
        'url': 'http://www.espn.com/video/clip/_/id/17989860',
 | 
					        'url': 'http://www.espn.com/video/clip/_/id/17989860',
 | 
				
			||||||
        'only_matching': True,
 | 
					        'only_matching': True,
 | 
				
			||||||
 | 
					    }, {
 | 
				
			||||||
 | 
					        'url': 'https://espn.go.com/video/iframe/twitter/?cms=espn&id=10365079',
 | 
				
			||||||
 | 
					        'only_matching': True,
 | 
				
			||||||
 | 
					    }, {
 | 
				
			||||||
 | 
					        'url': 'http://www.espnfc.us/video/espn-fc-tv/86/video/3319154/nashville-unveiled-as-the-newest-club-in-mls',
 | 
				
			||||||
 | 
					        'only_matching': True,
 | 
				
			||||||
 | 
					    }, {
 | 
				
			||||||
 | 
					        'url': 'http://www.espnfc.com/english-premier-league/23/video/3324163/premier-league-in-90-seconds-golden-tweets',
 | 
				
			||||||
 | 
					        'only_matching': True,
 | 
				
			||||||
    }]
 | 
					    }]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _real_extract(self, url):
 | 
					    def _real_extract(self, url):
 | 
				
			||||||
| 
						 | 
					@ -93,7 +110,9 @@ class ESPNIE(InfoExtractor):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def traverse_source(source, base_source_id=None):
 | 
					        def traverse_source(source, base_source_id=None):
 | 
				
			||||||
            for source_id, source in source.items():
 | 
					            for source_id, source in source.items():
 | 
				
			||||||
                if isinstance(source, compat_str):
 | 
					                if source_id == 'alert':
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					                elif isinstance(source, compat_str):
 | 
				
			||||||
                    extract_source(source, base_source_id)
 | 
					                    extract_source(source, base_source_id)
 | 
				
			||||||
                elif isinstance(source, dict):
 | 
					                elif isinstance(source, dict):
 | 
				
			||||||
                    traverse_source(
 | 
					                    traverse_source(
 | 
				
			||||||
| 
						 | 
					@ -106,7 +125,9 @@ class ESPNIE(InfoExtractor):
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
            format_urls.add(source_url)
 | 
					            format_urls.add(source_url)
 | 
				
			||||||
            ext = determine_ext(source_url)
 | 
					            ext = determine_ext(source_url)
 | 
				
			||||||
            if ext == 'smil':
 | 
					            if OnceIE.suitable(source_url):
 | 
				
			||||||
 | 
					                formats.extend(self._extract_once_formats(source_url))
 | 
				
			||||||
 | 
					            elif ext == 'smil':
 | 
				
			||||||
                formats.extend(self._extract_smil_formats(
 | 
					                formats.extend(self._extract_smil_formats(
 | 
				
			||||||
                    source_url, video_id, fatal=False))
 | 
					                    source_url, video_id, fatal=False))
 | 
				
			||||||
            elif ext == 'f4m':
 | 
					            elif ext == 'f4m':
 | 
				
			||||||
| 
						 | 
					@ -117,12 +138,24 @@ class ESPNIE(InfoExtractor):
 | 
				
			||||||
                    source_url, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
					                    source_url, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
				
			||||||
                    m3u8_id=source_id, fatal=False))
 | 
					                    m3u8_id=source_id, fatal=False))
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                formats.append({
 | 
					                f = {
 | 
				
			||||||
                    'url': source_url,
 | 
					                    'url': source_url,
 | 
				
			||||||
                    'format_id': source_id,
 | 
					                    'format_id': source_id,
 | 
				
			||||||
                })
 | 
					                }
 | 
				
			||||||
 | 
					                mobj = re.search(r'(\d+)p(\d+)_(\d+)k\.', source_url)
 | 
				
			||||||
 | 
					                if mobj:
 | 
				
			||||||
 | 
					                    f.update({
 | 
				
			||||||
 | 
					                        'height': int(mobj.group(1)),
 | 
				
			||||||
 | 
					                        'fps': int(mobj.group(2)),
 | 
				
			||||||
 | 
					                        'tbr': int(mobj.group(3)),
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                if source_id == 'mezzanine':
 | 
				
			||||||
 | 
					                    f['preference'] = 1
 | 
				
			||||||
 | 
					                formats.append(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        traverse_source(clip['links']['source'])
 | 
					        links = clip.get('links', {})
 | 
				
			||||||
 | 
					        traverse_source(links.get('source', {}))
 | 
				
			||||||
 | 
					        traverse_source(links.get('mobile', {}))
 | 
				
			||||||
        self._sort_formats(formats)
 | 
					        self._sort_formats(formats)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        description = clip.get('caption') or clip.get('description')
 | 
					        description = clip.get('caption') or clip.get('description')
 | 
				
			||||||
| 
						 | 
					@ -144,9 +177,6 @@ class ESPNIE(InfoExtractor):
 | 
				
			||||||
class ESPNArticleIE(InfoExtractor):
 | 
					class ESPNArticleIE(InfoExtractor):
 | 
				
			||||||
    _VALID_URL = r'https?://(?:espn\.go|(?:www\.)?espn)\.com/(?:[^/]+/)*(?P<id>[^/]+)'
 | 
					    _VALID_URL = r'https?://(?:espn\.go|(?:www\.)?espn)\.com/(?:[^/]+/)*(?P<id>[^/]+)'
 | 
				
			||||||
    _TESTS = [{
 | 
					    _TESTS = [{
 | 
				
			||||||
        'url': 'https://espn.go.com/video/iframe/twitter/?cms=espn&id=10365079',
 | 
					 | 
				
			||||||
        'only_matching': True,
 | 
					 | 
				
			||||||
    }, {
 | 
					 | 
				
			||||||
        'url': 'http://espn.go.com/nba/recap?gameId=400793786',
 | 
					        'url': 'http://espn.go.com/nba/recap?gameId=400793786',
 | 
				
			||||||
        'only_matching': True,
 | 
					        'only_matching': True,
 | 
				
			||||||
    }, {
 | 
					    }, {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue