o
    i4?                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZ ddlmZ G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZdS )    N   )AnvatoIE)InfoExtractor   )ExtractorError
clean_htmldetermine_extget_element_by_classint_or_nonemake_archive_idurl_or_noneurlencode_postdata)traverse_objc                   @   s   e Zd ZdZdZdZddee e	
ejdddd	d
dd  dddZi ZdZdZdZdd Zdd ZdddZdd ZdS )	NFLBaseIEa  (?x)
                    https?://
                        (?P<host>
                            (?:www\.)?
                            (?:
                                (?:
                                    nfl|
                                    buffalobills|
                                    miamidolphins|
                                    patriots|
                                    newyorkjets|
                                    baltimoreravens|
                                    bengals|
                                    clevelandbrowns|
                                    steelers|
                                    houstontexans|
                                    colts|
                                    jaguars|
                                    (?:titansonline|tennesseetitans)|
                                    denverbroncos|
                                    (?:kc)?chiefs|
                                    raiders|
                                    chargers|
                                    dallascowboys|
                                    giants|
                                    philadelphiaeagles|
                                    (?:redskins|washingtonfootball)|
                                    chicagobears|
                                    detroitlions|
                                    packers|
                                    vikings|
                                    atlantafalcons|
                                    panthers|
                                    neworleanssaints|
                                    buccaneers|
                                    azcardinals|
                                    (?:stlouis|the)rams|
                                    49ers|
                                    seahawks
                                )\.com|
                                .+?\.clubs\.nfl\.com
                            )
                        )/
                    zp<script[^>]+id="[^"]*video-config-[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}[^"]*"[^>]*>\s*({.+});?\s*</script>z(anvato:GXvEgwyJeWem8KCYXfeoHWknwP48Mboj: 4cFUW6DmwJpzT9L7LrG3qRAcABG5s04gCZuvCL49d9OwfGsRdesktopChromeWindowsz10.0)modelversionosName	osVersion,:
separatorsother	undefined)	clientKeyclientSecretdeviceId
deviceInfonetworkTypepeacockUUIDB3_Qa8TkWpIB8ESCBT8tY2TukbVKgO5F6BJVc7N1oComdwFzI7H2L9NOWdm11i_BY9fNr   c                 C   s   |  d}t|d| j dd fdd hfdd}|s|   d|vr)td	d
d| jdd dtdd| jd|ddt|ddd hfdddd	ddid}t|dddd| _t| jd krctd!d
dd S )"Nzhttps://auth-id.nfl.com/glt_c                 S   s
   |  dS )Nr'   )
startswith)k_ r+   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/nfl.py<lambda>\   s   
 z-NFLBaseIE._get_account_info.<locals>.<lambda>c                 S   s   | j S N)valuexr+   r+   r,   r-   \   s    Fget_allucidzRequired cookies for the auth-id.nfl.com domain were not found among passed cookies. If using --cookies, these cookies must be exported along with .nfl.com cookies, or else try using --cookies-from-browser insteadT)expectedz/https://auth-id.nfl.com/accounts.getAccountInfozDownloading account infozprofile,dataen	js_latestcookiezhttps://www.nfl.com/gig_canary_verc                 S   s   | j dd S )N-r   )r/   	partitionr0   r+   r+   r,   r-   p       15170)defaultjson)	includelangAPIKeysdklogin_tokenauthModepageURLsdkBuildformatContent-Typez!application/x-www-form-urlencoded)notedataheaderssignatureTimestampUIDUIDSignature)rM   uiduidSignature   z5Failed to retrieve account info with provided cookies)	_get_cookiesr   _API_KEYraise_login_requiredr   _download_jsonr   _ACCOUNT_INFOlen)selfcookiesrD   accountr+   r+   r,   _get_account_infoY   sP   


zNFLBaseIE._get_account_infoc              	   C   s   | j r| jtt d krd S | jd| jdrdnd d ddidtji | j	| jd	d

 d}|d | _ |d | _|d | jd< d S )N   z'https://api.nfl.com/identity/v3/token%srefreshTokenz/refresh rI   application/jsonzDownloading access tokenr   r   )rL   rJ   rK   accessToken	expiresIn)_TOKEN_TOKEN_EXPIRYinttimerV   rW   getr?   dumps_CLIENT_DATAencode)rY   tokenr+   r+   r,   _get_auth_token}   s   


zNFLBaseIE._get_auth_tokenFc                 C   s   |    | jd| |d| j dddtjd|ddd d	}| j|d
 |ddd\}}||||tt|gdt	|dddt
