
    uki$                         d dl Z 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 ddlmZ  G d d	e      Z G d
 de      Z G d de      Zy)    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptyurl_or_none)traverse_objc                   H    e Zd ZdZdZdZdZdZdZdZ	d Z
d	 Zd
 Zddi fdZy)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                   ry t        j                  d|      }|rt        j                  d|      st        | j                  d      |j                  d      x}r|| _        | j                  d| j                   d       || _         y )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        V/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/dangalplay.py_perform_loginzDangalPlayBaseIE._perform_login   s    ||>I2<<A !1!1DAAZZ))6)!DL4T\\N!DE$    c                 ^    | j                   s!| j                  d| j                   d        y y )NzLogin required. method)r   raise_login_requiredr   )r   s    r!   _real_initializez!DangalPlayBaseIE._real_initialize%   s3      %%(89I9I8J&KTX%Y !r#   c                    |t        | j                  d|dd             t        | j                  d|dd            |dt        |dt        hfd	t        hfd
t        hfdt        ht        fdt        hfdt         hfdt         hfd      S )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)idr2   episoder/   	series_idr5   release_timestamp)r   _search_regexr   strfilter)r   metadataepisode_slugseries_slugs       r!   _extract_episode_infoz&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           
          | j                  | j                   d| |||ddi| j                  | j                  d|      S )N/Acceptapplication/json)
auth_tokenr   )fatalheadersquery)_download_json	_API_BASE_AUTH_TOKENr   )r   pathr,   noterG   rI   s         r!   	_call_apizDangalPlayBaseIE._call_api<   s[    ""~~av&
D12"..,,; ; #  	r#   )__name__
__module____qualname___NETRC_MACHINEr   r   r   rK   rL   _SECRET_KEYr"   r(   rA   rO    r#   r!   r   r      sM    !NGL	+  0I(K(K	%Z
& 0KRV^` r#   r   c                   l    e Zd ZdZdZddddddd	d
ddddddddddddddddddddddddgZd Zd Zy)DangalPlayIEr   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)r7   extr:   r-   r8   r/   r.   r2   release_dater5   seasonr,   r9   )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)r7   r\   r8   r:   r-   r^   r2   r5   r]   r.   r/   r9   r,   c                    |d   }|d   }t        t        t        j                                     }dj                  ||| j                  || j
                  f      }t        j                  ||d| j                  | j                  | j                  t        j                  |j                               j                         |dd      j                         S )Nr4   r0    )r4   r0   categoryr   rF   r7   md5ts),:)
separators)r<   inttimejoinr   rT   jsondumpsr   rL   hashlibrf   encode	hexdigest)r   datar4   r0   	timestampunhasheds         r!   _generate_api_datazDangalPlayIE._generate_api_datam   s    ,'
,'
DIIK()	77J
D4E4EyRVRbRbcdzz$$ll**##;;x01;;=	
 !	" #)&(		+r#   c           	         | j                  |      j                  dd      \  }}| j                  d| d| d|ddi      d	   }	 | j                  | j                   d
|dddd| j                  |            d	   }t        |dt,        ht.        f      }	| j1                  |	|d      \  }
}|
|d| j3                  |||      S # t        $ r}t        |j                  t              r|j                  j                  dk(  rt        |j                  j                  j                         j                         t        j                   hdt"        hf      xs i }|j%                  d      }|dk(  r!| j'                  d| j(                   d        n%|dk(  r | j'                  d| j(                   d        t        t+        ||j%                  d      d             d }~ww xY w)Nr/   r7   zcatalogs/shows/z
/episodes/.gzipitem_languagerd   rI   rs   z/v2/users/get_all_details.gzipz!Downloading playback details JSONrE   )rD   zContent-Type)rH   rs   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_urlrY   )formats	subtitles)_match_valid_urlr   rO   rJ   rK   rv   r   
isinstancecauser   statusr   responsereaddecodern   loadsdictgetr'   r   r	   r
   any#_extract_m3u8_formats_and_subtitlesrA   )r   r_   r@   r?   r>   detailse
error_info
error_codem3u8_urlr   r   s               r!   _real_extractz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EhP\^cd "
 ((<M
 	
#  	!''9-!''..C2G)!''*:*:*?*?*A*H*H*Jdjj\[beidjLklrpr
'^^F3
'--@AQAQ@RS\` . b6)--I$JZJZI[\ei . k$]:z~~i?X`d%eff	s   8C 
G DGG N)rP   rQ   rR   IE_NAME
_VALID_URL_TESTSrv   r   rU   r#   r!   rW   rW   F   s    GwJx,!+<4:& E3
$ k,5!+ 3&-3>
#"FH+""
r#   rW   c                   N    e Zd ZdZdZddddiddd	dd
idddddidgZd Zd Zy)DangalPlaySeasonIEzdangalplay:seasonzehttps?://(?:www\.)?dangalplay.com/shows/(?P<id>[^/?#]+)(?:/(?P<sub>ep-[^/?#]+)/episodes)?/?(?:$|[?#])z=https://www.dangalplay.com/shows/kitani-mohabbat-hai-season-1   r7   zkitani-mohabbat-hai-season-1)r_   playlist_mincountr`   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)r_   playlist_countr`   z6https://www.dangalplay.com/shows/milke-bhi-hum-na-mile   zmilke-bhi-hum-na-milec              #      K   |D ]p  }| j                  d| d| d|d| dddd	      }t        |d
dd f      D ]8  }|d   } | j                  d| d| t        fi | j	                  |||       : r y w)Ncatalogs/shows/items/z/subcategories/z/episodes.gzipzDownloading episodes JSON for Fasc	published)order_byr   )rG   rI   rs   itemsc                     |d   S )Nfriendly_idrU   )_vs     r!   <lambda>z-DangalPlaySeasonIE._entries.<locals>.<lambda>   s    -HX r#   r   z!https://www.dangalplay.com/shows/rC   )rO   r   
url_resultrW   rA   )r   subcategoriesr@   subcategoryrs   epr?   s          r!   _entrieszDangalPlaySeasonIE._entries   s     ( 	_K>>'}OK=P^_=k]KSX %)a " D #4&';X)YZ _!-0%doo7}Al^T _$($>$>r<Q\$]_ __	_s   A7A9c           	      
   | j                  |      j                  dd      \  }}|r|gn.t        | j                  d| d|dddi      d	d
ddt        hf      }| j                  | j                  ||      t        ||            S )Nr7   subr   rx   zDownloading season info JSONry   rd   rz   rs   r   .r   )r   r   r   rO   r<   playlist_resultr   r	   )r   r_   r@   r   r   s        r!   r   z DangalPlaySeasonIE._real_extract   s    #'#8#8#=#C#CD%#P [)4,NN'}E:K.6K  M _c=3%@	;B ##MM-5}[R]7^` 	`r#   N)rP   rQ   rR   r   r   r   r   r   rU   r#   r!   r   r      sg    !GyJN 0
 c;
 H)
	F*_	`r#   r   )rp   rn   r   rl   commonr   networking.exceptionsr   utilsr   r   r	   r
   utils.traversalr   r   rW   r   rU   r#   r!   <module>r      sL      	  ! - K K *7} 7tZ
# Z
z/`) /`r#   