
    uki*                         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	e      Z G d
 de      Zy)    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                       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     O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/itv.py_generate_api_headerszITVIE._generate_api_headersI   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)r2   video_idplaylist_urlrN   platform_tagrG   rO   s          r3   	_call_apizITVIE._call_apiP   s    ""(!#$& %-  ,#( )  %#  *)# $0('5 *4 vx7 # 7 	7r5   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    r3   <lambda>z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>u   s
    ad r5   zoutband-webvttN)r   .0rV   featuresetsrG   s       r3   	<genexpr>z'ITVIE._get_subtitles.<locals>.<genexpr>s   sH      I*{alIS]
N37GG J' I' Is   (*NNFrO   c                     | d   d   d   S )NPlaylistVideo	Subtitlesr\   r]   s    r3   r_   z&ITVIE._get_subtitles.<locals>.<lambda>{   s    AjM'4J;4W r5   Hrefenr&   )nextreversedlistitemsrW   r   
isinstancedictr   get
setdefaultappend)r2   rT   variantsios_playlist_urlrN   argskwargs	subtitlesplatform_tag_subsfeatureset_subssubs_playlistsubssubhrefs                 r3   _get_subtitleszITVIE._get_subtitlesn   s    	 .2I.6tHNN<L7M.NI 	.*?  NN*G5F_d + fM=*WY]^dbdD E!#t,"3776?3$$T2.55udmDE r5   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    r3   r_   z%ITVIE._real_extract.<locals>.<lambda>   s    a(=&> r5   z{}Fre   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 r[   r\   r]   s    r3   r_   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>   s    !BQ% r5   aeshlsN)setr   r`   s       r3   rc   z&ITVIE._real_extract.<locals>.<genexpr>   sU      S*{alSS]GJ8>B?E5>Q J' S' Ss   79rd   zNo downloads availableT)expectedrT   zdata-video-playlistzdata-video-idzdata-video-hmacc                     | d   d   S )Nrg   rh   r\   r]   s    r3   r_   z%ITVIE._real_extract.<locals>.<lambda>   s    Qz]75K r5   Base
MediaFilesrj   m3u8r   m3u8_nativer   )entry_protocolm3u8_idrO   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    r3   r_   z%ITVIE._real_extract.<locals>.<lambda>   s    !4L2M r5   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   formatsry   durationr    
thumbnails)"	_match_id_download_webpager   _search_regex_parse_jsonr   strrl   rm   rn   ro   r   rr   r4   rW   rq   r   extend_extract_m3u8_formatsrt   _search_json_ldr   _json_ldformatr   r	   r   _html_search_meta_remove_duplicate_formatsr   extract_subtitlesr   r
   r   )r2   r&   rT   webpager(   ru   platform_tag_videofeatureset_videorv   rN   ios_playlist
video_dataios_base_urlr   
media_filer   r   infor   ileitemr   thumbnail_urls                          r3   _real_extractzITVIE._real_extract   s   >>#&((h7#D$6$6+Wh%@ A##F>DL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 
(MsS$++$tSWX]d+e 
 x6]8ST 	  ..
O/Lg_c.d}  	&&z2++Z,I7S//(DTV]^&z~~j'AB%&:;SU\&]^$
  	r5   N)T)
__name__
__module____qualname__
_VALID_URL_GEO_COUNTRIES_TESTSr4   rW   r   r   r\   r5   r3   r   r      s    NJVN:'AO	
 T
" LEA.O	
 T
$ I T KQ,F\,7<.Qr5   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    r3   r_   z)ITVBTCCIE._real_extract.<locals>.<lambda>   s    aj-i8@K r5   c              3   @   K   | ]  }t        d |f      dk(    yw)rM   
BrightcoveNr   )ra   attrvideos     r3   rc   z*ITVBTCCIE._real_extract.<locals>.<genexpr>   s!     ht|EFD>:lJhs   )r>   r@   rM   r   	accountIdplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)geo_ip_blocksreferrer)ierT   Fre   )r   r   r   _search_nextjs_dataanyrt   
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   ie_key_og_search_titleplaylist_result)r2   r&   playlist_idr   json_mapentriesrT   
account_id	player_idr   r   s             @r3   r   zITVBTCCIE._real_extract   s(   nnS)((k:$$Wk:KM SPR 	  	AEhWghhV}T*Hv{3Jfj1INN4??D88J	S[;\\& !$_  #))+h + 	@ 	A	A" %%gU%;##G[%@@r5   N)r   r   r   r   r   r   r   r\   r5   r3   r   r      sP    YJX9=
  Ca;
 F  bAr5   r   )rQ   
brightcover   commonr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r\   r5   r3   <module>r      sD     ' !     +~M ~B1A 1Ar5   