o
    iDK                     @   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 )HotStarBaseIEuserUPzhttps://www.hotstar.comzhttps://api.hotstar.comz+https://www.hotstar.com/api/internal/bff/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.1523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.970	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p"d}||kS )Nvaluesubsubscriptionsin.expiryr   )r
   inttimer   _TOKEN_NAMEr   jsonloadsr   allmax)selfcookiesserver_timer    r%   L/home/ubuntu/.local/lib/python3.10/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IN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pStt d	d
d}t|dthfsgtd|d S )Nip  zst=z~exp=z~acl=/*z~hmac=/r   )deviceIdr   zapplication/json)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_idr4   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=dashhls)fmp4fmp4brtsnon_ssaissai)stereodolby51atmosplainwidevineh264h265)rV   rW   vp9)phonetvfullhd4ksdrhdr)package	containeradsaudio_channel
encryptionvideo_codecvideo_codec_non_secureladder
resolutiontrue_resolutiondynamic_range),:)
separatorsSW_SECURE_DECODESW_SECURE_CRYPTO)	HDCP_V2_2	HDCP_V2_1HDCP_V2HDCP_V1)widevine_security_levelhdcp_version)
content_idfiltersclient_capabilitiesdrm_parameters)r4   r#   rE   )rI   r   dumps)r"   r-   rD   content_typer#   rE   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)broadcastDate	startDateyearchannelName	channelIdshowName
seasonNameseasonNoseasonId	episodeNo)idr~   r   r   	timestamprelease_yearchannel
channel_idseriesseasonseason_number	season_idepisodeepisode_number)r   r@   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  q,d S )NzDownloading z page r   z JSON)taotas)noter4   bodyresults)assetsNitemsc                 S   s   |d S )Nr}   r%   _vr%   r%   r&   <lambda>}   s    z+HotStarBaseIE._fetch_page.<locals>.<lambda>r}   )root)r0   
_PAGE_SIZEr   
url_result	HotStarIE
_video_urlr   )	r"   r-   item_idnamer4   r   pager   videor%   r%   r&   _fetch_pageu   s(   
zHotStarBaseIE._fetch_page)NN)__name__
__module____qualname__r   	_BASE_URLr,   r=   r8   r?   r>   r'   r0   rI   r|   staticmethodr   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 )er   hotstar
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/1000076273
1000076273mp4zCan You Not Spread Rumours?z$md5:c957d8868e9bc793ccb813691cc4c434iBCV20151111i}  r   extr~   r   r   upload_dater   r   skip_downloadm3u8)url	info_dictparamsz\https://www.hotstar.com/tv/ek-bhram-sarvagun-sampanna/s-2116/janhvi-targets-suman/1000234847
1000234847zJanhvi Targets Sumanz$md5:78a85509348910bd1ca31be898c5796bi\20190501i  StarPlus821zEk Bhram - Sarvagun Sampannaz	Chapter 1r   
1260004607   )r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   zZhttps://www.hotstar.com/in/shows/anupama/1260022017/anupama-anuj-share-a-moment/1000282843
1000282843zAnupama, Anuj Share a Momentz$md5:8d74ed2248423b8b06d5c8add4d7a0c0idAnupama
126002201820230307iU  i  )r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   z[https://www.hotstar.com/in/shows/kana-kaanum-kaalangal/1260097087/back-to-school/1260097320
1260097320zBack To Schoolz$md5:b0d6a4c8a650681491e7405496fc7e13iabzHotstar SpecialszKana Kaanum Kaalangal
126009708920220421i  
1260003991zEhttps://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286
1000262286zE3 - SaiRat, Kahani Pyaar Kiz$md5:e3b4b3203bc0c5396fe7d0e4948a638520210606i(`i  )r   r   r~   r   r   r   r   r   z3https://www.hotstar.com/in/movies/premam/1000091195
1000091195Premami  z$md5:096cd8aaae8dab56524823dc19dfa9f7i&W20160502i"#  )	r   r   r~   r   r   r   r   r   r   z7https://www.hotstar.com/movies/radha-gopalam/1000057157Tr   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matchr   content)moviessportsr   rZ   showsclipsNMOVIEEPISODESPORTCLIPS)r   r   r   r   rh   re   rj   )resvcodecdrlanguageaudio_codec)r   acodecr   N	ignore_me)slugr   c                C   s8   d ||fv sJ |st | j|dd}| d| d| S )Nr1   delim)r   r   )clsrD   
video_typer   r   r%   r%   r&   r     s   zHotStarIE._video_urlc                    sL    |dd\}} j| } |}|r| js!   t j| d|dd|dddd	d
t	hfp9i }|drD 
| d}g i d}}}	d j di}
t|dthfpb 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 ]B}t|dpd t fd!d" j D rqt	d#d" d$D }|d%d&vrd'}	qtd(d)|d* }t|}g i }}zAd+v s|d,kr j||d-|
d.\}}n+d/v s|d0kr j|||
d1\}}n|d2krn|t|d3t|d4d5g}W n) tyI } zt|j t!r:|j j"d6v r:d'}n #| W Y d }~qd }~ww |D ]} j$ D ]\}}||sd||||< qS|d7d8kr{|d9s{|d9|d9< |d:d8kr|d;sd<d=d>|d?|d;< d@|dA v sdB|dCpd v rdD|dEpdF |dE< t%|dG|d:d8kr|d?nd |dCdHdI|dC< qL|&|  '||}q|s|r j(dJgd'dK n|	r 
| n )||s j*dLd'dM  +| |D ]}|,dNi -|
 qi  .||||dOS )PNr   typez/detailF   )r   r}   )fatalr4   r   r   itemdrmProtectedRefererz/incontentTypezFetching server timezx-origin-datezpages/watchr   spacesplayerwidget_wrappersc                 S   s   |d dkS )NtemplatePlayerWidgetr%   r   r%   r%   r&   r   =      z)HotStarIE._real_extract.<locals>.<lambda>widgetdataplayer_configzplayer config)media_assetmedia_asset_v2)primaryfallbackc                 S   s   t |d S )Ncontent_url)r   r   r%   r%   r&   r   C  r   playback_tags c                 3   s6    | ]\}}  |D ]}| d | v V  qqdS )rl   N)_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 )rl   r   Nr   )split)r  tr%   r%   r&   r
  K  s   , ;rd   )rT   NTz(?<=//staragvod)(\d)zweb\1r   zpackage:hlsr   r   )r   r(   zpackage:dashmpd)r(   f4mwidthheight)r   r  r  )i  i  r   nonerj   r   audio_channelsr      )rQ   rR   rc   Audio_Description	format_idzAudio Descriptionformat_noteisource_preferencerg   z, r   r)   )	countriesmetadata_availablez1Your account does not have access to this content)expectedhttp_headers)r   formats	subtitles)/_match_valid_urlgroup_TYPE_get_cookiesgetr   raise_login_requiredr   r0   rC   
report_drmr   r@   _CONTENT_TYPE_request_webpage
get_headerr|   r   r   r    r   _IGNORE_MAPr   r  rer   r   #_extract_m3u8_formats_and_subtitles"_extract_mpd_formats_and_subtitlesr
   r   
isinstancecauser   statuswrite_debug_TAG_FIELDSr   extend_merge_subtitlesraise_geo_restrictedr'   raise_no_formats_remove_duplicate_formats
setdefaultupdater   )r"   r   rD   r   r#   r   geo_restrictedr  subshas_drmr(   r{   rE   watchr   playback_settag_dict
format_urlr   current_formatscurrent_subsefkr   r%   r  r&   _real_extract#  s   








zHotStarIE._real_extract)N)r   r   r   IE_NAMEIE_DESC
_VALID_URL_TESTS_GEO_BYPASSr"  r'  r*  r2  classmethodr   rF  r%   r%   r%   r&   r      s
   

n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
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:1260009879
1260009879r   zNuvvu Naaku Nachavz$md5:d43701b1314e6f8233ce33523c043b7di*n]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!  r   r   r   )r"   r   rD   r   r%   r%   r&   rF    s   zHotStarPrefixIE._real_extractN)r   r   r   __doc__rH  rI  rJ  rF  r%   r%   r%   r&   rM    s:    rM  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   
1260000646i  )r   r   playlist_mincountz-https://www.hotstar.com/tv/dancee-/1260050431
1260050431*   z-https://www.hotstar.com/in/tv/mahabharat/435/435i  z4https://www.hotstar.com/in/shows/anupama/1260022017/
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/detailr}   )r4   r   r   r   ztray/g/1/itemsr   r   )etideid)	r   r!  r0   r   	functoolspartialr   r   playlist_result)r"   r   	series_idrZ  entriesr%   r%   r&   rF    s&   
zHotStarSeriesIE._real_extractN)r   r   r   rG  rI  rJ  r   rF  r%   r%   r%   r&   rQ    s4    rQ  )r[  r:   r6   r   r+  r   rA   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r   rM  rQ  r%   r%   r%   r&   <module>   s"    0h  %