htfddt
hfddthfddddthifdfS )Nz"https://api.nfl.com/play/v1/asset/Bearer r`   )AuthorizationAcceptrI   T)initliver   r   )rL   rK   	accessUrlmp4hls)m3u8_id)idformats	subtitlesis_live_old_archive_idsmetadataevent)	def_titlefriendlyNamedef_descriptionduration
thumbnails.url)titledescriptionr   r   )rl   rV   rc   r?   rh   rj   #_extract_m3u8_formats_and_subtitlesr   r   r   stranyr
   r   )rY   mcp_idry   rK   rw   rx   r+   r+   r,   _extract_video   s2   





zNFLBaseIE._extract_videoc                 C   s
  |  ||}t|dthfpd}|d d }|d }r$| j||dS d|dp-|d i}|d	 }t|}|d
krG| ||d d|d< n||d	< |ddu rVd|d< d }	t|ddtd }
rk|
t|
ddg}	|i t|dt	hfdt
hfd||	d |S )Nrq   Fplaylistr   mcpID)ry   rv   entityIdr   m3u8rs   rw   audioTnonevcodecimageSrcposterImage)expected_typejpg)r   extr   r   )r   r   )ry   r   )_parse_jsonr   boolrg   r   r   _extract_m3u8_formatsr   updater   r   )rY   video_config
display_idry   itemr   infoitem_urlr   r   	image_urlr+   r+   r,   _parse_video_config   s8   
zNFLBaseIE._parse_video_config)F)__name__
__module____qualname___VALID_URL_BASE_VIDEO_CONFIG_REGEX_ANVATO_PREFIXr   uuiduuid4base64	b64encoder?   rh   rj   decoderi   rW   rT   rc   rd   r\   rl   r   r   r+   r+   r+   r,   r      s:    ,
$
r   c                	   @   sf   e Zd ZdZejd Zddddddd	d
gdddddddddddddddddgZdd ZdS )NFLIEznfl.comz)(?:videos?|listen|audio)/(?P<id>[^/#?&]+)zVhttps://www.nfl.com/videos/baker-mayfield-s-game-changing-plays-from-3-td-game-week-14899441rs   z;Baker Mayfield's game-changing plays from 3-TD game Week 14z$md5:85e05a3cc163f8c344340f220521136dzre:https?://.+\.jpg   zanvato 899441)rv   r   r   r   	thumbnailr   rz   )r   	info_dictzchttps://www.chiefs.com/listen/patrick-mahomes-travis-kelce-react-to-win-over-dolphins-the-breakdown 92a517f05bd3eb50fe50244bc621aec8z$8b7c3625-a461-4751-8db4-85f536f2bbd0mp3zHPatrick Mahomes, Travis Kelce React to Win Over Dolphins | The Breakdownz$md5:12ada8ee70e6762658c30e223e095075zshttps://static.clubs.nfl.com/image/private/t_editorial_landscape_12_desktop/v1571153441/chiefs/rfljejccnyhhkpkfq855)rv   r   r   r   r   )r   md5r   zMhttps://www.buffalobills.com/video/buffalo-bills-military-recognition-week-14T)r   only_matchingzjhttps://www.raiders.com/audio/instant-reactions-raiders-week-14-loss-to-indianapolis-colts-espn-jason-fitzc                 C   s.   |  |}| ||}| | | j|d|S )Nzvideo config)	_match_id_download_webpager   _search_regexr   )rY   r   r   webpager+   r+   r,   _real_extract   s   
zNFLIE._real_extractN)	r   r   r   IE_NAMEr   r   
_VALID_URL_TESTSr   r+   r+   r+   r,   r      s<    
r   c                   @   s4   e Zd ZdZejd ZddddddZd	d
 ZdS )NFLArticleIEznfl.com:articleznews/(?P<id>[^/#?&]+)zrhttps://www.buffalobills.com/news/the-only-thing-we-ve-earned-is-the-noise-bills-coaches-discuss-handling-rising-ezPthe-only-thing-we-ve-earned-is-the-noise-bills-coaches-discuss-handling-rising-ez_'The only thing we've earned is the noise' | Bills coaches discuss handling rising expectations)rv   r      )r   r   playlist_countc                    sT    | |  fdd}ttdp!ddg}|  |S )Nc                  3   s(    t jD ]	} |  V  qd S r.   )refindallr   r   )r   r   rY   r   r+   r,   entries   s   z+NFLArticleIE._real_extract.<locals>.entriesznfl-c-article__titlezog:titleztwitter:title)r   r   r   r	   _html_search_metaplaylist_result)rY   r   r   r   r+   r   r,   r      s   
zNFLArticleIE._real_extractN)	r   r   r   r   r   r   r   _TESTr   r+   r+   r+   r,   r      s    
	r   c                   @   s   e Zd ZdZdZddddddd	d
ddgg dddddiddddddiddddddidddddddddd d!dgd"gdddd#d$d%giid&d'gZd(d)d*d+d,Zd-d. Zd/d0 Zd1S )2NFLPlusReplayIEznfl.com:plus:replayzHhttps?://(?:www\.)?nfl\.com/plus/games/(?P<slug>[\w-]+)(?:/(?P<id>\d+))?zDhttps://www.nfl.com/plus/games/giants-at-vikings-2022-post-1/15721081572108rs   z$New York Giants at Minnesota VikingszSNew York Giants play the Minnesota Vikings at U.S. Bank Stadium on January 15, 2023NFL20230116iH%ci  zGame Highlights)zMinnesota VikingszNew York Giantsz%Minnesota Vikings vs. New York Giantsre:^https?://.*\.jpgrv   r   r   r   uploaderupload_date	timestampr   
categoriestagsr   skip_downloadr   )r   r   paramsSubscription requiredz<https://www.nfl.com/plus/games/giants-at-vikings-2022-post-1r   rv   zgiants-at-vikings-2022-post-1)rJ   r   r   r   z<https://www.nfl.com/plus/games/giants-at-patriots-2011-pre-4r   zgiants-at-patriots-2011-pre-4950701zGiants @ Patriotsz(Giants at Patriots on September 01, 201120210724i2\`i  zplay-by-playnflplusreplaytypecondensed_game)r   extractor_argsrJ   r   r   r   z	Full GamezFull Game - SpanishzCondensed GamezAll-22)	full_gamefull_game_spanishr   all_22c                 C      |    d S r.   r\   rY   r+   r+   r,   _real_initializeH     z NFLPlusReplayIE._real_initializec                    s    |dd\}}ddgdv rtj tjd f|sd  ddj i}j	d| |dd	d
i|dd }j	d|dd|i|d t
dkrdt dfdddfdd}|rk|S  fdd}| |S )Nslugrv   r   allrn   rm   z6https://api.nfl.com/football/v2/games/externalId/slug/zDownloading game IDwithExternalIdstrue)queryrL   z-https://api.nfl.com/content/v1/videos/replayszDownloading replays JSONgameIdr   itemsc                    s   |d  d kS )NsubTyper   r+   r*   vrequested_typesr+   r,   r-   ]  r<   z/NFLPlusReplayIE._real_extract.<locals>.<lambda>mcpPlaybackIdFr2   c                  3   s2    t  dfddfD ]
} | d V  qd S )Nr   c                    s   |d o	|d  v S )Nr   r   r+   r   r   r+   r,   r-   d  s    z@NFLPlusReplayIE._real_extract.<locals>.entries.<locals>.<lambda>r   )r   r   )replayreplaysr   rY   r+   r,   r   b  s   z.NFLPlusReplayIE._real_extract.<locals>.entries)_match_valid_urlgroup_configuration_arglist_REPLAY_TYPESkeysr   rl   rc   rV   rX   r   r   )rY   r   r   video_idrL   game_idr   r+   r   r,   r   K  s8   


