
    V|ha                     F    S SK rSSKJr  SSKJrJrJrJr   " S S\5      r	g)    N   )InfoExtractor   )ExtractorErrorrandom_uuidv4unified_timestampurlencode_postdatac            	           \ rS rSrSrSSSSSSS	S
S.SS0SS.SSSSSSS.SS0SS./rSrSu  rrSr	Sr
SrSSSS.rS  rS! rS" rS# rS$ rS%rg&)'
TennisTVIE   z:https?://(?:www\.)?tennistv\.com/videos/(?P<id>[-a-z0-9]+)z@https://www.tennistv.com/videos/indian-wells-2018-verdasco-fritzz indian-wells-2018-verdasco-fritzmp4z Fernando Verdasco v Taylor Fritzz%re:^After his stunning victory.{174}$zKhttps://atp-prod.akamaized.net/api/images/v1/images/112831/landscape/1242/0i%Z20180314)idexttitledescription	thumbnail	timestampupload_dateskip_downloadTz3Requires email and password of a subscribed account)url	info_dictparamsskipzChttps://www.tennistv.com/videos/2650480/best-matches-of-2022-part-52650480zBest Matches of 2022 - Part 5z$md5:36dec3bfae7ed74bd79e48045b17264czrhttps://open.http.mp.streamamg.com/p/3001482/sp/300148200/thumbnail/entry_id/0_myef18pd/version/100001/height/1920)r   r   r   r   r   m3u8tennistv)NNi- zhttps://open.http.mp.streamamg.com/p/{partner}/sp/{partner}00/playManifest/entryId/{entry}/format/applehttp/protocol/https/a.m3u8?ks={session}zEhttps://sso.tennistv.com/auth/realms/TennisTV/protocol/openid-connectzhttps://www.tennistv.comhttps://www.tennistv.com/z!application/x-www-form-urlencoded)originrefererzcontent-Typec                    U R                  U R                   S3S SSSSSSS.S	9nU R                  S
US5      nU R                  US SSU R                  [	        UUSS.5      S9nSU;   a
  [        SSS9eU R                  U R                   S3S SU R                  SS[        5       SSS[        5       SS.S9nU R                  S [        R                  R                  UR                  5      S   S   SSSS.5        g )Nz/authzDownloading login pagetennis-tv-webzhttps://tennistv.comfragmentcodeopenid)	client_idredirect_uriresponse_moderesponse_typescope)queryz3action=["\']([^"\']+?)["\']\s+method=["\']post["\']zlogin POST urlzSending login datazUnable to send login datazLog In)usernamepasswordsubmitActionheadersdataz'Your username or password was incorrectTexpectedz
Logging inzEhttps://www.tennistv.com/resources/v1.1.10/html/silent-check-sso.htmlnone)r&   r'   stater(   r)   r*   nonceprompt)r0   r+   authorization_code)r$   
grant_typer&   r'   )_download_webpage_AUTH_BASE_URL_html_search_regex_HEADERSr	   r   _request_webpager   	get_tokenurllibparseparse_qsr   )selfr,   r-   
login_pagepost_url	temp_pagehandles          S/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/tennistv.py_perform_loginTennisTVIE._perform_login5   sB   ++""#5)41I, 6!+!'! , 
 **+acmo  A**d02MMM(:$$ (< ) + 	 5	A !JUYZZ&&""#5)4t}}, g&!+!'!& 	 '  	tLL))&**5f=bA.(c	
 	    c           
         U R                  U R                   S3USSU R                  [        U5      S9nUR	                  S5      =(       d    U R
                  U l        UR	                  S5      =(       d    U R                  U l        g )Nz/tokenzFetching tokenszUnable to fetch tokensr/   access_tokenrefresh_token)_download_jsonr<   r>   r	   getrN   rO   )rD   video_idpayloadress       rI   r@   TennisTVIE.get_token_   sz    !!""#6*H6G$dmmBTU\B] " _  GGN3Ht7H7H WW_5K9K9KrL   c                 6   U R                   (       a  U R                  (       a  g U R                  S5      nUR                  S5      (       a  UR                  S5      (       d  U R	                  5         US   R
                  US   R
                  sU l         U l        g )Nr   rN   rO   )rN   rO   _get_cookiesrQ   raise_login_requiredvalue)rD   cookiess     rI   _real_initializeTennisTVIE._real_initializeg   sy    !3!3##$?@{{>**'++o2N2N%%'070G0M0MwWfOgOmOm-4-rL   c                 \    U R                  SU R                   SU 3USSU R                  S9$ )NzOhttps://atppayments.streamamg.com/api/v1/session/ksession/?lang=en&apijwttoken=z	&entryId=zDownloading ksession tokenz!Failed to download ksession token)r0   )rP   rN   r>   )rD   rR   entryids      rI   _download_session_json!TennisTVIE._download_session_jsonp   sT    ""]^b^o^o]ppy  {B  zC  D24Waeanan # p 	prL   c                    U R                  U5      nU R                  X5      nU R                  SUS5      nU R                  X$5      nUR	                  S5      nUcM  U R                  USU R                  SS.5        U R                  X$5      R	                  S5      nUc
  [        SSS	9eUR	                  S
5      (       a  U R                  US
   5        U R                  U R                  R                  U R                  XFS9U5      u  pxUU R                  SU5      U R                  S/U R                  S5      Q7USSS9SU R                   SU R                   SU S3[!        U R                  SUSSS95      U R                  SUSSS9=(       d    S U R                  SUSSS9=(       d    S U R                  SUSSS9=(       d    S UUS.
$ )Nzdata-entry-id=["\']([^"\']+)entryIDKSessionrO   r"   )r:   rO   r&   z0Failed to get KSession, possibly a premium videoTr2   ErrorMessage)partnerentrysession z9<span itemprop="description" content=["\']([^"\']+)["\']>r   F)fatalz%https://open.http.mp.streamamg.com/p/z/sp/z00/thumbnail/entry_id/z/version/100001/height/1920z8<span itemprop="uploadDate" content=["\']([^"\']+)["\']>zupload timezdata-series\s*?=\s*?"(.*?)"seriesz$data-tournament-city\s*?=\s*?"(.*?)"seasonzdata-round\s*?=\s*?"(.*?)"round)
r   r   r   r   r   rj   rk   episodeformats	subtitles)	_match_idr;   _search_regexr_   rQ   r@   rO   r   report_warning#_extract_m3u8_formats_and_subtitles_FORMAT_URLformat_PARTNER_ID_generic_titler=   _og_regexesr   )	rD   r   rR   webpager^   session_json	k_sessionrn   ro   s	            rI   _real_extractTennisTVIE._real_extractu   s'   >>#&((7$$%DgyY228E $$Z0	NN8-!%!3!3,& 
 33HFJJ:VI $%WbfggN++^ <=!EE##D,<,<G#_aik ((W522MpPTP`P`anPope 3 5 AAQAQ@RRVW[WgWgVhh~  @G  H  Hc  d*4+B+BKWVckp ,C ,r s--.LgW_gl-muqu--.UW^`hpu-v~z~../LgW^fk.ltpt"
 	
rL   )rN   rO   N)__name__
__module____qualname____firstlineno__
_VALID_URL_TESTS_NETRC_MACHINErN   rO   rv   rt   r<   r>   rJ   r@   r[   r_   r|   __static_attributes__ rL   rI   r   r      s    NJQ47Bf#%
 T
 F  U4A N
 #F+EF6  N",L-K cK\N,.;H(TLnp
&
rL   r   )
urllib.parserA   commonr   utilsr   r   r   r	   r   r   rL   rI   <module>r      s#     ! O
 O
rL   