U
    g)                     @   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 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urljoinc                   @   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'   8/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/itv.py_generate_api_headersH   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)r.   r   )minmax)
featuresetZplatformTag)userZdeviceclientZvariantAvailability)dataheadersfatal)Z_download_jsonjsondumpsencode)r&   video_idZplaylist_urlr8   platform_tagr4   r9   r'   r'   r(   	_call_apiO   s6      

 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>t       z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>zoutband-webvttN)r   .0r>   Zfeaturesetsr4   r'   r'   r(   	<genexpr>r   s
     z'ITVIE._get_subtitles.<locals>.<genexpr>NNFr9   c                 S   s   | d d d S )NPlaylistVideoZ	Subtitlesr'   rA   r'   r'   r(   rC   z   rD   z&ITVIE._get_subtitles.<locals>.<lambda>Hrefenr   )nextreversedlistitemsr?   r   
isinstancedictr   get
setdefaultappend)r&   r=   variantsios_playlist_urlr8   argskwargs	subtitlesZplatform_tag_subsZfeatureset_subsZsubs_playlistsubssubhrefr'   r'   r(   _get_subtitlesm   s2         
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'   rA   r'   r'   r(   rC      rD   z%ITVIE._real_extract.<locals>.<lambda>z{}FrI   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 r@   r'   rA   r'   r'   r(   rC      rD   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>ZaeshlsN)setr   rE   r'   r'   r(   rG      s
     z&ITVIE._real_extract.<locals>.<genexpr>rH   zNo downloads availableT)expectedr=   zdata-video-playlistzdata-video-idzdata-video-hmacc                 S   s   | d d S )NrJ   rK   r'   rA   r'   r'   r(   rC      rD   ZBaseZ
MediaFilesrL   Zm3u8r   Zm3u8_nativer`   )Zentry_protocolZm3u8_idr9   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'   rA   r'   r'   r(   rC      rD   i  i8  d   r   false)widthheightZqualityZblurbg)r   rh   ri   )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   strrN   rO   rP   rQ   r   rT   r)   r?   rS   r
   extendZ_extract_m3u8_formatsrV   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    rW   Zplatform_tag_videoZfeatureset_videorX   r8   Zios_playlistZ
video_dataZios_base_urlrl   Z
media_filer^   r   inford   Zileitemrn   Zthumbnail_urlr'   r'   r(   _real_extract   s    
       


    
     
	 
zITVIE._real_extractN)T)
__name__
__module____qualname__
_VALID_URLZ_GEO_COUNTRIES_TESTSr)   r?   r_   rw   r'   r'   r'   r(   r      sX     .
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 ]x t fdddD sTq8 d d } d d } d d	 }|| jt| j|||f d
ddg|dt	
 |d q8| j|dd}	| |||	S )Nc                 S   s   | d d d d d S )NpropsZ	pagePropsarticlebodycontentr'   rA   r'   r'   r(   rC      rD   z)ITVBTCCIE._real_extract.<locals>.<lambda>c                 3   s    | ]} d   |dkV  qdS )r7   Z
BrightcoveN)rT   )rF   attrvideor'   r(   rG      s     z*ITVBTCCIE._real_extract.<locals>.<genexpr>)r-   r/   r7   r   Z	accountIdZplayerIdz193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)Zgeo_ip_blocksZreferrer)Zier=   FrI   )ro   rp   r   Z_search_nextjs_dataanyrV   Z
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   Zie_keyZ_og_search_titleZplaylist_result)
r&   r   Zplaylist_idrt   Zjson_mapentriesr=   Z
account_idZ	player_idr   r'   r   r(   rw      s8    

   
zITVBTCCIE._real_extractN)rx   ry   rz   r{   r|   r   rw   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   r   r}   r'   r'   r'   r(   <module>   s   @ B