
    yf)                         d dl Z ddlm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	e      Z G d
 de      Zy)    N   )InfoExtractor)BrightcoveNewIE   )
compat_str)base_url
clean_htmldetermine_extextract_attributesExtractorErrorget_element_by_class
JSON_LD_REmerge_dictsparse_durationsmuggle_urltry_geturl_or_noneurl_basenameurljoinc                       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 Zd dZd Zd Z	y)!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                 Z    t        dd|j                         d| j                               S )Nz(application/vnd.itv.vod.playlist.v2+jsonzapplication/json)AcceptzContent-Typehmac)r   uppergeo_verification_headers)selfr.   s     6/usr/lib/python3/dist-packages/yt_dlp/extractor/itv.py_generate_api_headerszITVIE._generate_api_headersJ   s1    @.JJL
 ((*	, 	,    c                     | j                  ||t        j                  dg ddddddddd	d
dd||d|dd      j                         ||      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)r1   video_idplaylist_urlrM   platform_tagrF   rN   s          r2   	_call_apizITVIE._call_apiQ   s    ""(!#$& %-  ,#( )  %#  *)# $0('5 *4 vx7 # 7 	7r4   c           	         i }t        d t        t        |j                                     D        d      \  }}	|r|	r| j	                  |||||	d      }
t        |
d t              xs g }|D ]S  }t        |t              st        |j                  d            }|s1|j                  dg       j                  d|i       U |S )	Nc              3   X   K   | ]"  \  }}|D ]  }t        |d        dk(  r||f  $ yw)c                     | d   S Nr    xs    r2   <lambda>z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>v   s
    ad r4   zoutband-webvttN)r   .0rU   featuresetsrF   s       r2   	<genexpr>z'ITVIE._get_subtitles.<locals>.<genexpr>t   sH      I*{alIS]
N37GG J' I' Is   (*NNFrN   c                     | d   d   d   S )NPlaylistVideo	Subtitlesr[   r\   s    r2   r^   z&ITVIE._get_subtitles.<locals>.<lambda>|   s    AjM'4J;4W r4   Hrefenr%   )nextreversedlistitemsrV   r   
isinstancedictr   get
setdefaultappend)r1   rS   variantsios_playlist_urlrM   argskwargs	subtitlesplatform_tag_subsfeatureset_subssubs_playlistsubssubhrefs                 r2   _get_subtitleszITVIE._get_subtitleso   s    	 .2I.6tHNN<L7M.NI 	.*?  NN*G5F_d + fM=*WY]^dbdD E!#t,"3776?3$$T2.55udmDE r4   c                    | j                  |      }| j                  ||      }t        | j                  d|d            }| j	                  t        |d t              xs d|d      }t        d t        t        |j                                     D        d      \  }}|r|st        d	d
|      |j                  d      xs |d   }| j                  |d         }	| j                  |||	||      }
t        |
d t              xs i }|j                  d      }g }|j                  d      xs g D ]g  }|j                  d      }|s|r||z   }t!        |      }|dk(  r'|j#                  | j%                  ||dddd             U|j'                  d|i       i | j)                  ||i       }|s| j	                  | j                  t*        |ddd      |d      }|rv|j                  d      dk(  rb|j                  d      xs g D ]J  }|j                  d       xs i }|j                  d      d!k(  s-d"|d#<   | j-                  ||d      xs i } n g }t        |d$ t              }|rJ|j#                  |j/                  d%d&d'd(d)*      d%d&d+t1        t3        |      t5        |            d,d-g       | j7                  d.d/g|d       }|r|j'                  d|i       | j9                  |       t;        || j7                  d0d1g|      || j=                  ||||	      t?        |j                  d2            tA        tC        d3|            |d4|      S )5Nz(?s)(<[^>]+id="video"[^>]*>)r'   c                     | d   S )Nzdata-video-variantsr[   r\   s    r2   r^   z%ITVIE._real_extract.<locals>.<lambda>   s    a(=&> r4   z{}Frd   c              3   v   K   | ]1  \  }}|D ]'  }t        t        |d        xs g       ddhk(  r||f ) 3 yw)c                     | d d S rZ   r[   r\   s    r2   r^   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>   s    !BQ% r4   aeshlsN)setr   r_   s       r2   rb   z&ITVIE._real_extract.<locals>.<genexpr>   sU      S*{alSS]GJ8>B?E5>Q J' S' Ss   79rc   zNo downloads availableT)expectedrS   zdata-video-playlistzdata-video-idzdata-video-hmacc                     | d   d   S )Nrf   rg   r[   r\   s    r2   r^   z%ITVIE._real_extract.<locals>.<lambda>   s    Qz]75K r4   Base
MediaFilesri   m3u8r   m3u8_nativer   )entry_protocolm3u8_idrN   r%   )defaultzJSON-LDjson_ld)groupz@typeBreadcrumbListzitemListElement:zitem:	TVEpisodezhttp://schema.orgz@contextc                     | d   S )Nzdata-video-posterframer[   r\   s    r2   r^   z%ITVIE._real_extract.<locals>.<lambda>   s    !4L2M r4   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   formatsrx   durationr   
thumbnails)"	_match_id_download_webpager   _search_regex_parse_jsonr   r   rk   rl   rm   rn   r   rq   r3   rV   rp   r
   extend_extract_m3u8_formatsrs   _search_json_ldr   _json_ldformatr   r   r   _html_search_meta_remove_duplicate_formatsr   extract_subtitlesr   r	   r   )r1   r%   rS   webpager'   rt   platform_tag_videofeatureset_videoru   rM   ios_playlist
