
    V|h$                         S SK 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  SSKJr   " S S	\5      r " S
 S\5      r " S S\5      rg)    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptyurl_or_none)traverse_objc                   R    \ rS rSrSrSrSrSrSrSr	Sr
S	 rS
 rS rSS0 4S jrSrg)DangalPlayBaseIE   
dangalplayINNa5  Pass credentials as -u "token" -p "USER_ID" (where USER_ID is the value of "otv_user_id" in your browser local storage). Your login region can be optionally suffixed to the username as @REGION (where REGION is the two-letter "region" code found in your browser local storage), e.g.: -u "token@IN" -p "USER_ID"zhttps://ottapi.dangalplay.comjqeGWxRKK7FK5zEk3xCMf53d31a4377e4ef31fa0c                 J   U R                   (       a  g [        R                  " SU5      nU(       a  [        R                  " SU5      (       d  [        U R                  SS9eUR                  S5      =n(       a  X@l        U R                  SU R                   S35        X l         g )Nztoken(?:@(?P<region>[A-Z]{2}))?z[\da-f]{32}T)expectedregionzSetting login region to "")_OTV_USER_IDre	fullmatchr   _LOGIN_HINTgroup_REGIONwrite_debug)selfusernamepasswordmobjr   s        U/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/dangalplay.py_perform_loginDangalPlayBaseIE._perform_login   s    ||>I2<<AA !1!1DAAZZ))6)!L4T\\N!DE$    c                 b    U R                   (       d  U R                  SU R                   3S S9  g g )NzLogin required. method)r   raise_login_requiredr   )r   s    r"   _real_initialize!DangalPlayBaseIE._real_initialize%   s3      %%(89I9I8J&KTX%Y !r%   c                    U[        U R                  SUSS S95      [        U R                  SUSSS95      US.[        US[        14S	[        14S
[        14S[        1[        4S[        14S[         14S[         14S.5      E$ )Nzep-(?:number-)?(\d+)zepisode number)defaultzseason-(\d+)zseason number1)
display_idepisode_numberseason_numberseries
content_iddisplay_titletitle	show_name
catalog_iddurationrelease_date_uts)idr5   episoder2   	series_idr8   release_timestamp)r   _search_regexr   strfilter)r   metadataepisode_slugseries_slugs       r"   _extract_episode_info&DangalPlayBaseIE._extract_episode_info)   s    &)$*<*<'7GQU += +W X(););os *< *L M!
 8#cU+)C51#cU+&v6*SE2'+7&8;-%H& 
 	
r%   zDownloading JSON metadataTc           
      |    U R                  U R                   SU 3X#USS0U R                  U R                  S.UES9$ )N/Acceptapplication/json)
