
    V|h*                         S SK r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJr  SSKJr   " S S	\5      r " S
 S\5      rg)    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                       \ rS rSrSrS/rSSSSSS	S
S
SS.SS0S.SSSSSSSSSS.SS0S.SSS.SSS.SSS./rS rS"S jrS r	S r
S rg!)#ITVIE   z: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    [        SSUR                  5       S.U R                  5       5      $ )Nz(application/vnd.itv.vod.playlist.v2+jsonzapplication/json)AcceptzContent-Typehmac)r   uppergeo_verification_headers)selfr0   s     N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/itv.py_generate_api_headersITVIE._generate_api_headersI   s1    @.JJL
 ((*	, 	,    c                     U R                  X![        R                  " S/ SS.SSSSSS.S	.S
SS.UUS.US.S.5      R                  5       X6S9$ )N )	itvUserIdentitlementstokenSafari5z
Windows NTz6.1desktop)nameversiontype)manufacturermodelosz4.1browser)rA   r   )minmax)
featuresetplatformTag)userdeviceclientvariantAvailability)dataheadersfatal)_download_jsonjsondumpsencode)r3   video_idplaylist_urlrP   platform_tagrI   rQ   s          r4   	_call_apiITVIE._call_apiP   s    ""!#$& %-  ,#( )  %#  *)# $0('5 *4 vx7 # 7 	7r7   c           	         0 n[        S [        [        UR                  5       5      5       5       S5      u  pU(       a  U	(       a  U R	                  XXHU	SS9n
[        U
S [        5      =(       d    / nU H`  n[        U[        5      (       d  M  [        UR                  S5      5      nU(       d  M=  UR                  S/ 5      R                  SU05        Mb     U$ )	Nc              3   f   #    U  H'  u  pU  H  n[        US  5      S:X  d  M  X4v   M     M)     g7f)c                     U S   $ Nr    xs    r4   <lambda>0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>u   s    adr7   zoutband-webvttN)r   .0rX   featuresetsrI   s       r4   	<genexpr>'ITVIE._get_subtitles.<locals>.<genexpr>s   s>      I.N*alS]
N37GG (l'al (.Ns   11NNFrQ   c                     U S   S   S   $ )NPlaylistVideo	Subtitlesr_   r`   s    r4   rb   &ITVIE._get_subtitles.<locals>.<lambda>{   s    AjM'4J;4Wr7   Hrefenr'   )nextreversedlistitemsrY   r   
isinstancedictr   get
setdefaultappend)r3   rV   variantsios_playlist_urlrP   argskwargs	subtitlesplatform_tag_subsfeatureset_subssubs_playlistsubssubhrefs                 r4   _get_subtitlesITVIE._get_subtitlesn   s    	 .2I.6tHNN<L7M.NI 	.*  NNG_d + fM=*WY]^dbdD!#t,,"3776?3$$T2.55udmD  r7   c                    U R                  U5      nU R                  X5      n[        U R                  SUS5      5      nU R	                  [        US [        5      =(       d    SUSS9n[        S [        [        UR                  5       5      5       5       S5      u  pgU(       a  U(       d  [        S	S
US9eUR                  S5      =(       d    US   nU R                  US   5      n	U R                  X(XU5      n
[        U
S [        5      =(       d    0 nUR                  S5      n/ nUR                  S5      =(       d    /  Hp  nUR                  S5      nU(       d  M  U(       a  X-   n[!        U5      nUS:X  a$  UR#                  U R%                  XSSSSS95        M]  UR'                  SU05        Mr     U R)                  X20 S9nU(       d  U R	                  U R                  [*        USSSS9USS9nU(       a  UR                  S5      S:X  aq  UR                  S5      =(       d    /  HS  nUR                  S 5      =(       d    0 nUR                  S5      S!:X  d  M4  S"US#'   U R-                  UUSS9=(       d    0 n  O   / n[        US$ [        5      nU(       aG  UR#                  UR/                  S%S&S'S(S)S*9S%S&S+.[1        [3        U5      [5        U5      5      S,S-./5        U R7                  S.S//US S9nU(       a  UR'                  SU05        U R9                  U5        [;        UU R7                  S0S1/U5      UU R=                  X%X5      [?        UR                  S25      5      [A        [C        S3U5      5      US4.U5      $ )5Nz(?s)(<[^>]+id="video"[^>]*>)r)   c                     U S   $ )Nzdata-video-variantsr_   r`   s    r4   rb   %ITVIE._real_extract.<locals>.<lambda>   s
    a(=&>r7   z{}Frj   c              3      #    U  H;  u  pU  H/  n[        [        US  5      =(       d    / 5      SS1:X  d  M*  X4v   M1     M=     g7f)c                     U S S $ r^   r_   r`   s    r4   rb   /ITVIE._real_extract.<locals>.<genexpr>.<lambda>   s
    !BQ%r7   aeshlsN)setr   rd   s       r4   rg   &ITVIE._real_extract.<locals>.<genexpr>   sK      S.N*alS]GJ8>B?E5>Q (l'al (.Ns
   1AAri   zNo downloads availableT)expectedrV   zdata-video-playlistzdata-video-idzdata-video-hmacc                     U S   S   $ )Nrl   rm   r_   r`   s    r4   rb   r      s    Qz]75Kr7   Base
MediaFilesrp   m3u8r   m3u8_nativer   )entry_protocolm3u8_idrQ   r'   )defaultzJSON-LDjson_ld)groupz@typeBreadcrumbListzitemListElement:zitem:	TVEpisodezhttp://schema.orgz@contextc                     U S   $ )Nzdata-video-posterframer_   r`   s    r4   rb   r      s
    !4L2Mr7   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    formatsr   durationr!   
thumbnails)"	_match_id_download_webpager   _search_regex_parse_jsonr   strrr   rs   rt   ru   r   rx   r5   rY   rw   r   extend_extract_m3u8_formatsrz   _search_json_ldr   _json_ldformatr   r	   r   _html_search_meta_remove_duplicate_formatsr   extract_subtitlesr   r
   r   )r3   r'   rV   webpager)   r{   platform_tag_videofeatureset_videor|   rP   ios_playlist
video_dataios_base_urlr   
media_filer   r   infor   ileitemr   thumbnail_urls                          r4   _real_extractITVIE._real_extract   s   >>#&((7#D$6$6+Wh%@ A##F>DLE $ #
 04S.6tHNN<L7M.NS 	0,
 ")9 !9DS[\\!::&;<W@W,,V4E-FG~~EUW \+KTRXVX
!~~f-%>>,7=2=J>>&)D#*%Cf}t99E-!  :  0 1 4   > ##Gr#B&&t'9'9GY (: (!"*% ' 9G 7;;w/3CC#KK(:;ArAC777+1rDxx(K7+>Z(#}}T85}IOR B 
(MsS$++$tSWX]d+e 
 x6]8ST 	  ..
O/Lg_c.d}  	&&z2++Z,I7S//DT^&z~~j'AB%&:;SU\&]^$
  	r7   r_   N)T)__name__
__module____qualname____firstlineno__
_VALID_URL_GEO_COUNTRIES_TESTSr5   rY   r   r   __static_attributes__r_   r7   r4   r   r      s    NJVN:'AO	
 T
" LEA.O	
 T
$ I T KQ,F\,7<.Qr7   r   c                   F    \ rS rSrSrSSSS.SS.S	S
SS.SS./rSrS rSrg)	ITVBTCCIE   zEhttps?://(?: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                   ^
 U R                  U5      nU R                  X5      n[        U R                  X25      S 5      =(       d    / n/ nU H  m
[	        U
4S jS 5       5      (       d  M  T
S   S   nT
S   S   nT
S   S   nUR                  U R                  [        U R                  XxU4-  / SQUS	.5      [        R                  " 5       US
95        M     U R                  USS9n	U R                  XRU	5      $ )Nc                 $    U S   S   S   S   S   $ )Nprops	pagePropsarticlebodycontentr_   r`   s    r4   rb   )ITVBTCCIE._real_extract.<locals>.<lambda>   s    aj-i8@Kr7   c              3   F   >#    U  H  n[        TS U45      S:H  v   M     g7f)rO   
BrightcoveNr   )re   attrvideos     r4   rg   *ITVBTCCIE._real_extract.<locals>.<genexpr>   s#     hWgt|EFD>:lJWgs   !)r@   rB   rO   r   	accountIdplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)geo_ip_blocksreferrer)ierV   Frj   )r   r   r   _search_nextjs_dataanyrz   
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   ie_key_og_search_titleplaylist_result)r3   r'   playlist_idr   json_mapentriesrV   
account_id	player_idr    r   s             @r4   r   ITVBTCCIE._real_extract   s   nnS)((:$$W:KM SPR 	 EhWghhhV}T*Hv{3Jfj1INN4??D88JS[;\\& !$_  #))+h + 	@ 	A " %%gU%;##G%@@r7   r_   N)	r   r   r   r   r   r   r   r   r   r_   r7   r4   r   r      sP    YJX9=
  Ca;
 F  bAr7   r   )rS   
brightcover   commonr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r_   r7   r4   <module>r      sD     ' !     +~M ~B1A 1Ar7   