
    VGhu                     r    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  G d de      Zy)	    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_noneparse_age_limitparse_durationtraverse_objtry_getunified_timestampurl_or_nonec                       e Zd ZdZdddddddd	d
ddddddddiddddddddddgZdZdZdZdZ e	 e
j                               ZddZd Zd Zy)FOXIEzKhttps?://(?: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                 Z   d| j                   i}| j                  rd| j                  z   |d<   	 | j                  d|z   |||      S # t        $ r}t	        |j
                  t              r|j
                  j                  dk(  r| j                  |j
                  j                  j                         j                         |      d   }|D ]#  }|j                  d      d	k(  st        d
d       dj                  |D cg c]  }|d   	 nc c}w c}      }t        |d       d }~ww xY w)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.   r/   eentitlement_issuesmessagess           ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/fox.py	_call_apizFOXIE._call_api=   s6   
 '043E3E'EGO$	&&,t3tW ' 6 6  	!''9-!''..C2G%)%5%5GG$$))+224h&@@S&U"+ [Auu[)T1,KUY[ [[
  99<N%Oqa	l%O%OP$X==	s*   A 	D*BD%!D%>D

D%%D*c                    | j                   s| j                  | j                        j                  d      }|rS| j	                  t
        j                  j                  |j                        d d      xs i j                  d      | _         | j                   sI| j                  dd t        j                  d| j                  i      j                               d   | _         y y y )Nz	mvpd-authF)fatalaccessTokenlogindeviceId)r7   _get_cookies_HOME_PAGE_URLr@   r<   urllibparseunquotevaluerI   jsondumps
_device_idencode)rB   	mvpd_auths     rH   _real_initializezFOXIE._real_initializeT   s    !!))$*=*=>BB;OI&*&6&6v||7K7KOO8%&*% '7 '9 '?<>M@R "%%%)^^T4::"DOO/ $vx&! "/&0" & "    c                    | j                  |      }| j                  d| j                   d|      d   | _        | j                  d|t	        j
                  ddgddd	d
dd| j                  iddidddddddidd|d      j                               }|d   }|d   }	 | j                  ||      d   }| j'                  ||d d!d"#      }	t)        |d$ t*              xs i }
t-        |j#                  d%            xs6 t-        |j#                  d&            xs t/        |j#                  d&            }t1        |j#                  d'            }|
j#                  d(      xs$ |
j#                  d)      xs |j#                  d)      }|j#                  d*      xs$ |
j#                  d*      xs |
j#                  d+      }i }|j#                  d,g       D ]4  }|j#                  d      }|r|j#                  d-      d.k7  r+|d/d0g|d1<    n |||	|j#                  d      ||t3        |j#                  d2            ||t-        |j#                  d3            |j#                  d      t-        |j#                  d4            t5        |d5t6        6      t-        |j#                  d7            |d8S # t        $ r}t        |j                  t              r|j                  j                  dk(  ry| j                  |j                  j                  j                         j!                         |      }|j#                  d      dk(  r| j%                  dg       t        |d   d       d }~ww xY w)9Nzpreviewpassmvpd?device_id=z&mvpd_id=TempPass_fbcfox_60minrL   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&   playURLr0   	exceptionGeoLocationBlockedUS)	countriesr   Tr3   r   m3u8_nativehls)entry_protocolm3u8_idc                     | d   d   S )NtrackingData
properties )xs    rH   <lambda>z%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_idrI   rW   r7   rU   rV   rX   r8   r   r9   r:   r   r;   r<   r=   r>   r?   r@   raise_geo_restricted_extract_m3u8_formatsr   dictr   r
   r   r	   r   r   )rB   r&   rD   videor   release_urlm3u8_urlrE   errorr   r.   r   r   r    r!   r   doc_relrel_urls                     rH   _real_extractzFOXIE._real_extract`   st   >>#&!^^((99WX#% wtzz+Y7#T__5 "2.
 f~ !C" 8#  $*68!  -$ fEl	**;A)LH ,,h(% - 9 <dD JGI 	 uyy)<=> L+IIj!C# L&4UYYz5J&K 	%eii&@A	((7#Rtxx	':Reii	>R<( .DHH- .!XXf- 	 	yy!3R8 	Gkk%(G'++h/58  IdO 	  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    J& &	M!/B-MM!)N)__name__
__module____qualname__
_VALID_URL_TESTS_GEO_BYPASSrP   r6   r7   struuiduuid4rW   rI   rZ   r   r   r[   rH   r   r      s    _J M14KA#%M1
 T
%. M M S;!FD K+N1HMZTZZ\"J.
0N
r[   r   )rU   urllib.parserQ   r   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   r   r   r   r[   rH   <module>r      s1       ! -	 	 	[
M [
r[   