U
    gF                     @   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mZ ddlm	Z	 ddl
mZmZmZmZmZ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G dd deZG dd deZdS )    N   )InfoExtractor   )	HTTPError)ExtractorErrordetermine_extint_or_nonejoin_nonemptystr_or_nonetraverse_objurl_or_nonec                   @   s>   e Zd ZdZdZdZdd ZdddZdd	d
ZdddZ	dS )HotStarBaseIEzhttps://www.hotstar.comzhttps://api.hotstar.coms   KSuc                 O   s,   | j | j d| f||ddddiS )Nz/o/v1/headersINPCTV)zx-country-codezx-platform-code)_download_json_API_URL)selfpathargskwargs r   </tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/hotstar.py_call_api_v1   s    zHotStarBaseIE._call_api_v1Nc           
   
   C   s   t |ptt }|d }d| d| d}|dt| j| tj	  7 }|rl|
drl|
dj}nF| j| j d|dtd	tt d
dgi |ddddd }| j| j d| |||dd|dd}	|	d dkrt|	d dd|	d S )Nip  zst=z~exp=z~acl=/*z~hmac=ZuserUPz/um/v3/userszDownloading tokenZ
device_ids	device_id)idtyper   zapplication/json)hotstarauthx-hs-platformzContent-Type)Znotedatar   Zuser_identity/z6.72.2Zweb)r   zx-hs-appversionr   zx-hs-usertoken)queryr   messagez#Playback URL's fetched successfullyT)expectedr   )r   inttimehmacnew_AKAMAI_ENCRYPTION_KEYencodehashlibsha256	hexdigestgetvaluer   r   jsondumpsstruuiduuid4r   )
r   r   video_idr!   stcookiesexpauthtokenresponser   r   r   _call_api_impl   sD    "
  
  	 zHotStarBaseIE._call_api_implc              
   C   sF   | j | d| |||d|dr.|djn
tt ddddS )Nz	/content/zaudio_channel:stereo|container:fmp4|dynamic_range:hdr|encryption:plain|ladder:tv|package:dash|resolution:fhd|subs-tag:HotstarVIP|video_codec:h265r   Windows10)zdesired-configz	device-idzos-namez
os-version)r5   r6   r!   )r;   r-   r.   r1   r2   r3   )r   r   r4   r5   r6   r   r   r   _call_api_v2@   s        zHotStarBaseIE._call_api_v2c                 k   sX   | j ||f|d d }t|dD ]0}|dr"| tj|d |dt|d V  q"d S )Nbodyresults))ZassetsNitems.	contentId)root)r   r   r-   
url_result	HotStarIE
_video_url)r   r   Zitem_idrC   r   r@   videor   r   r   _playlist_entriesI   s    
  zHotStarBaseIE._playlist_entries)NN)NN)N)
__name__
__module____qualname__	_BASE_URLr   r(   r   r;   r>   rH   r   r   r   r   r      s   
!
	r   c                   @   sN  e 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d dd!dd"d#dd$dd%d&d!d'd(dd)d*d+d,d-dd.dd/d0d1d2dd3d4d.dd5d6d)dd7d8dd9d:d9d;d<d=d>dd?d@ddAdBdCdDdEdAdFdG	ddHdIdJdKdIdJdLdIdJg	ZdMZdNdOdPdPdPdQdQdRZdSdTdUdVZdWdXdTdYZ	e
dad[dZd\d]d^Zd_d` ZdZS )brE   Zhotstarz(?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   exttitledescription	timestampupload_datedurationepisodeZ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StarPlus3zEk Bhram - Sarvagun Sampannaz	Chapter 1r   Z6771   )r   rO   rP   rQ   rR   rS   rT   channel
channel_idseriesseasonseason_number	season_idrU   episode_numberrW   rX   zZhttps://www.hotstar.com/in/shows/anupama/1260022017/anupama-anuj-share-a-moment/1000282843Z
1000282843zAnupama, Anuj Share a Momentz$md5:8d74ed2248423b8b06d5c8add4d7a0c0idZAnupamaZ7399Z20230307iU  i  )r   rO   rP   r_   rQ   rR   r\   r^   r`   ra   rS   rU   rb   rT   r]   z HTTP Error 504: Gateway Time-out)rW   rX   skipz[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9441Z20220421i  Z54zEhttps://www.hotstar.com/in/clips/e3-sairat-kahani-pyaar-ki/1000262286Z
1000262286zE3 - SaiRat, Kahani Pyaar Kiz$md5:e3b4b3203bc0c5396fe7d0e4948a6385Z20210606i(`i  )r   rO   rP   rQ   rU   rS   rR   rT   z3https://www.hotstar.com/in/movies/premam/1000091195Z
1000091195ZPremami  z$md5:d833c654e4187b5e34757eafb5b72d7fi&WZ20160502i"#  )	r   rO   rP   release_yearrQ   rR   rS   rU   rT   z7https://www.hotstar.com/movies/radha-gopalam/1000057157TrW   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/1260065956FZmoviematchrU   content)ZmoviesZsportsrU   tvZshowsZclipsN
resolutionZvideo_codecdynamic_range)resvcodecZdrlanguageZaudio_codec)rn   acodecrm   NZ	ignore_me)slugrC   c                C   s8   d ||fkst |s$t| j|dd}| d| d| S )Nr    delim)AssertionErrorr	   rL   )clsr4   
video_typerp   rC   r   r   r   rF      s    zHotStarIE._video_urlc                    s(    |dd\}} j||} |}t j| d|dd|dddd	d
thfp^i } ds~|dr~ 	|  
 j d|d jd}d}g i  }}	d j di}
 jd|||dd }|D ]x}t|tsqt|dpdt fdd j D rqt|d}|s2qtdd|}t|}g i  }}zdksh|dkr j||d|
d\}}nXdks|d kr j|||
d!\}}n.|d"krn"|t|d#t|d$d%g}W nL tk
r& } z,t|jtr|jjd&krd'}W Y qW 5 d }~X Y nX td(d d)D }|d*d+krd|D ]}d'|d,< qT|D ]} j D ]$\}}||sv||||< qv|d-d.kr|d/s|d/|d/< |d0d.kr|d1sd2d3d4|d5|d1< t |d6|d0d.kr |d5nd |d7d8d9|d7< qh|!|  "|	|}	q|sn|rn j#d:gd'd;  $| |D ]}|%d<i &|
 q|||d=|d>t|d?tt|d@dAt|dB||	|dCt|dD|dE|dFt|dGt|dH|d=t|dIdJS )KNr   r   z/detailF'  )tasrB   )fatalr!   r?   r@   itemZallow_unplayable_formatsZdrmProtectedz/inr   zx-origin-dateZRefererzplay/v1/playback)r5   r6   ZplayBackSetsZtagsCombination c                 3   s4   | ],\}}  |D ]}| d | kV  qqdS ):N)Z_configuration_arg).0keyprefixignorer   tagsr   r   	<genexpr>   s    z*HotStarIE._real_extract.<locals>.<genexpr>ZplaybackUrlz(?<=//staragvod)(\d)zweb\1zpackage:hlsrV   rM   )rO   r   zpackage:dashZmpd)r   Zf4mwidthheight)rW   r   r   i  Tc                 s   s&   | ]}| d dddd V  qdS )r{   r   Nr   )N)split)r|   tr   r   r   r     s     ;Z
encryption)plainNZhas_drmrm   nonerk   ro   Zaudio_channelsr      )ZstereoZdolby51Zaudio_channelZladderZformat_notez, rq   r   )Z	countriesZmetadata_availableZhttp_headersrP   rQ   rT   ZbroadcastDateZ	startDateyearZchannelNameZ	channelIdZshowNameZ
seasonNameZseasonNoZseasonIdZ	episodeNo)r   rP   rQ   rT   rR   re   formatsZ	subtitlesr\   r]   r^   r_   r`   ra   rU   rb   )'_match_valid_urlgroup_TYPEr-   Z_get_cookiesr   r   dict	get_paramZ
report_drmZ_download_webpage_handlerL   r   r>   
isinstancer
   any_IGNORE_MAPrA   r   resubr   Z#_extract_m3u8_formats_and_subtitlesZ"_extract_mpd_formats_and_subtitlesr   r   causer   statusr   _TAG_FIELDSr	   extendZ_merge_subtitlesZraise_geo_restrictedZ_remove_duplicate_formats
setdefaultupdate)r   rW   r4   ru   r6   Z
video_datar5   Zgeo_restrictedr   subsr   Zplayback_setsZplayback_setZ
format_urlrO   Zcurrent_formatsZcurrent_subseZtag_dictfkvr   r   r   _real_extract   s    
   
 




     


zHotStarIE._real_extract)N)rI   rJ   rK   IE_NAME
_VALID_URL_TESTSZ_GEO_BYPASSr   r   r   classmethodrF   r   r   r   r   r   rE   Q   s   
jrE   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:1000076273Trf   zhotstar:movies:1260009879Z
1260009879rM   zNuvvu Naaku Nachavz$md5:d43701b1314e6f8233ce33523c043b7di*n]Z20190903i#*  rN   rc   zhotstar:episode:1000234847zhotstar:sports:1260065956zhotstar:sports:1260066104c                 C   s,   |  |dd\}}| t||t|S )Nr   r   )r   r   rD   rE   rF   )r   rW   r4   ru   r   r   r   r   q  s    zHotStarPrefixIE._real_extractN)rI   rJ   rK   __doc__ZIE_DESCr   r   r   r   r   r   r   r   Q  s8   r   c                   @   sF   e Zd ZdZdZdddidddd	d
dd	d
dd	d
gZdd ZdS )HotStarPlaylistIEzhotstar:playlistzZhttps?://(?:www\.)?hotstar\.com(?:/in)?/(?:tv|shows)(?:/[^/]+){2}/list/[^/]+/t-(?P<id>\w+)zJhttps://www.hotstar.com/tv/savdhaan-india/s-26/list/popular-clips/t-3_2_26r   Z3_2_26   rW   rX   Zplaylist_mincountzMhttps://www.hotstar.com/shows/savdhaan-india/s-26/list/popular-clips/t-3_2_26Trf   zAhttps://www.hotstar.com/tv/savdhaan-india/s-26/list/extras/t-2480zQhttps://www.hotstar.com/in/tv/karthika-deepam/15457/list/popular-clips/t-3_2_1272c                 C   s(   |  |}| | jd|d|dd|S )Nz	tray/findrv   )rw   ZuqIdr!   )Z	_match_idplaylist_resultrH   )r   rW   id_r   r   r   r     s
    
 zHotStarPlaylistIE._real_extractNrI   rJ   rK   r   r   r   r   r   r   r   r   r   v  s&    r   c                   @   sR   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gZdd ZdS )HotStarSeasonIEzhotstar:seasonzd(?P<url>https?://(?:www\.)?hotstar\.com(?:/in)?/(?:tv|shows)/[^/]+/\w+)/seasons/[^/]+/ss-(?P<id>\w+)zJhttps://www.hotstar.com/tv/radhakrishn/1260000646/seasons/season-2/ss-8028r   Z8028#   r   zDhttps://www.hotstar.com/in/tv/ishqbaaz/9567/seasons/season-2/ss-4357Z4357   zGhttps://www.hotstar.com/in/tv/bigg-boss/14714/seasons/season-4/ss-8208/Z8208   zJhttps://www.hotstar.com/in/shows/bigg-boss/14714/seasons/season-4/ss-8208/Trf   c                 C   s6   |  | \}}| | jd||ddd|dd|S )Nzseason/assetr   rv   )taorw   sizer   r   )r   groupsr   rH   )r   rW   ra   r   r   r   r     s       zHotStarSeasonIE._real_extractNr   r   r   r   r   r     s2      r   c                   @   sX   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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   z-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
1260022017i  c                 C   sZ   |  | \}}| jd|d|idd d d d }| | jd||d	d
d	|dd|S )Nzshow/detailrB   r   r?   r@   ry   r   ztray/g/1/itemsr   rv   )r   rw   ZetidZeid)r   r   r   r   rH   )r   rW   Z	series_idr   r   r   r   r     s,         zHotStarSeriesIE._real_extractNr   r   r   r   r   r     s8       r   )r*   r&   r/   r   r%   r2   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   rE   r   r   r   r   r   r   r   r   <module>   s    $<  % 