a
    h*                     @   s   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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dS )    N   )BrightcoveNewIE)InfoExtractor   )
JSON_LD_REExtractorErrorbase_url
clean_htmldetermine_extextract_attributesget_element_by_classmerge_dictsparse_durationsmuggle_urltry_geturl_basenameurl_or_noneurljointraverse_objc                   @   s   e Zd ZdZdg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iddddddddddgZdd Zd$ddZdd  Zd!d" Z	d#S )%ITVIEz:https?://(?:www\.)?itv\.com/hub/[^/]+/(?P<id>[0-9a-zA-Z]+)ZGBz)https://www.itv.com/hub/plebs/2a1873a0002Z2a1873a0002mp4zPlebs - The Orgyz$md5:4d7159af53ebd5b36e8b3ec82a41fdb4ZPlebsr   z3re:https?://hubimages\.itv\.com/episode/2_1873_0002)idexttitledescriptionseriesseason_numberepisode_number	thumbnailZskip_downloadT)url	info_dictparamsz:https://www.itv.com/hub/the-jonathan-ross-show/2a1166a0209Z2a1166a0209z.The Jonathan Ross Show - Series 17 - Episode 8z$md5:3023dcdd375db1bc9967186cdb3f1399zThe Jonathan Ross Show      )r   r   r   r   r   r   r   r   z7https://www.itv.com/hub/through-the-keyhole/2a2271a0033)r    Zonly_matchingzBhttps://www.itv.com/hub/james-martins-saturday-morning/2a5159a0034z9https://www.itv.com/hub/whos-doing-the-dishes/2a2898a0024c                 C   s   t dd| d|  S )Nz(application/vnd.itv.vod.playlist.v2+jsonzapplication/json)AcceptzContent-Typehmac)r   upperZgeo_verification_headers)selfr&    r)   I/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/itv.py_generate_api_headersI   s    zITVIE._generate_api_headersc                 C   sR   | j ||tdg ddddddddd	d
dd||d|dd ||dS )N )Z	itvUserIdZentitlementstokenZSafari5z
Windows NTz6.1Zdesktop)nameversiontype)Zmanufacturermodelosz4.1Zbrowser)r0   r   )minmax)
featuresetZplatformTag)userZdeviceclientZvariantAvailability)dataheadersfatal)Z_download_jsonjsondumpsencode)r(   video_idZplaylist_urlr:   platform_tagr6   r;   r)   r)   r*   	_call_apiP   s0    

zITVIE._call_apic                 O   s   i }t dd tt| D d\}}	|r|	r| j|||||	dd}
t|
dd tpXg }|D ]:}t|tsnq^t|	d}|sq^|
d	g d
|i q^|S )Nc                 s   s6   | ].\}}|D ] }t |d d dkr||fV  qqdS )c                 S   s   | d S Nr   r)   xr)   r)   r*   <lambda>u       z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>zoutband-webvttN)r   .0r@   Zfeaturesetsr6   r)   r)   r*   	<genexpr>s   s   z'ITVIE._get_subtitles.<locals>.<genexpr>NNFr;   c                 S   s   | d d d S )NPlaylistVideoZ	Subtitlesr)   rC   r)   r)   r*   rE   {   rF   z&ITVIE._get_subtitles.<locals>.<lambda>Hrefenr    )nextreversedlistitemsrA   r   
isinstancedictr   get
setdefaultappend)r(   r?   variantsios_playlist_urlr:   argskwargs	subtitlesZplatform_tag_subsZfeatureset_subsZsubs_playlistsubssubhrefr)   r)   r*   _get_subtitlesn   s(    
zITVIE._get_subtitlesc                 C   s  |  |}| ||}t| d|d}| jt|dd tp>d|dd}tdd	 tt	|
 D d
