o
    iu                     @   sl   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 deZdS )	    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_noneparse_age_limitparse_durationtraverse_objtry_getunified_timestampurl_or_nonec                   @   s   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
 Zd!ddZdd Zdd  ZdS )"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              
   C   s   d| j i}| jrd| j |d< z| jd| |||dW S  tyd } z=t|jtr_|jjdkr_| |jj	
  |d }|D ]}|dd	krNtd
ddq?ddd |D }t|dd d }~w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, c                 S   s   g | ]}|d  qS )message ).0er3   r3   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/fox.py
<listcomp>P   s    z#FOXIE._call_api.<locals>.<listcomp>)_API_KEY_access_token_download_jsonr   
isinstancecauser   status_parse_jsonresponsereaddecodegetjoin)selfpathvideo_idr+   r,   r5   entitlement_issuesmessagesr3   r3   r6   	_call_api=   s8   zFOXIE._call_apic                 C   sx   | j s8| | jd}|r!| jtj|jd ddpi d| _ | j s:| 	dd t
d| ji d | _ d S d S d S )Nz	mvpd-authF)fatalaccessTokenlogindeviceId)r9   _get_cookies_HOME_PAGE_URLrB   r>   urllibparseunquotevaluerI   jsondumps
_device_idencode)rD   	mvpd_authr3   r3   r6   _real_initializeT   s*   

zFOXIE._real_initializec                 C   sX  |  |}| d| j d|d | _| jd|t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 d}|d }|d }z
| ||d }W n; ty } z/t	|j
tr|j
jdkr| |j
j  |}|ddkr}| jdgd t|d dd d }~ww | j||d d!d"d#}	t|d$d% tpi }
t|d&pt|d'pt|d'}t|d(}|
d)p|
d*p|d*}|d+p|
d+p|
d,}i }|d-g D ]}|d}|r|d.d/krq|d0d1g|d2<  |||	|d||t|d3||t|d4|dt|d5t|d6td7t|d8|d9S ):Nzpreviewpassmvpd?device_id=z&mvpd_id=TempPass_fbcfox_60minrK   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$   playURLr-   	exceptionGeoLocationBlockedUS)	countriesr   Tr0   r   m3u8_nativehls)entry_protocolm3u8_idc                 S   s   | d d S )NtrackingData
propertiesr3   )xr3   r3   r6   <lambda>   s    z%FOXIE._real_extract.<locals>.<lambda>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   rV   r9   rT   rU   rW   r:   r   r;   r<   r   r=   r>   r?   r@   rA   rB   raise_geo_restricted_extract_m3u8_formatsr   dictr   r	   r   r   r
   r   )rD   r$   rF   videor   release_urlm3u8_urlr5   errorr   r+   r   r   r   r   r   doc_relrel_urlr3   r3   r6   _real_extract`   s   


zFOXIE._real_extract)N)__name__
__module____qualname__
_VALID_URL_TESTS_GEO_BYPASSrO   r8   r9   struuiduuid4rV   rI   rY   r   r3   r3   r3   r6   r      sL    "
r   )rT   urllib.parserP   r   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r3   r3   r3   r6   <module>   s    (