o
    i*                     @   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]+)GBz)https://www.itv.com/hub/plebs/2a1873a00022a1873a0002mp4zPlebs - The Orgyz$md5:4d7159af53ebd5b36e8b3ec82a41fdb4Plebsr   z3re:https?://hubimages\.itv\.com/episode/2_1873_0002)idexttitledescriptionseriesseason_numberepisode_number	thumbnailskip_downloadT)url	info_dictparamsz:https://www.itv.com/hub/the-jonathan-ross-show/2a1166a0209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$   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   uppergeo_verification_headers)selfr,    r0   H/home/ubuntu/.local/lib/python3.10/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 )	itvUserIdentitlementstokenSafari5z
Windows NTz6.1desktop)nameversiontype)manufacturermodelosz4.1browser)r;   r   )minmax)
featuresetplatformTag)userdeviceclientvariantAvailability)dataheadersfatal)_download_jsonjsondumpsencode)r/   video_idplaylist_urlrJ   platform_tagrC   rK   r0   r0   r1   	_call_apiP   s0   
zITVIE._call_apic                 O   s   i }t dd tt| D d\}}	|rM|	rM| j|||||	dd}
t|
dd tp,g }|D ]}t|ts7q/t|	d}|sAq/|
d	g d
|i q/|S )Nc                 s   s8    | ]\}}|D ]}t |d d dkr||fV  qqdS )c                 S      | d S Nr   r0   xr0   r0   r1   <lambda>u       z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>zoutband-webvttN)r   .0rR   featuresetsrC   r0   r0   r1   	<genexpr>s   s    z'ITVIE._get_subtitles.<locals>.<genexpr>NNFrK   c                 S   s   | d d d S )NPlaylistVideo	Subtitlesr0   rV   r0   r0   r1   rX   {   s    z&ITVIE._get_subtitles.<locals>.<lambda>Hrefenr$   )nextreversedlistitemsrS   r   
isinstancedictr   get
setdefaultappend)r/   rP   variantsios_playlist_urlrJ   argskwargs	subtitlesplatform_tag_subsfeatureset_subssubs_playlistsubssubhrefr0   r0   r1   _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
\}}|r:|sAtdd|d|dpI|d }| |d }	| |||	||}
t|
dd tpci }|d}g }|dpqg D ].}|d}|s|qr|r|| }t|}|dkr|| j||ddddd qr|d|i qr| j||i d}|s| j| jt|dddd|dd}|r|dd kr|d!pg D ] }|d"pi }|dd#krd$|d%< | j||ddpi } nqg }t|d&d t}|r||jd'd(d)d*d+d,d'd(d-tt|t|d.d/g | jd0d1g|d d}|r*|d|i | | t|| d2d3g||| ||||	t|d4t t!d5||d6|S )7Nz(?s)(<[^>]+id="video"[^>]*>)r&   c                 S   rT   )Nzdata-video-variantsr0   rV   r0   r0   r1   rX      rY   z%ITVIE._real_extract.<locals>.<lambda>z{}Fr_   c                 s   sD    | ]\}}|D ]}t t|d d pg ddhkr||fV  qqdS )c                 S   s   | d d S rU   r0   rV   r0   r0   r1   rX          z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>aeshlsN)setr   rZ   r0   r0   r1   r]      s    z&ITVIE._real_extract.<locals>.<genexpr>r^   zNo downloads availableT)expectedrP   zdata-video-playlistzdata-video-idzdata-video-hmacc                 S   s   | d d S )Nr`   ra   r0   rV   r0   r0   r1   rX      rz   Base
MediaFilesrc   m3u8r   m3u8_nativer|   )entry_protocolm3u8_idrK   r$   )defaultzJSON-LDjson_ld)groupz@typeBreadcrumbListzitemListElement:zitem:	TVEpisodezhttp://schema.orgz@contextc                 S   rT   )Nzdata-video-posterframer0   rV   r0   r0   r1   rX      rY   i  i8  d   r   false)widthheightqualityblurbg)r$   r   r   )r$   
preferencezog:imageztwitter:imagezog:titleztwitter:titleDurationzepisode-info__synopsis)r   r   formatsrr   durationr   
thumbnails)"	_match_id_download_webpager   _search_regex_parse_jsonr   strre   rf   rg   rh   r   rk   r2   rS   rj   r
   extend_extract_m3u8_formatsrm   _search_json_ldr   _json_ldformatr   r   r   _html_search_meta_remove_duplicate_formatsr   extract_subtitlesr   r	   r   )r/   r$   rP   webpager&   rn   platform_tag_videofeatureset_videoro   rJ   ios_playlist
video_dataios_base_urlr   
media_filerx   r   infor   ileitemr   thumbnail_urlr0   r0   r1   _real_extract   s   




	
zITVIE._real_extractN)T)
__name__
__module____qualname__
_VALID_URL_GEO_COUNTRIES_TESTSr2   rS   ry   r   r0   r0   r0   r1   r      sV    .
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%   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 ]; t fdddD s*q d d } d d } d d	 }|| jt| j|||f g d
|dt	
 |d q| j|dd}	| |||	S )Nc                 S   s   | d d d d d S )Nprops	pagePropsarticlebodycontentr0   rV   r0   r0   r1   rX      s    z)ITVBTCCIE._real_extract.<locals>.<lambda>c                 3   s"    | ]}t  d |fdkV  qdS )rI   
BrightcoveNr   )r[   attrvideor0   r1   r]      s     z*ITVBTCCIE._real_extract.<locals>.<genexpr>)r:   r<   rI   r   	accountIdplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)geo_ip_blocksreferrer)ierP   Fr_   )r   r   r   _search_nextjs_dataanyrm   
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   ie_key_og_search_titleplaylist_result)
r/   r$   playlist_idr   json_mapentriesrP   
account_id	player_idr   r0   r   r1   r      s0   


zITVBTCCIE._real_extractN)r   r   r   r   r   r   r   r0   r0   r0   r1   r      s"    	r   )rM   
brightcover   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r0   r0   r0   r1   <module>   s    @ B