
    VGh4?                         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	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)    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                      e Zd ZdZdZdZdd e ej                                e	j                   ej                  dddd	d
d      j                               j                         dddZi ZdZdZdZd Zd ZddZd Zy)	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                    | j                  d      }t        |d| j                   d fd hfd      }|s| j                          d|vrt	        dd	
      | j                  dd dt        dd| j                  d|ddt        |dd hfd      dd	      ddi      }t        |dddd      | _        t        | j                        dk7  rt	        d d	
      y )!Nzhttps://auth-id.nfl.com/glt_c                 $    | j                  d      S )Nr*   )
startswith)k_s     ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/nfl.py<lambda>z-NFLBaseIE._get_account_info.<locals>.<lambda>\   s    !,,v2F     c                     | j                   S N)valuexs    r/   r0   z-NFLBaseIE._get_account_info.<locals>.<lambda>\   s    TUT[T[ r1   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                 >    | j                   j                  d      d   S )N-r   )r4   	partitionr5   s    r/   r0   z-NFLBaseIE._get_account_info.<locals>.<lambda>p   s    1B1B31G1J r1   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)rR   uiduidSignature   z5Failed to retrieve account info with provided cookies)	_get_cookiesr   _API_KEYraise_login_requiredr   _download_jsonr   _ACCOUNT_INFOlen)selfcookiesrI   accounts       r/   _get_account_infozNFLBaseIE._get_account_infoY   s,   ##$>?"7DMM?#%FGJ[I\-^gln%%'  CMQS S
 %%=t+2D)--"*$1($'J&K3MV]_ F 3 ()LM & O *'"6*4
  t!!"a' !Xcghh (r1   c           
         | j                   r.| j                  t        t        j                         dz         kD  ry | j	                  d| j
                  j                  d      rdndz  d ddidt        j                  i | j                  | j
                  d	
      j                               }|d   | _         |d   | _        |d   | j
                  d<   y )N   z'https://api.nfl.com/identity/v3/token%srefreshTokenz/refresh rN   application/jsonzDownloading access tokenr   r   )rQ   rO   rP   accessToken	expiresIn)_TOKEN_TOKEN_EXPIRYinttimer[   r\   getrD   dumps_CLIENT_DATAencode)r^   tokens     r/   _get_auth_tokenzNFLBaseIE._get_auth_token}   s    ;;4--DIIK"4D0EE##5"0044^D
"N>+=>E_Gt00GD4F4FGT^_ffh	 $ j M*";/-2>-B>*r1   c                    | j                          | j                  d| |d| j                   dddt        j                  d|dd      j                         	      }| j                  |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 rf   )AuthorizationAcceptrN   T)initliver   r   )rQ   rP   	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   )rr   r[   ri   rD   rn   rp   #_extract_m3u8_formats_and_subtitlesr   r   r   stranyr   r   )r^   mcp_idr   rP   r~   r   s         r/   _extract_videozNFLBaseIE._extract_video   s   ""096#*4;;-!8, 2L JJg>:V]]_ # a "EEvue F = "!06!B C
 4*!#@3%M '):SEB$j;-@+S%%+9OP	/ " 
 	
r1   c           	      4   | j                  ||      }t        |dt        hf      xs d}|d   d   }|j                  d      x}r| j	                  ||      S d|j                  d      xs |d   i}|d	   }t        |      }|d
k(  r| j                  ||d   d      |d<   n||d	<   |j                  d      du rd|d<   d }	t        |ddt              x}
r|
t        |
d      dg}	|j                  i t        |dt        hfdt        hfd      ||	d       |S )Nrx   Fplaylistr   mcpID)r   r}   entityIdr   m3u8rz   r~   audioTnonevcodecimageSrcposterImage)expected_typejpg)r   extr   r   )r   r   )r   r   )_parse_jsonr   boolrm   r   r	   _extract_m3u8_formatsr   updater   r   )r^   video_config
display_idr   itemr   infoitem_urlr   r   	image_urls              r/   _parse_video_configzNFLBaseIE._parse_video_config   s^   ''jA|ftf-=>G%J'*XXg&&6&&&vw&??dhhtn8Z(89;H%&="884:uUDO"DKxx D(!'X
$T:}T_``9` $Y6 J
 	 
4!C5) -
|<" 

 $
 	 r1   )F)__name__
__module____qualname___VALID_URL_BASE_VIDEO_CONFIG_REGEX_ANVATO_PREFIXr   uuiduuid4base64	b64encoderD   rn   rp   decodero   r\   rY   ri   rj   ra   rr   r   r    r1   r/   r   r      s    +OX N?N 8*


%&f&&ztzz	3

 !("
 #)&(,
 -3FH"L MSHFM"iHC
2!r1   r   c            	       x    e Zd ZdZej
                  dz   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 Zy)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899441rz   z;Baker Mayfield's game-changing plays from 3-TD game Week 14z$md5:85e05a3cc163f8c344340f220521136dzre:https?://.+\.jpg   zanvato 899441)r}   r   r   r   	thumbnailr   r   )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)r}   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                     | j                  |      }| j                  ||      }| j                  | j                  | j                  |d      |      S )Nzvideo config)	_match_id_download_webpager   _search_regexr   )r^   r   r   webpages       r/   _real_extractzNFLIE._real_extract   sT    ^^C(
((j9''(:(:$$g~)?@JL 	Lr1   N)	r   r   r   IE_NAMEr   r   
_VALID_URL_TESTSr   r   r1   r/   r   r      s    G**-YYJgRA/!0 1
 u18_A O

 _ |1F:Lr1   r   c                   F    e Zd ZdZej
                  dz   ZddddddZd	 Zy
)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)r}   r      )r   r   playlist_countc                       j                  |       j                  |       fd}t        t        d            xs  j	                  ddg      } j                   |       |      S )Nc               3      K   t        j                  j                        D ]  } j                  |         y wr3   )refindallr   r   )r   r   r^   r   s    r/   entriesz+NFLArticleIE._real_extract.<locals>.entries   s<      "

4+C+CW M I..|ZHHIs   ;>znfl-c-article__titlezog:titleztwitter:title)r   r   r   r
   _html_search_metaplaylist_result)r^   r   r   r   r   r   s   `   @@r/   r   zNFLArticleIE._real_extract   s{    ^^C(
((j9	I /"G- . 4151G1G)724 	 ##GIz5AAr1   N)	r   r   r   r   r   r   r   _TESTr   r   r1   r/   r   r      s;    G**-EEJ Ddv
 EBr1   r   c                       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- Zd. Zy/)0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1572108rz   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r}   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   r}   zgiants-at-vikings-2022-post-1)rO   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rO   r   r   r   z	Full GamezFull Game - SpanishzCondensed GamezAll-22)	full_gamefull_game_spanishr   all_22c                 $    | j                          y r3   ra   r^   s    r/   _real_initializez NFLPlusReplayIE._real_initializeH       r1   c                 L     j                  |      j                  dd      \  }} j                  ddg      dv r#t         j                  j                               t         j                  d f      |sy j                          dd j                   i} j                  d| |dd	d
