a
    h4K                     @   s   d dl Z d dlZd dlZ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mZmZmZmZmZmZ ddlmZmZ G dd	 d	e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OnDemandPagedListdetermine_extfilter_dictint_or_nonejoin_nonemptyjwt_decode_hs256parse_iso8601str_or_noneurl_or_none)requiretraverse_objc                   @   sp   e Zd ZdZdZdZdZdZdddd	Zd
ddd	Z	dd Z
dd ZdddZdddZedd Zdd ZdS )HotStarBaseIEZuserUPzhttps://www.hotstar.comzhttps://api.hotstar.comzhttps://apix.hotstar.com/v2s   KSuz7Hotstar;in.startv.hotstar/25.06.30.0.11580 (Android/12)zqplatform:android;app_id:in.startv.hotstar;app_version:25.06.30.0;os:Android;os_version:12;schema_version:0.0.1523Zandroid)z
user-agentzx-hs-clientzx-hs-platformz?Disney+;in.startv.hotstar.dplus.tv/23.08.14.4.2915 (Android/13)z{platform:androidtv;app_id:in.startv.hotstar.dplus.tv;app_version:23.08.14.4;os:Android;os_version:13;schema_version:0.0.970Z	androidtvc                 C   sN   t |ptt }t|| jdthdtjhddddtht	t
hfpDd}||kS )NvaluesubZsubscriptionsin.expiryr   )r
   inttimer   _TOKEN_NAMEr   jsonloadsr   allmax)selfcookiesZserver_timer    r    M/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/hotstar.py_has_active_subscription,   s    z&HotStarBaseIE._has_active_subscriptionc                 O   s2   | j | j d| g|R i |ddddiS )Nz/o/v1/headersINZPCTV)zx-country-codezx-platform-code)_download_json_API_URL)r   pathargskwargsr    r    r!   _call_api_v13   s    zHotStarBaseIE._call_api_v1Nc           	      C   s   t |ptt }|d }d| d| d}|dt| j| tj	  7 }| j