video_dataios_base_urlr   
media_filer~   r   infor   ileitemr   thumbnail_urls                          r2   _real_extractzITVIE._real_extract   s   >>#&((h7#D$6$6+Wh%@ A##F>
KStE $ #
 04S.6tHNN<L7M.NS 	0,,
 ")9 !9DS[\\!::&;<W@W,,V4E-FG~~&1CEUW \+KTRXVX
!~~f-%>>,7=2 	J>>&)D#d*%Cf}t99(E-!  :  0 1 4  	 ##GXr#B&&t'9'9GY (: (!"*% ' 9G 7;;w/3CC#KK(:;Ar C777+1rDxx(K7+>Z(#}}T85}IOR 
(MzZ$++$tSWX]d+e 
 x6]8ST 	  ..
O/Lg_c.d}  	&&z2++Z,I7S//(DTV]^&z~~j'AB%&:;SU\&]^$
  	r4   N)T)
__name__
__module____qualname__
_VALID_URL_GEO_COUNTRIES_TESTSr3   rV   r   r   r[   r4   r2   r   r      s    NJVN:'AO	
 T
" LEA.O	
 T
$ I T KQ,F\,7<.Qr4   r   c                   >    e Zd ZdZdddddddd	d
dddgZdZd Zy)	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                   
 | j                  |      }| j                  ||      }t        | j                  ||      d       xs g }g }|D ]  
t	        
fddD              s
d   d   }
d   d   }
d   d   }|j                  | j                  t        | j                  |||fz  g d|d	      t        j                         |
              | j                  |d      }	| j                  |||	      S )Nc                 $    | d   d   d   d   d   S )Nprops	pagePropsarticlebodycontentr[   r\   s    r2   r^   z)ITVBTCCIE._real_extract.<locals>.<lambda>   s    aj-i8@K r4   c              3   L   K   | ]  }d    j                  |      dk(    yw)rL   
BrightcoveN)rq   )r`   attrvideos     r2   rb   z*ITVBTCCIE._real_extract.<locals>.<genexpr>   s%     \4uV}((.,>\s   !$)r=   r?   rL   r   	accountIdplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)geo_ip_blocksreferrer)ierS   Frd   )r   r   r   _search_nextjs_dataanyrs   
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   ie_key_og_search_titleplaylist_result)r1   r%   playlist_idr   json_mapentriesrS   
account_id	player_idr   r   s             @r2   r   zITVBTCCIE._real_extract   s(   nnS)((k:$$Wk:KM SPR 	  	AE\K[\\V}T*Hv{3Jfj1INN4??D88J	S[;\\& !$_  #))+h + 	@ 	A	A" %%gU%;##G[%@@r4   N)r   r   r   r   r   r   r   r[   r4   r2   r   r      sP    YJX9=
  Ca;
 F bAr4   r   )rP   commonr   
brightcover   compatr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r4   r2   <module>r      sB     ! '    $~M ~B0A 0Ar4   