\}}|rt|stdd|d|dp|d }| |d }	| |||	||}
t|
dd tpi }|d}g }|dpg D ]`}|d}|sq|r|| }t|}|dkr6|| j||ddddd q|d|i q| j||i d}|s| j| jt|dddd|dd}|r|dd kr|d!pg D ]J}|d"pi }|dd#krd$|d%< | j||ddpi } qqg }t|d&d t}|rB||jd'd(d)d*d+d,d'd(d-tt|t|d.d/g | jd0d1g|d d}|rj|d|i | | t|| d2d3g||| ||||	t|d4t t!d5||d6|S )7Nz(?s)(<[^>]+id="video"[^>]*>)r"   c                 S   s   | d S )Nzdata-video-variantsr)   rC   r)   r)   r*   rE      rF   z%ITVIE._real_extract.<locals>.<lambda>z{}FrK   c                 s   sB   | ]:\}}|D ],}t t|d d p$g ddhkr||fV  qqdS )c                 S   s   | d d S rB   r)   rC   r)   r)   r*   rE      rF   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>ZaeshlsN)setr   rG   r)   r)   r*   rI      s   z&ITVIE._real_extract.<locals>.<genexpr>rJ   zNo downloads availableT)expectedr?   zdata-video-playlistzdata-video-idzdata-video-hmacc                 S   s   | d d S )NrL   rM   r)   rC   r)   r)   r*   rE      rF   ZBaseZ
MediaFilesrN   Zm3u8r   Zm3u8_nativerb   )Zentry_protocolZm3u8_idr;   r    )defaultzJSON-LDjson_ld)groupz@typeZBreadcrumbListzitemListElement:zitem:Z	TVEpisodezhttp://schema.orgz@contextc                 S   s   | d S )Nzdata-video-posterframer)   rC   r)   r)   r*   rE      rF   i  i8  d   r   false)widthheightZqualityZblurbg)r    rj   rk   )r    Z
preferencezog:imageztwitter:imagezog:titleztwitter:titleZDurationzepisode-info__synopsis)r   r   formatsr]   durationr   
thumbnails)"	_match_id_download_webpager   Z_search_regexZ_parse_jsonr   strrP   rQ   rR   rS   r   rV   r+   rA   rU   r
   extendZ_extract_m3u8_formatsrX   Z_search_json_ldr   Z_json_ldformatr   r   r   Z_html_search_metaZ_remove_duplicate_formatsr   Zextract_subtitlesr   r	   r   )r(   r    r?   webpager"   rY   Zplatform_tag_videoZfeatureset_videorZ   r:   Zios_playlistZ
video_dataZios_base_urlrn   Z
media_filer`   r   inforf   Zileitemrp   Zthumbnail_urlr)   r)   r*   _real_extract   s    






	
zITVIE._real_extractN)T)
__name__
__module____qualname__
_VALID_URLZ_GEO_COUNTRIES_TESTSr+   rA   ra   ry   r)   r)   r)   r*   r      sT   .
r   c                   @   s@   e Zd ZdZdddddddd	d
dddgZdZdd ZdS )	ITVBTCCIEzEhttps?://(?:www\.)?itv\.com/(?:news|btcc)/(?:[^/]+/)*(?P<id>[^/?#&]+)zGhttps://www.itv.com/btcc/articles/btcc-2019-brands-hatch-gp-race-actionz%btcc-2019-brands-hatch-gp-race-actionz&BTCC 2019: Brands Hatch GP race action)r   r      )r    r!   Zplaylist_countzqhttps://www.itv.com/news/2021-10-27/i-have-to-protect-the-country-says-rishi-sunak-as-uk-faces-interest-rate-hikezMi-have-to-protect-the-country-says-rishi-sunak-as-uk-faces-interest-rate-hikez$md5:6ef054dd9f069330db3dcc66cb772d32   zAhttp://players.brightcove.net/%s/%s_default/index.html?videoId=%sc           
   	      s   |  |}| ||}t| ||dd p.g }g }|D ]v t fdddD sTq8 d d } d d } d d	 }|| jt| j|||f g d
|dt	
 |d q8| j|dd}	| |||	S )Nc                 S   s   | d d d d d S )NpropsZ	pagePropsarticlebodycontentr)   rC   r)   r)   r*   rE      rF   z)ITVBTCCIE._real_extract.<locals>.<lambda>c                 3   s    | ]}t  d |fdkV  qdS )r9   Z
BrightcoveNr   )rH   attrvideor)   r*   rI      rF   z*ITVBTCCIE._real_extract.<locals>.<genexpr>)r/   r1   r9   r   Z	accountIdZplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)Zgeo_ip_blocksZreferrer)Zier?   FrK   )rq   rr   r   Z_search_nextjs_dataanyrX   Z
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   Zie_keyZ_og_search_titleZplaylist_result)
r(   r    Zplaylist_idrv   Zjson_mapentriesr?   Z
account_idZ	player_idr   r)   r   r*   ry      s0    


zITVBTCCIE._real_extractN)rz   r{   r|   r}   r~   r   ry   r)   r)   r)   r*   r      s    	r   )r<   Z
brightcover   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Zutils.traversalr   r   r   r)   r)   r)   r*   <module>   s   @ B