
    V|hu                     r    S SK r S SKrS SKrSSKJr  SSKJr  SSKJ	r	J
r
JrJrJrJrJrJr   " S S\5      rg)	    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_noneparse_age_limitparse_durationtraverse_objtry_getunified_timestampurl_or_nonec                       \ rS rSrSrSSSSSSS	S
SSSSSSS.SS0S.SSS.SSS.SSS./rSrSrSrSr	\
" \R                  " 5       5      rS S jrS rS rSrg)!FOXIE   zKhttps?://(?:www\.)?fox(?:sports)?\.com/(?:watch|replay)/(?P<id>[\da-fA-F]+)z;https://www.fox.com/watch/4b765a60490325103ea69888fb2bd4e8/ ebd296fcc41dd4b19f8115d8461a3165 4b765a60490325103ea69888fb2bd4e8mp4z4Aftermath: Bruce Wayne Develops Into The Dark Knightz$md5:549cd9c70d413adb32ce2a779b53b486f   i5Y20170901FOXGotham   zre:^https?://.*\.jpg$)idexttitledescriptionduration	timestampupload_datecreatorseries	age_limitepisode	thumbnailskip_downloadT)urlmd5	info_dictparamsz;https://www.fox.com/watch/087036ca7f33c8eb79b08152b4dd75c1/)r'   only_matchingz;https://www.fox.com/watch/b057484dade738d1f373b3e46216fa2c/zAhttps://www.foxsports.com/replay/561f3e071347a24e5e877abc56b22e89Fzhttps://www.fox.com/ 6E9S4bmcoNnZwVLOHywOv8PJEdu76cM9Nc                 h   SU R                   0nU R                  (       a  SU R                  -   US'    U R                  SU-   X#US9$ ! [         a  n[	        UR
                  [        5      (       a  UR
                  R                  S:X  a  U R                  UR
                  R                  R                  5       R                  5       U5      S   nU H"  nUR                  S5      S	:X  d  M  [        S
SS9e   SR                  U Vs/ s H  oUS   PM	     Os  snf sn5      n[        USS9ee S nAff = f)Nz	X-Api-KeyzBearer Authorizationzhttps://api3.fox.com/v2.0/)dataheaders  entitlementIssues	errorCodei  zdThis video is only available via cable service provider subscription. You may want to use --cookies.Texpectedz, message)_API_KEY_access_token_download_jsonr   
isinstancecauser   status_parse_jsonresponsereaddecodegetjoin)selfpathvideo_idr/   r0   eentitlement_issuesmessagess           N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/fox.py	_call_apiFOXIE._call_api=   s1   
 '043E3E'EGO$	&&,t3W ' 6 6  	!''9--!''..C2G%)%5%5GG$$))+224h&@@S&U"+Auu[)T1,KUY[ [ ,
  99<N%O<Nq	l<N%OP$X==	s*   A 
D1BD,+D,D
D,,D1c                    U R                   (       d  U R                  U R                  5      R                  S5      nU(       aU  U R	                  [
        R                  R                  UR                  5      S SS9=(       d    0 R                  S5      U l         U R                   (       dJ  U R                  SS [        R                  " SU R                  05      R                  5       5      S   U l         g g g )Nz	mvpd-authF)fatalaccessTokenlogindeviceId)r8   _get_cookies_HOME_PAGE_URLrA   r=   urllibparseunquotevaluerJ   jsondumps
_device_idencode)rC   	mvpd_auths     rI   _real_initializeFOXIE._real_initializeT   s    !!))$*=*=>BB;OI&*&6&6v||7K7KOO8%&*% '7 '9 '?<>M@R "%%%)^^T4::"DOO/ $vx&! "/&0" & "    c                    U R                  U5      nU R                  SU R                   S3U5      S   U l        U R                  SU[        R
                  " SS/SSS	S
SSU R                  0SS0SSS.S.SSS0SSUS.5      R                  5       S9nUS   nUS   n U R                  XR5      S   nU R'                  XbS S!S"S#9n	[)        US$ [*        5      =(       d    0 n
[-        UR#                  S%5      5      =(       d;    [-        UR#                  S&5      5      =(       d    [/        UR#                  S&5      5      n[1        UR#                  S'5      5      nU
R#                  S(5      =(       d)    U
R#                  S)5      =(       d    UR#                  S)5      nUR#                  S*5      =(       d)    U
R#                  S*5      =(       d    U
R#                  S+5      n0 nUR#                  S,/ 5       H;  nUR#                  S5      nU(       a  UR#                  S-5      S.:w  a  M2  US/S0./US1'     O   UUU	UR#                  S5      UU[3        UR#                  S25      5      UU[-        UR#                  S35      5      UR#                  S5      [-        UR#                  S45      5      [5        US5[6        S69[-        UR#                  S75      5      US8.$ ! [         a  n[        UR                  [        5      (       a  UR                  R                  S:X  at  U R                  UR                  R                  R                  5       R!                  5       U5      nUR#                  S5      S:X  a  U R%                  S/S9  [        US   SS9ee S nAff = f)9Nzpreviewpassmvpd?device_id=z&mvpd_id=TempPass_fbcfox_60minrN   watchzdrm/widevinezfsdk/yoi   i  720pmacos didrays)kuidseg)	freewheelvdmsdmpusz1---vod)capabilitiesdeviceWidthdeviceHeightmaxResososvproviderplaylistprivacysiteSection
streamTypestreamId)r/   namer'   playURLr1   	exceptionGeoLocationBlockedUS)	countriesr   Tr4   r   m3u8_nativehls)entry_protocolm3u8_idc                     U S   S   $ )NtrackingData
properties )xs    rI   <lambda>%FOXIE._real_extract.<locals>.<lambda>   s    Q~.|<r^   durationInSecondsr   datePublishedbrandnetwork
seriesNameshowdocumentReleasesformatSCCscc)r'   r   encontentRatingseasonNumberepisodeNumber)imagesstillraw)expected_typereleaseYear)r   r   formatsr   r   r   r#   r!   r"   season_numberr$   episode_numberr%   release_year	subtitles)	_match_idrJ   rY   r8   rW   rX   rZ   r9   r   r:   r;   r   r<   r=   r>   r?   r@   rA   raise_geo_restricted_extract_m3u8_formatsr   dictr   r
   r   r	   r   r   )rC   r'   rE   videor   release_urlm3u8_urlrF   errorr   r/   r   r   r!   r"   r   doc_relrel_urls                     rI   _real_extractFOXIE._real_extract`   sn   >>#&!^^((99WX#% wtzz+Y7#T__5 "2.
 f~ !C" 8#  $*68!  -$ fEl	**;A)LH ,,(% - 9 <dD JGI 	 uyy)<=> L+IIj!C# L&4UYYz5J&K 	%eii&@A	((7#Rtxx	':Reii	>R<( .DHH- .!XXf- 	 	yy!3R8Gkk%(G'++h/58  IdO  9  99]3 "(?)CD(>)BCyy()%))O*DE%e-GWbc'		-(@A"
 	
A  	!''9--!''..C2G(()9)9)>)>)@)G)G)I8T99[)-AA---?$U=%9DII	s   K 
NB.M??N)r8   )N)__name__
__module____qualname____firstlineno__
_VALID_URL_TESTS_GEO_BYPASSrR   r7   r8   struuiduuid4rY   rJ   r\   r   __static_attributes__r   r^   rI   r   r      s    _J M14KA#%M1
 T
%. M M S;!FD K+N1HMTZZ\"J.
0N
r^   r   )rW   urllib.parserS   r   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   r^   rI   <module>r      s1       ! -	 	 	[
M [
r^   