]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/nfl.py
3 from .common
import InfoExtractor
11 class NFLBaseIE(InfoExtractor
):
12 _VALID_URL_BASE
= r
'''(?x)
30 (?:titansonline|tennesseetitans)|
38 (?:redskins|washingtonfootball)|
56 _VIDEO_CONFIG_REGEX
= r
'<script[^>]+id="[^"]*video-config-[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}[^"]*"[^>]*>\s*({.+})'
59 def _parse_video_config(self
, video_config
, display_id
):
60 video_config
= self
._parse
_json
(video_config
, display_id
)
61 item
= video_config
['playlist'][0]
62 mcp_id
= item
.get('mcpID')
64 info
= self
.url_result(
65 'anvato:GXvEgwyJeWem8KCYXfeoHWknwP48Mboj:' + mcp_id
,
68 media_id
= item
.get('id') or item
['entityId']
70 item_url
= item
['url']
71 info
= {'id': media_id}
72 ext
= determine_ext(item_url
)
74 info
['formats'] = self
._extract
_m
3u8_formats
(item_url
, media_id
, 'mp4')
75 self
._sort
_formats
(info
['formats'])
77 info
['url'] = item_url
78 if item
.get('audio') is True:
79 info
['vcodec'] = 'none'
80 is_live
= video_config
.get('live') is True
82 image_url
= item
.get(item
.get('imageSrc')) or item
.get(item
.get('posterImage'))
86 'ext': determine_ext(image_url
, 'jpg'),
91 'description': clean_html(item
.get('description')),
92 'thumbnails': thumbnails
,
97 class NFLIE(NFLBaseIE
):
99 _VALID_URL
= NFLBaseIE
._VALID
_URL
_BASE
+ r
'(?:videos?|listen|audio)/(?P<id>[^/#?&]+)'
101 'url': 'https://www.nfl.com/videos/baker-mayfield-s-game-changing-plays-from-3-td-game-week-14',
105 'title': "Baker Mayfield's game-changing plays from 3-TD game Week 14",
106 'description': 'md5:85e05a3cc163f8c344340f220521136d',
107 'upload_date': '20201215',
108 'timestamp': 1608009755,
109 'thumbnail': r
're:^https?://.*\.jpg$',
113 'url': 'https://www.chiefs.com/listen/patrick-mahomes-travis-kelce-react-to-win-over-dolphins-the-breakdown',
114 'md5': '6886b32c24b463038c760ceb55a34566',
116 'id': 'd87e8790-3e14-11eb-8ceb-ff05c2867f99',
118 'title': 'Patrick Mahomes, Travis Kelce React to Win Over Dolphins | The Breakdown',
119 'description': 'md5:12ada8ee70e6762658c30e223e095075',
122 'url': 'https://www.buffalobills.com/video/buffalo-bills-military-recognition-week-14',
123 'only_matching': True,
125 'url': 'https://www.raiders.com/audio/instant-reactions-raiders-week-14-loss-to-indianapolis-colts-espn-jason-fitz',
126 'only_matching': True,
129 def _real_extract(self
, url
):
130 display_id
= self
._match
_id
(url
)
131 webpage
= self
._download
_webpage
(url
, display_id
)
132 return self
._parse
_video
_config
(self
._search
_regex
(
133 self
._VIDEO
_CONFIG
_REGEX
, webpage
, 'video config'), display_id
)
136 class NFLArticleIE(NFLBaseIE
):
137 IE_NAME
= 'nfl.com:article'
138 _VALID_URL
= NFLBaseIE
._VALID
_URL
_BASE
+ r
'news/(?P<id>[^/#?&]+)'
140 'url': 'https://www.buffalobills.com/news/the-only-thing-we-ve-earned-is-the-noise-bills-coaches-discuss-handling-rising-e',
142 'id': 'the-only-thing-we-ve-earned-is-the-noise-bills-coaches-discuss-handling-rising-e',
143 'title': "'The only thing we've earned is the noise' | Bills coaches discuss handling rising expectations",
148 def _real_extract(self
, url
):
149 display_id
= self
._match
_id
(url
)
150 webpage
= self
._download
_webpage
(url
, display_id
)
152 for video_config
in re
.findall(self
._VIDEO
_CONFIG
_REGEX
, webpage
):
153 entries
.append(self
._parse
_video
_config
(video_config
, display_id
))
154 title
= clean_html(get_element_by_class(
155 'nfl-c-article__title', webpage
)) or self
._html
_search
_meta
(
156 ['og:title', 'twitter:title'], webpage
)
157 return self
.playlist_result(entries
, display_id
, title
)