a
    h$                     @   s   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	 d	eZG d
d deZG dd deZdS )    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptyurl_or_none)traverse_objc                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
d
d Zdd Zddi fddZdS )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.comZjqeGWxRKK7FK5zEk3xCMZf53d31a4377e4ef31fa0c                 C   sf   | j r
d S td|}|r&td|s4t| jdd|d }rH|| _| d| j d || _ d S )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_REGIONZwrite_debug)selfusernamepasswordZmobjr    r   P/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/dangalplay.py_perform_login   s    zDangalPlayBaseIE._perform_loginc                 C   s    | j s| jd| j d d d S )NzLogin required. method)r   raise_login_requiredr   )r   r   r   r   _real_initialize%   s    z!DangalPlayBaseIE._real_initializec                 C   sx   |t | jd|dd dt | jd|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_idZdisplay_titletitleZ	show_name
catalog_iddurationZrelease_date_uts)idr(   episoder&   	series_idr*   release_timestamp)r   Z_search_regexr
   strfilter)r   metadataepisode_slugseries_slugr   r   r   _extract_episode_info)   s&    
z&DangalPlayBaseIE._extract_episode_infozDownloading JSON metadataTc              	   C   s4   | j | j d| |||ddi| j| jd|dS )N/Acceptapplication/json)
auth_tokenr   )fatalheadersquery)_download_json	_API_BASE_AUTH_TOKENr   )r   pathr#   Znoter9   r;   r   r   r   	_call_api<   s    zDangalPlayBaseIE._call_api)__name__
__module____qualname__Z_NETRC_MACHINEr   r   r   r=   r>   _SECRET_KEYr   r    r4   r@   r   r   r   r   r      s   r   c                   @   sp   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d Zdd Zd S )!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-01Z647c61dc1e7171310dcd49b4mp4i ;=Kr   z#EP 1 | KITANI MOHABBAT HAI SEASON 2zkitani-mohabbat-hai-season-2r   Z20100101i	  zSeason 2z)kitani-mohabbat-hai-season-2-ep-number-01Z645c9ea41e717158ca574966)r+   extr.   r$   r,   r&   r%   r(   release_dater*   seasonr#   r-   )url	info_dictzYhttps://www.dangalplay.com/shows/milke-bhi-hum-na-mile/milke-bhi-hum-na-mile-ep-number-01Z65d31d9ba73b9c3abd14a7f3zEP 1 | MILKE BHI HUM NA MILEi3ezSeason 1ia Z20240219zMILKE BHI HUM NA MILEz"milke-bhi-hum-na-mile-ep-number-01)r+   rG   r,   r.   r$   rI   r(   r*   rH   r%   r&   r-   r#   c                 C   sp   |d }|d }t tt }d||| j|| jf}tj||d| j| j	| jt
|  |ddd S )Nr)   r'    )r)   r'   categoryr   r8   r+   md5ts),:)
separators)r/   inttimejoinr   rD   jsondumpsr   r>   hashlibrN   encode	hexdigest)r   datar)   r'   	timestampZunhashedr   r   r   _generate_api_datam   s     	zDangalPlayIE._generate_api_datac              
   C   sv  |  |dd\}}| jd| d| d|ddidd	 }z0| j| j d
|dddd| |dd	 }W n ty8 } zt|jt	r"|jj
dkr"t|jj  tjhdthfpi }|d}|dkr| jd| j d d n |dkr
| jd| j d d tt||ddd W Y d }~n
d }~0 0 t|dthtf}	| |	|d\}
}|
|d| |||S )Nr&   r+   zcatalogs/shows/z
/episodes/.gzipitem_languagerL   r;   r[   z/v2/users/get_all_details.gzipz!Downloading playback details JSONr7   )r6   zContent-Type)r:   r[   i  errorcodeZ1016z&Your token has expired or is invalid. r   Z4028z/Your login region is unspecified or incorrect. messagez: )delim)Zadaptive_url)Zadaptive_urlsZhdZhls.Zplayback_urlrF   )formats	subtitles)_match_valid_urlr   r@   r<   r=   r]   r   
isinstancecauser   statusr
   responsereaddecoderV   loadsdictgetr   r   r   r	   anyZ#_extract_m3u8_formats_and_subtitlesr4   )r   rJ   r3   r2   r1   detailse
error_infoZ
error_codeZm3u8_urlre   rf   r   r   r   _real_extract~   sR    &

zDangalPlayIE._real_extractN)rA   rB   rC   IE_NAME
_VALID_URL_TESTSr]   ru   r   r   r   r   rE   F   sJ   $rE   c                   @   sR   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d Zdd ZdS )DangalPlaySeasonIEz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)rJ   Zplaylist_mincountrK   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)rJ   Zplaylist_countrK   z6https://www.dangalplay.com/shows/milke-bhi-hum-na-mile   zmilke-bhi-hum-na-milec              
   c   s   |D ]}| j d| d| d|d| ddddd	}t|d
ddd fD ]8}|d }| jd| d| tfi | |||V  qJqd S )Ncatalogs/shows/items/z/subcategories/z/episodes.gzipzDownloading episodes JSON for FZascZ	published)Zorder_byrj   )r9   r;   r[   itemsc                 S   s   |d S )Nfriendly_idr   )_vr   r   r   <lambda>       z-DangalPlaySeasonIE._entries.<locals>.<lambda>r   z!https://www.dangalplay.com/shows/r5   )r@   r
   Z
url_resultrE   r4   )r   subcategoriesr3   subcategoryr[   epr2   r   r   r   _entries   s     zDangalPlaySeasonIE._entriesc                 C   sj   |  |dd\}}|r |gn.t| jd| d|dddidd	d
ddthf}| | ||t||S )Nr+   subr}   r^   zDownloading season info JSONr_   rL   r`   r[   r   .r   )rg   r   r
   r@   r/   Zplaylist_resultr   r   )r   rJ   r3   r   r   r   r   r   ru      s    z DangalPlaySeasonIE._real_extractN)rA   rB   rC   rv   rw   rx   r   ru   r   r   r   r   ry      s(   ry   )rX   rV   r   rT   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   Zutils.traversalr
   r   rE   ry   r   r   r   r   <module>   s   :]