auth_tokenr   )fatalheadersquery)_download_json	_API_BASE_AUTH_TOKENr   )r   pathr/   noterK   rM   s         r"   	_call_apiDangalPlayBaseIE._call_api<   sY    ""~~av&
12"..,,; ; #  	r%   )r   r   )__name__
__module____qualname____firstlineno___NETRC_MACHINEr   r   r   rO   rP   _SECRET_KEYr#   r*   rD   rS   __static_attributes__ r%   r"   r   r      sM    !NGL	+  0I(K(K	%Z
& 0KRV^` r%   r   c                   t    \ rS rSrSrSrSSSSSS	S
SS	SSSSSS.S.SSSSSSSSSSSSSSS.S./rS rS rSr	g )!DangalPlayIEF   r   zchttps?://(?:www\.)?dangalplay.com/shows/(?P<series>[^/?#]+)/(?P<id>(?!episodes)[^/?#]+)/?(?:$|[?#])zghttps://www.dangalplay.com/shows/kitani-mohabbat-hai-season-2/kitani-mohabbat-hai-season-2-ep-number-01647c61dc1e7171310dcd49b4mp4i ;=Kr   z#EP 1 | KITANI MOHABBAT HAI SEASON 2zkitani-mohabbat-hai-season-2r   20100101i	  zSeason 2z)kitani-mohabbat-hai-season-2-ep-number-01645c9ea41e717158ca574966)r:   extr=   r0   r;   r2   r1   r5   release_dater8   seasonr/   r<   )url	info_dictzYhttps://www.dangalplay.com/shows/milke-bhi-hum-na-mile/milke-bhi-hum-na-mile-ep-number-0165d31d9ba73b9c3abd14a7f3zEP 1 | MILKE BHI HUM NA MILEi3ezSeason 1ia 20240219zMILKE BHI HUM NA MILEz"milke-bhi-hum-na-mile-ep-number-01)r:   rd   r;   r=   r0   rf   r5   r8   re   r1   r2   r<   r/   c                    US   nUS   n[        [        [        R                  " 5       5      5      nSR                  X#U R                  X@R
                  45      n[        R                  " UUSU R                  U R                  U R                  [        R                  " UR                  5       5      R                  5       US.SS9R                  5       $ )Nr7   r3    )r7   r3   categoryr   rJ   r:   md5ts),:)
separators)r?   inttimejoinr   rZ   jsondumpsr   rP   hashlibrn   encode	hexdigest)r   datar7   r3   	timestampunhasheds         r"   _generate_api_dataDangalPlayIE._generate_api_datam   s    ,'
,'
DIIK()	77JD4E4EyRbRbcdzz$$ll**##;;x01;;=	
 !	" #)&(		+r%   c           	         U R                  U5      R                  SS5      u  p#U R                  SU SU S3USS0S9S	   n U R                  U R                   S
3USSSS.U R                  U5      S9S	   n[        US[,        1[.        45      n	U R1                  XS5      u  pU
US.U R3                  XCU5      E$ ! [         Ga  n[        UR                  [        5      (       a  UR                  R                  S:X  a  [        UR                  R                  R                  5       R                  5       [        R                   1S["        145      =(       d    0 nUR%                  S5      nUS:X  a  U R'                  SU R(                   3S S9  O#US:X  a  U R'                  SU R(                   3S S9  [        [+        XR%                  S5      SS95      ee S nAff = f)Nr2   r:   zcatalogs/shows/z
/episodes/.gzipitem_languagerl   rM   r{   z/v2/users/get_all_details.gzipz!Downloading playback details JSONrI   )rH   zContent-Type)rL   r{   i  errorcode1016z&Your token has expired or is invalid. r'   4028z/Your login region is unspecified or incorrect. messagez: )delim)adaptive_url)adaptive_urlshdhls.playback_urlra   )formats	subtitles)_match_valid_urlr   rS   rN   rO   r~   r   
isinstancecauser   statusr   responsereaddecoderv   loadsdictgetr)   r   r	   r
   any#_extract_m3u8_formats_and_subtitlesrD   )r   rg   rC   rB   rA   detailse
error_info
error_codem3u8_urlr   r   s               r"   _real_extractDangalPlayIE._real_extract~   s   $($9$9#$>$D$DXt$T!>>k]*\N%H" 5 " 77=?	))>>""@A<30$6> //9 * ;
 <BCG&  QT_S`be*g h!EEh^cd "
 ((M
 	
#  	!''9--!''..C2G)!''*:*:*?*?*A*H*H*Jdjj\[beidjLklrpr
'^^F3
'--@AQAQ@RS\` . b6)--I$JZJZI[\ei . k$]:~~i?X`d%eff	s   5B: :GDGGr\   N)
rU   rV   rW   rX   IE_NAME
_VALID_URL_TESTSr~   r   r[   r\   r%   r"   r^   r^   F   s    GwJx,!+<4:& E3
$ k,5!+ 3&-3>
#"FH+""
r%   r^   c                   V    \ rS rSrSrSrSSSS0S.S	S
SS0S.SSSS0S./rS rS rSr	g)DangalPlaySeasonIE   zdangalplay:seasonzehttps?://(?:www\.)?dangalplay.com/shows/(?P<id>[^/?#]+)(?:/(?P<sub>ep-[^/?#]+)/episodes)?/?(?:$|[?#])z=https://www.dangalplay.com/shows/kitani-mohabbat-hai-season-1   r:   zkitani-mohabbat-hai-season-1)rg   playlist_mincountrh   zQhttps://www.dangalplay.com/shows/kitani-mohabbat-hai-season-1/ep-01-30-1/episodes   z'kitani-mohabbat-hai-season-1-ep-01-30-1)rg   playlist_countrh   z6https://www.dangalplay.com/shows/milke-bhi-hum-na-mile   zmilke-bhi-hum-na-milec              #      #    U Ho  nU R                  SU SU S3USU 3SSSS.S	9n[        US
SS 45       H8  nUS   nU R                  " SU SU 3[        40 U R	                  XVU5      D6v   M:     Mq     g 7f)Ncatalogs/shows/items/z/subcategories/z/episodes.gzipzDownloading episodes JSON for Fasc	published)order_byr   )rK   rM   r{   itemsc                     US   $ )Nfriendly_idr\   )_vs     r"   <lambda>-DangalPlaySeasonIE._entries.<locals>.<lambda>   s	    -HXr%   r   z!https://www.dangalplay.com/shows/rG   )rS   r   
url_resultr^   rD   )r   subcategoriesrC   subcategoryr{   eprB   s          r"   _entriesDangalPlaySeasonIE._entries   s     (K>>'}OK=P^_=k]KSX %)a " D #4&';X)YZ!-0oo7}Al^T _$($>$>rQ\$]_ _ [ )s   A7A9c           	         U R                  U5      R                  SS5      u  p#U(       a  U/O+[        U R                  SU S3USSS0S9S	S
SS[        145      nU R                  U R                  XB5      [        X#5      5      $ )Nr:   subr   r   zDownloading season info JSONr   rl   r   r{   r   .r   )r   r   r   rS   r?   playlist_resultr   r	   )r   rg   rC   r   r   s        r"   r    DangalPlaySeasonIE._real_extract   s    #'#8#8#=#C#CD%#P )4,NN'}E:K.6K  M _c=3%@	;B ##MM-5}[7^` 	`r%   r\   N)
rU   rV   rW   rX   r   r   r   r   r   r[   r\   r%   r"   r   r      sg    !GyJN 0
 c;
 H)
	F*_	`r%   r   )rx   rv   r   rt   commonr   networking.exceptionsr   utilsr   r   r	   r
   utils.traversalr   r   r^   r   r\   r%   r"   <module>r      sL      	  ! - K K *7} 7tZ
# Z
z/`) /`r%   