i|      d   } j                  d|dd|i|      t              dk(  rt        dfddfd      }|r j                  |      S  fd} j                   |       |      S )Nslugr}   r   allru   rt   z6https://api.nfl.com/football/v2/games/externalId/slug/zDownloading game IDwithExternalIdstrue)queryrQ   z-https://api.nfl.com/content/v1/videos/replayszDownloading replays JSONgameIdr   itemsc                     |d   d   k(  S )NsubTyper   r   r.   vrequested_typess     r/   r0   z/NFLPlusReplayIE._real_extract.<locals>.<lambda>]  s    !I,/!:L*L r1   mcpPlaybackIdFr7   c               3   f   K   t        dfdf      D ]  } j                  | d           y w)Nr   c                      |d   xr |d   v S )Nr   r   r   r   s     r/   r0   z@NFLPlusReplayIE._real_extract.<locals>.entries.<locals>.<lambda>d  s    /0B0fq|WfGf r1   r   )r   r   )replayreplaysr   r^   s    r/   r   z.NFLPlusReplayIE._real_extract.<locals>.entriesb  s@     &'#fg C ))&*ABBCs   .1)_match_valid_urlgroup_configuration_arglist_REPLAY_TYPESkeysr   rr   ri   r[   r]   r   r   )	r^   r   r   video_idrQ   game_idr   r  r   s	   `      @@r/   r   zNFLPlusReplayIE._real_extractK  sW   ..s399&$Gh11&5'BO#"4#5#5#:#:#<=O&t'9'9D/;RS  "&'$++(?@G))HOQU%.?-HRY * [[_aG ))?Ga)7 * <G ?#q('Lo2_hmo &&x00	C ##GIt44r1   N)	r   r   r   r   r   r   r  r   r   r   r1   r/   r   r   
  s    #G\JU;p%#,-e0
 #F+" (M1
	 (M1
	 (M(E%#,-#$0
 $.:J9K0LM
!=2Fj !2*	M!5r1   r   c                   P    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 Zd Zy)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1576832rz   zConference Championshipsz$md5:944f7fab56f7a37430bf8473f5473857r   20230127i((ci  Analysisz6Cincinnati Bengals at Kansas City Chiefs (2022-POST-3)r   r   r   r   r   c                 $    | j                          y r3   r   r   s    r/   r   z!NFLPlusEpisodeIE._real_initialize  r   r1   c                     | j                  |      }| j                          | j                  d| |dd| j                   i      d   }| j	                  |      S )Nz/https://api.nfl.com/content/v1/videos/episodes/ru   rt   )rQ   r   )r   rr   r[   ri   r   )r^   r   r   r
  s       r/   r   zNFLPlusEpisodeIE._real_extract  sp    ~~c"&&=dVDd74;;-!8U '   
 ""8,,r1   N)r   r   r   r   r   r   r   r   r   r1   r/   r  r  k  s]    $GLJ']/A%#%,MN0
 #F+! F&!-r1   r  )r   rD   r   rl   r   anvator   commonr   utilsr   r   r	   r
   r   r   r   r   utils.traversalr   r   r   r   r   r  r   r1   r/   <module>r     su      	    !	 	 	 +o od$LI $LNB9 B6^5i ^5B!-y !-r1   