Ë
    š„j *  ã                   ó    — 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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Ústr_or_noneÚ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)Úselfr0   s     úK/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/itv.pyÚ_generate_api_headerszITVIE._generate_api_headersJ   s1   € ÜØ@Ø.Ø—J‘J“Lñ
ð ×(Ñ(Ó*ó	,ð 	,ó    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)r3   Úvideo_idÚplaylist_urlrO   Úplatform_tagrH   rP   s          r4   Ú	_call_apizITVIE._call_apiQ   s‰   € Ø×"Ñ"Ø˜(¬¯©à!#Ø$&Øñð %-Ø à ,Ø#(Ø )ññð  %Ø#ñð  *Ø)ñ#ð $0ñ(ñ'5ó *÷4 ‰v‹x °ð7 #ó 7ð 	7r6   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    r4   ú<lambda>z0ITVIE._get_subtitles.<locals>.<genexpr>.<lambda>v   s
   € ¨a°©d€ r6   zoutband-webvttN)r   ©Ú.0rW   ÚfeaturesetsrH   s       r4   ú	<genexpr>z'ITVIE._get_subtitles.<locals>.<genexpr>t   sH   è ø€ ò IÙ*�˜{ÐalòIØS]Ü˜
¡NÓ3Ð7GÒGð ˜JÔ'ð IÐ'ñ Iùs   ‚(*©NNF©rP   c                 ó   — | d   d   d   S )NÚPlaylistÚVideoÚ	Subtitlesr]   r^   s    r4   r`   z&ITVIE._get_subtitles.<locals>.<lambda>|   s   € °A°j±MÀ'Ñ4JÈ;Ñ4W€ r6   ÚHrefÚenr'   )ÚnextÚreversedÚlistÚitemsrX   r   Ú
isinstanceÚdictr   ÚgetÚ
setdefaultÚappend)r3   rU   ÚvariantsÚios_playlist_urlrO   ÚargsÚkwargsÚ	subtitlesÚplatform_tag_subsÚfeatureset_subsÚsubs_playlistÚsubsÚsubÚhrefs                 r4   Ú_get_subtitleszITVIE._get_subtitleso   sÜ   € Øˆ	ô .2ñIÜ.6´t¸H¿N¹NÓ<LÓ7MÓ.NôIð ó	.Ñ*Ð˜?ñ ¡Ø ŸN™NØÐ*¨GÐ5FÈÐ_dð +ó fˆMä˜=Ñ*WÔY]Ó^ÒdÐbdˆDØò E�Ü! #¤tÔ,ØÜ" 3§7¡7¨6£?Ó3�ÙØØ×$Ñ$ T¨2Ó.×5Ñ5°u¸d°mÕDðEð Ðr6   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    r4   r`   z%ITVIE._real_extract.<locals>.<lambda>Œ   s   €  aÐ(=Ñ&>€ r6   z{}Frf   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    r4   r`   z/ITVIE._real_extract.<locals>.<genexpr>.<lambda>“   s   € °!°B°Q°%€ r6   ÚaesÚhlsN)Úsetr   ra   s       r4   rd   z&ITVIE._real_extract.<locals>.<genexpr>‘   sU   è ø€ ò SÙ*�˜{ÐalòSØS]Ü”G˜J©Ó8Ò>¸BÓ?ÀEÈ5À>ÒQð ˜JÔ'ð SÐ'ñ Sùs   ‚79re   zNo downloads availableT)ÚexpectedrU   zdata-video-playlistzdata-video-idzdata-video-hmacc                 ó   — | d   d   S )Nrh   ri   r]   r^   s    r4   r`   z%ITVIE._real_extract.<locals>.<lambda>�   s   € °Q°z±]À7Ñ5K€ r6   ÚBaseÚ
MediaFilesrk   Úm3u8r   Úm3u8_nativer‡   )Úentry_protocolÚm3u8_idrP   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    r4   r`   z%ITVIE._real_extract.<locals>.<lambda>½   s   € °!Ð4LÑ2M€ r6   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    Úformatsrz   Údurationr!   Ú
thumbnails)"Ú	_match_idÚ_download_webpager   Ú_search_regexÚ_parse_jsonr   Ústrrm   rn   ro   rp   r   rs   r5   rX   rr   r   ÚextendÚ_extract_m3u8_formatsru   Ú_search_json_ldr   Ú_json_ldÚformatr   r	   r   Ú_html_search_metaÚ_remove_duplicate_formatsr   Úextract_subtitlesr   r
   r   )r3   r'   rU   Úwebpager)   rv   Úplatform_tag_videoÚfeatureset_videorw   rO   Úios_playlistÚ
video_dataÚios_base_urlr¡   Ú
media_filer€   r   Úinfor’   ÚileÚitemr£   Úthumbnail_urls                          r4   Ú_real_extractzITVIE._real_extract†   sÃ  € Ø—>‘> #Ó&ˆØ×(Ñ(¨¨hÓ7ˆÜ# D×$6Ñ$6Ø+¨W°hó%@ó Aˆà×#Ñ#Ü�FÑ>ÄÓDÒLÈØ˜Eð $ó #ˆô
 04ñSÜ.6´t¸H¿N¹NÓ<LÓ7MÓ.NôSð ó	0Ñ,ÐÐ,ñ
 "Ñ)9Ü Ð!9ÀDÐS[Ô\Ð\à!Ÿ:™:Ð&;Ó<ÒWÀÀÑ@WÐØ×,Ñ,¨VÐ4EÑ-FÓGˆØ—~‘~ØÐ&¨Ð1CÐEUóWˆô ˜\Ñ+KÌTÓRÒXÐVXˆ
Ø!—~‘~ fÓ-ˆØˆØ%Ÿ>™>¨,Ó7Ò=¸2ò 	ˆJØ—>‘> &Ó)ˆDÙØÙØ# dÑ*�Ü Ó%ˆCØ�fŠ}Ø—‘˜t×9Ñ9Ø˜( E¸-Ø!¨ð  :ó  0õ 1ð —‘Ø˜4ð õ ð	ð ×#Ñ# G¨X¸rÐ#ÓBˆÙØ×&Ñ& t×'9Ñ'9Ü˜G Y°Øð (:ó (!à"*°%ð 'ó 9ˆGñ ˜7Ÿ;™; wÓ/Ð3CÒCØ#ŸK™KÐ(:Ó;ÒA¸rò �CØŸ7™7 7Ó+Ò1¨r�DØ—x‘x Ó(¨KÓ7Ø+>˜˜ZÑ(Ø#Ÿ}™}¨T°8À5˜}ÓIÒOÈR˜Ùðð ˆ
Ü Ñ(MÌsÓSˆÙØ×ÑØ$×+Ñ+°$¸tÈSÐWXÐ]dÐ+ÓeØØñ ô
 œx¨Ó6¼À]Ó8SÓTØ ñð	ô ð ×.Ñ.°
¸OÐ/LÈgÐ_cÐ.ÓdˆÙØ×ÑØ�}ðô ð 	×&Ñ& zÔ2äØØ×+Ñ+¨Z¸Ð,IÈ7ÓSØØ×/Ñ/°¸(ÐDTÐV]Ó^Ü& z§~¡~°jÓ'AÓBÜ%Ô&:Ð;SÐU\Ó&]Ó^Ø$ñ
ð óð 	r6   N)T)
Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLÚ_GEO_COUNTRIESÚ_TESTSr5   rX   r�   r¼   r]   r6   r4   r   r      s»   „ ØN€JØ�V€Nà:àØØ'ØAØØØØOñ	
ð ˜Tð
ñð" LàØØEØAØ.ØØØOñ	
ð ˜Tð
ñð$ IØñð TØñð KØñðQ,€Fò\,ó7ò<ó.Qr6   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Œt        ‰
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    r4   r`   z)ITVBTCCIE._real_extract.<locals>.<lambda>õ   s   € �a˜‘j Ñ-¨iÑ8¸Ñ@ÀÑK€ r6   c              3   ó@   •K  — | ]  }t        ‰d |f«      dk(  –— Œ y­w)rN   Ú
BrightcoveNr   )rb   ÚattrÚvideos     €r4   rd   z*ITVBTCCIE._real_extract.<locals>.<genexpr>ù   s!   øè ø€ ÒhÈt”| E¨F°D¨>Ó:¸lÕJÑhùs   ƒ)r?   rA   rN   r   Ú	accountIdÚplayerId)z193.113.0.0/16z54.36.162.0/23z159.65.16.0/21)Úgeo_ip_blocksÚreferrer)ÚierU   Frf   )r¤   r¥   r   Ú_search_nextjs_dataÚanyr   ru   Ú
url_resultr   ÚBRIGHTCOVE_URL_TEMPLATEr   Úie_keyÚ_og_search_titleÚplaylist_result)r3   r'   Úplaylist_idr±   Újson_mapÚentriesrU   Ú
account_idÚ	player_idr    rÒ   s             @r4   r¼   zITVBTCCIE._real_extractî   s-  ø€ Ø—n‘n SÓ)ˆà×(Ñ(¨¨kÓ:ˆäØ×$Ñ$ W¨kÓ:ÙKóMò SàPRð 	ð ˆØò 	AˆEÜÓhÐWgÔhÔhØÜ" 5¨¡=°Ñ#6Ó7ˆHØ˜v™ {Ñ3ˆJØ˜f™ jÑ1ˆIØ�N‰N˜4Ÿ?™?Ü˜D×8Ñ8¸JÈ	ÐS[Ð;\Ñ\ò&ð !$ñ_ó ô #×)Ñ)Ó+°hð +ó 	@õ 	Að	Að" ×%Ñ% g°UÐ%Ó;ˆà×#Ñ# G¨[¸%Ó@Ð@r6   N)r½   r¾   r¿   rÀ   rÂ   rÛ   r¼   r]   r6   r4   rÄ   rÄ   Ú   sP   „ ØY€JàXà9Ø=ñ
ð ñð CàaØ;ñ
ð ñð€Fð  bÐóAr6   rÄ   )rR   Ú
brightcover   Úcommonr   Úutilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Úutils.traversalr   r   rÄ   r]   r6   r4   ú<module>rè      sI   ðÛ å 'Ý !÷÷ ÷ ÷ ñ õ" +ô~ˆMô ~ôB1A�õ 1Ar6   