| j d| ||ti | ||r|| jn| j|t|| jdft|dptt d	d
d}t|dthfstd|d S )Nip  zst=z~exp=z~acl=/*z~hmac=/r   )ZdeviceIdr   zapplication/json)Zhotstarauthzx-hs-usertokenzx-hs-device-idzcontent-type)queryr#   successzAPI call was unsuccessful)r
   r   r   hmacnew_AKAMAI_ENCRYPTION_KEYencodehashlibsha256	hexdigestr%   _API_URL_V2r	   r"   _SUB_HEADERS_FREE_HEADERSr   r   struuiduuid4dictr   )	r   r'   video_idr,   r   stexpauthresponser    r    r!   _call_api_impl8   s$    "
zHotStarBaseIE._call_api_implc                 C   s   | j | ||d| tjddgg dddgg ddd	gd
dgg dg dddgddgddgdddtjddgg ddddd||dS )Nzcontent_type=ZdashZhls)Zfmp4Zfmp4brtsZnon_ssaiZssai)stereodolby51ZatmosplainZwidevineh264h265)rF   rG   Zvp9)ZphonetvfullZhdZ4kZsdrhdr)package	containerZadsaudio_channel
encryptionvideo_codecZvideo_codec_non_secureladder
resolutionZtrue_resolutiondynamic_range),:)
separatorsZSW_SECURE_DECODEZSW_SECURE_CRYPTO)Z	HDCP_V2_2Z	HDCP_V2_1ZHDCP_V2ZHDCP_V1)Zwidevine_security_levelZhdcp_version)Z
content_idfiltersZclient_capabilitiesZdrm_parameters)r,   r   r=   )rA   r   dumps)r   r'   r<   content_typer   r=   r    r    r!   _call_api_v2K   s6    
zHotStarBaseIE._call_api_v2c                 C   s   t | dthf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thfd	thfd
thfdthfdththfdthfdthfdS )N	contentIdtitledescriptionduration)ZbroadcastDateZ	startDateyearZchannelNameZ	channelIdZshowNameZ
seasonNameZseasonNoZseasonIdZ	episodeNo)idr[   r\   r]   	timestamprelease_yearchannel
channel_idseriesseasonseason_number	season_idepisodeepisode_number)r   r8   r
   anyr   r   )
video_datar    r    r!   _parse_metadata_v1b   s     
z HotStarBaseIE._parse_metadata_v1c           	      c   s   | j ||d| d|d  di ||| j | jddd d }t|d	d
dd fD ].}| jtj|d |dtfi | |V  qVd S )NzDownloading z page r   z JSON)Ztaotas)Znoter,   bodyresults)ZassetsNitemsc                 S   s   |d S )NrZ   r    _vr    r    r!   <lambda>}       z+HotStarBaseIE._fetch_page.<locals>.<lambda>rZ   )root)r*   
_PAGE_SIZEr   
url_result	HotStarIE
_video_urlrl   )	r   r'   Zitem_idnamer,   rv   pagero   videor    r    r!   _fetch_pageu   s$    zHotStarBaseIE._fetch_page)NN)NN)__name__
__module____qualname__r   	_BASE_URLr&   r5   r0   r7   r6   r"   r*   rA   rY   staticmethodrl   r~   r    r    r    r!   r      s(   


r   c                   @   s|  e Zd ZdZdZdZdddddd	d
dddddiddd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$dd%d&d!d'd(dd)ddidd*d+dd,dd-d.d/d0dd1d2d,dd3d4d)ddidd5d6dd7d8d7d9d:d;d<ddidd=d>dd?d@dAdBdCd?dDdE	ddiddFdGdHdIdGdHdJdGdHg	ZdKZdLdMdNdNdNdOdOdPZdQdRdSdTdUZ	dVdWdXdYZ
dZd[dWd\Zeddd^d]d_d`daZdbdc Zd]S )ery   ZhotstarZ
JioHotstarz(?x)
        https?://(?:www\.)?hotstar\.com(?:/in)?/(?!in/)
        (?:
            (?P<type>movies|sports|clips|episode|(?P<tv>tv|shows))/
            (?(tv)(?:[^/?#]+/){2}|[^?#]*)
        )?
        [^/?#]+/
        (?P<id>\d{10})
    z=https://www.hotstar.com/can-you-not-spread-rumours/1000076273Z
1000076273mp4zCan You Not Spread Rumours?z$md5:c957d8868e9bc793ccb813691cc4c434iBCVZ20151111i}  r_   extr[   r\   r`   upload_dater]   rh   Zskip_downloadm3u8)url	info_dictparamsz\https://www.hotstar.com/tv/ek-bhram-sarvagun-sampanna/s-2116/janhvi-targets-suman/1000234847Z
1000234847zJanhvi Targets Sumanz$md5:78a85509348910bd1ca31be898c5796bi\Z20190501i  ZStarPlusZ821zEk Bhram - Sarvagun Sampannaz	Chapter 1r   Z
1260004607   )r_   r   r[   r\   r`   r   r]   rb   rc   rd   re   rf   rg   rh   ri   zZhttps://www.hotstar.com/in/shows/anupama/1260022017/anupama-anuj-share-a-moment/1000282843Z
1000282843zAnupama, Anuj Share a Momentz$md5:8d74ed2248423b8b06d5c8add4d7a0c0idZAnupamaZ
1260022018Z20230307iU  i  )r_   r   r[   re   r\   r`   rb   rd   rf   rg   r   rh   ri   r]   rc   z[https://www.hotstar.com/in/shows/kana-kaanum-kaalangal/1260097087/back-to-school/1260097320Z
1260097320zBack To Schoolz$md5:b0d6a4c8a650681491e7405496fc7e13iabzHotstar SpecialszKana Kaanum KaalangalZ
1260097089Z20220421i  Z
1260003991zEhttps://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286Z
1000262286zE3 - SaiRat, Kahani Pyaar Kiz$md5:e3b4b3203bc0c5396fe7d0e4948a6385Z20210606i(`i  )r_   r   r[   r\   rh   r   r`   r]   z3https://www.hotstar.com/in/movies/premam/1000091195Z
1000091195ZPremami  z$md5:096cd8aaae8dab56524823dc19dfa9f7i&WZ20160502i"#  )	r_   r   r[   ra   r\   r`   r   rh   r]   z7https://www.hotstar.com/movies/radha-gopalam/1000057157Tr   Zonly_matchingzhhttps://www.hotstar.com/in/sports/cricket/follow-the-blues-2021/recap-eng-fight-back-on-day-2/1260066104zZhttps://www.hotstar.com/in/sports/football/most-costly-pl-transfers-ft-grealish/1260065956Fmoviematchrh   content)ZmoviesZsportsrh   rH   ZshowsZclipsNZMOVIEZEPISODEZSPORTZCLIPS)r   rh   r   r   rQ   rO   rR   )resvcodecZdrlanguageZaudio_codec)r   acodecr   NZ	ignore_me)slugrv   c                C   s8   d ||fv sJ |s$t | j|dd}| d| d| S )Nr+   delim)r   r   )clsr<   
video_typer   rv   r    r    r!   rz     s    zHotStarIE._video_urlc                    sn    |dd\}} j| } |}|r:| jsB   t j| d|dd|dddd	d
t	hfpri }|dr 
| d}g i d  }}}	d j di}
t|dthfpĈ j| }  j d|dd} d||||}t|dddddd dddt	httdhf}t|ddtdd fD ]}t|dpNd t fd!d" j D rtq6t	d#d" d$D }|d%d&vrd'}	q6td(d)|d* }t|}g i  }}zd+v s|d,kr j||d-|
d.\}}nXd/v s
|d0kr  j|||
d1\}}n.|d2kr,n"|t|d3t|d4d5g}W n` ty } zFt|j t!r|j j"d6v rd'}n
 #| W Y d }~q6W Y d }~n
d }~0 0 |D ]} j$ D ]$\}}||s||||< q|d7d8kr|d9s|d9|d9< |d:d8kr|d;sd<d=d>|d?|d;< d@|dA v spdB|dCpjd v rdD|dEpdF |dE< t%|dG|d:d8kr|d?nd |dCdHdI|dC< q|&|  '||}q6|s,|r j(dJgd'dK n.|	r 
| n )||s, j*dLd'dM  +| |D ]}|,dNi -|
 q:i  .||||dOS )PNr_   typez/detailF   )rm   rZ   )fatalr,   rn   ro   itemZdrmProtectedZRefererz/incontentTypezFetching server timezx-origin-datezpages/watchr|   spacesZplayerZwidget_wrappersc                 S   s   |d dkS )NtemplateZPlayerWidgetr    rq   r    r    r!   rt   =  ru   z)HotStarIE._real_extract.<locals>.<lambda>Zwidgetdataplayer_configzplayer config)Zmedia_assetZmedia_asset_v2)Zprimaryfallbackc                 S   s   t |d S )Ncontent_url)r   rq   r    r    r!   rt   C  ru   Zplayback_tags c                 3   s4   | ],\}}  |D ]}| d | v V  qqdS )rT   N)Z_configuration_arg).0keyprefixignorer   tagsr    r!   	<genexpr>F  s   z*HotStarIE._real_extract.<locals>.<genexpr>c                 s   s,   | ]$}g | d ddR dd V  qdS )rT   r   Nr   )split)r   tr    r    r!   r   K  ru   ;rN   )rE   NTz(?<=//staragvod)(\d)zweb\1r   zpackage:hlsr   r   )r   r#   zpackage:dashZmpd)r#   Zf4mwidthheight)r   r   r   )i  i  r   nonerR   r   Zaudio_channelsr      )rC   rD   rM   ZAudio_DescriptionZ	format_idzAudio DescriptionZformat_noteiZsource_preferencerP   z, r   r$   )Z	countriesZmetadata_availablez1Your account does not have access to this content)expectedZhttp_headers)r_   formatsZ	subtitles)/_match_valid_urlgroup_TYPEZ_get_cookiesgetr   Zraise_login_requiredr   r*   r;   Z
report_drmr   r8   _CONTENT_TYPEZ_request_webpage
get_headerrY   rj   r   r   r   _IGNORE_MAPrp   r   rer   r   Z#_extract_m3u8_formats_and_subtitlesZ"_extract_mpd_formats_and_subtitlesr
   r   
isinstancecauser   statusZwrite_debug_TAG_FIELDSr   extendZ_merge_subtitlesZraise_geo_restrictedr"   Zraise_no_formatsZ_remove_duplicate_formats
setdefaultupdaterl   )r   r   r<   r   r   rk   Zgeo_restrictedr   subsZhas_drmr#   rX   r=   Zwatchr   Zplayback_setZtag_dictZ
format_urlr   Zcurrent_formatsZcurrent_subsefkrs   r    r   r!   _real_extract#  s    







$



zHotStarIE._real_extract)N)r   r   r   IE_NAMEIE_DESC
_VALID_URL_TESTSZ_GEO_BYPASSr   r   r   r   classmethodrz   r   r    r    r    r!   ry      s  

nry   c                   @   s^   e Zd 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gZdd ZdS )HotStarPrefixIEzX The "hotstar:" prefix is no longer in use, but this is kept for backward compatibility Fz'hotstar:(?:(?P<type>\w+):)?(?P<id>\d+)$zhotstar:1000076273Tr   zhotstar:movies:1260009879Z
1260009879r   zNuvvu Naaku Nachavz$md5:d43701b1314e6f8233ce33523c043b7di*n]Z20190903i#*  r   )r   r   zhotstar:episode:1000234847zhotstar:sports:1260065956zhotstar:sports:1260066104c                 C   s,   |  |dd\}}| t||t|S )Nr_   r   )r   r   rx   ry   rz   )r   r   r<   r   r    r    r!   r     s    zHotStarPrefixIE._real_extractN)r   r   r   __doc__r   r   r   r   r    r    r    r!   r     s8   r   c                   @   s\   e Zd ZdZdZdddiddddd	id
ddddidddddiddgZdZdd ZdS )HotStarSeriesIEzhotstar:seriesz[(?P<url>https?://(?:www\.)?hotstar\.com(?:/in)?/(?:tv|shows)/[^/]+/(?P<id>\d+))/?(?:[#?]|$)z4https://www.hotstar.com/in/tv/radhakrishn/1260000646r_   Z
1260000646i  )r   r   Zplaylist_mincountz-https://www.hotstar.com/tv/dancee-/1260050431Z
1260050431*   z-https://www.hotstar.com/in/tv/mahabharat/435/Z435i  z4https://www.hotstar.com/in/shows/anupama/1260022017/Z
1260022017iA  d   c              
   C   sj   |  |dd\}}| jd|d|idd d d d }tt| jd	|d
d|d|| j}| ||S )Nr   r_   zshow/detailrZ   )r,   rn   ro   r   ztray/g/1/itemsrd   r   )Zetideid)	r   r   r*   r   	functoolspartialr~   rw   Zplaylist_result)r   r   Z	series_idr   entriesr    r    r!   r     s&    
zHotStarSeriesIE._real_extractN)r   r   r   r   r   r   rw   r   r    r    r    r!   r     s2   r   )r   r2   r.   r   r   r   r9   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   Zutils.traversalr   r   r   ry   r   r   r    r    r    r!   <module>   s    0h  %