zNFLPlusReplayIE._real_extractN)	r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r   
  sp    5r   c                   @   sT   e Zd ZdZdZddddddd	d
dddgdgddddidgZdd Zdd ZdS )NFLPlusEpisodeIEznfl.com:plus:episodez8https?://(?:www\.)?nfl\.com/plus/episodes/(?P<id>[\w-]+)r   zLhttps://www.nfl.com/plus/episodes/kurt-s-qb-insider-conference-championships1576832rs   zConference Championshipsz$md5:944f7fab56f7a37430bf8473f5473857r   20230127i((ci  Analysisz6Cincinnati Bengals at Kansas City Chiefs (2022-POST-3)r   r   r   r   r   c                 C   r   r.   r   r   r+   r+   r,   r     r   z!NFLPlusEpisodeIE._real_initializec                 C   sB   |  |}|   | jd| |dd| j idd }| |S )Nz/https://api.nfl.com/content/v1/videos/episodes/rn   rm   )rL   r   )r   rl   rV   rc   r   )rY   r   r   r   r+   r+   r,   r     s   


zNFLPlusEpisodeIE._real_extractN)r   r   r   r   r   r   r   r   r+   r+   r+   r,   r   k  s*    r   )r   r?   r   rf   r   anvator   commonr   utilsr   r   r   r	   r
   r   r   r   utils.traversalr   r   r   r   r   r   r+   r+   r+   r,   <module>   s    (
 3'a