
    VGh)                         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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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     ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/itv.py_generate_api_headerszITVIE._generate_api_headersH   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)r0   video_idplaylist_urlrL   platform_tagrE   rM   s          r1   	_call_apizITVIE._call_apiO   s    ""(!#$& %-  ,#( )  %#  *)# $0('5 *4 vx7 # 7 	7r3   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    r1   <lambda>z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>t   s
    ad r3   zoutband-webvttN)r   .0rT   featuresetsrE   s       r1   	<genexpr>z'ITVIE._get_subtitles.<locals>.<genexpr>r   sH      I*{alIS]
N37GG J' I' Is   (*NNFrM   c                     | d   d   d   S )NPlaylistVideo	SubtitlesrZ   r[   s    r1   r]   z&ITVIE._get_subtitles.<locals>.<lambda>z   s    AjM'4J;4W r3   Hrefenr$   )nextreversedlistitemsrU   r   
isinstancedictr   get
setdefaultappend)r0   rR   variantsios_playlist_urlrL   argskwargs	subtitlesplatform_tag_subsfeatureset_subssubs_playlistsubssubhrefs                 r1   _get_subtitleszITVIE._get_subtitlesm   s    	 .2I.6tHNN<L7M.NI 	.*?  NN*G5F_d + fM=*WY]^dbdD E!#t,"3776?3$$T2.55udmDE r3   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-variantsrZ   r[   s    r1   r]   z%ITVIE._real_extract.<locals>.<lambda>   s    a(=&> r3   z{}Frc   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 rY   rZ   r[   s    r1   r]   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>   s    !BQ% r3   aeshlsN)setr   r^   s       r1   ra   z&ITVIE._real_extract.<locals>.<genexpr>   sU      S*{alSS]GJ8>B?E5>Q J' S' Ss   79rb   zNo downloads availableT)expectedrR   zdata-video-playlistzdata-video-idzdata-video-hmacc                     | d   d   S )Nre   rf   rZ   r[   s    r1   r]   z%ITVIE._real_extract.<locals>.<lambda>   s    Qz]75K r3   Base
MediaFilesrh   m3u8r   m3u8_nativer   )entry_protocolm3u8_idrM   r$   )defaultzJSON-LDjson_ld)groupz@typeBreadcrumbListzitemListElement:zitem:	TVEpisodezhttp://schema.orgz@contextc                     | d   S )Nzdata-video-posterframerZ   r[   s    r1   r]   z%ITVIE._real_extract.<locals>.<lambda>   s    !4L2M r3   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   formatsrw   durationr   
thumbnails)"	_match_id_download_webpager   _search_regex_parse_jsonr   strrj   rk   rl   rm   r   rp   r2   rU   ro   r   extend_extract_m3u8_formatsrr   _search_json_ldr   _json_ldformatr   r	   r   _html_search_meta_remove_duplicate_formatsr   extract_subtitlesr   r
   r   )r0   r$   rR   webpager&   rs   platform_tag_videofeatureset_videort   rL   ios_playlist
video_dataios_base_urlr   
media_filer}   r   infor   ileitemr   thumbnail_urls                          r1   _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\&]^$
  	r3   N)T)
__name__
__module____qualname__
_VALID_URL_GEO_COUNTRIES_TESTSr2   rU   r~   r   rZ   r3   r1   r   r      s    NJVN:'AO	
 T
" LEA.O	
 T
$ I T KQ,F\,7<.Qr3   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contentrZ   r[   s    r1   r]   z)ITVBTCCIE._real_extract.<locals>.<lambda>   s    aj-i8@K r3   c              3   L   K   | ]  }d    j                  |      dk(    yw)rK   
BrightcoveN)rp   )r_   attrvideos     r1   ra   z*ITVBTCCIE._real_extract.<locals>.<genexpr>   s%     \4uV}((.,>\s   !$)r<   r>   rK   r   	accountIdplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)geo_ip_blocksreferrer)ierR   Frc   )r   r   r   _search_nextjs_dataanyrr   
url_resultr   BRIGHTCOVE_URL_TEMPLATEr   ie_key_og_search_titleplaylist_result)r0   r$   playlist_idr   json_mapentriesrR   
account_id	player_idr   r   s             @r1   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[%@@r3   N)r   r   r   r   r   r   r   rZ   r3   r1   r   r      sP    YJX9=
  Ca;
 F bAr3   r   )rO   
brightcover   commonr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r3   r1   <module>r      s?     ' !   $~M ~B0A 0Ar3   