Ë
    š„jÞ@  ã                   ó�   — d dl 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 ddlmZmZ  G d„ de«      Z G d	„ d
e«      Zy)é    Né   )ÚStreaksBaseIEé   )ÚExtractorErrorÚGeoRestrictedErrorÚ
clean_htmlÚint_or_noneÚjoin_nonemptyÚmake_archive_idÚsmuggle_urlÚstr_or_noneÚstrip_or_noneÚtime_secondsÚunified_timestampÚupdate_url_queryÚurl_or_none)ÚrequireÚtraverse_objc            	       ó’  — e Zd ZdZdgZdZdi dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&“d'd(d)d*gd+d,d-œ¥d.œdi dd
“dd“dd“dd“dd“dd/“dd“dd0“dd“d1g “dd“dd“dd“dd2“d!d3“d4d(“d5d)“d+d,d6œ¥d7d8d9d:giiid;œd<d=d>œd?d=d>œd@dAdBdCœdDdEœdFd+ddCœdGdHœdId=d>œgZdJZdKdLdMdNœZi Z	i Z
dO„ ZdTdQ„ZdR„ ZdS„ ZyP)UÚTVerIEzbhttps?://(?:www\.)?tver\.jp/(?:(?P<type>lp|corner|series|episodes?|feature)/)+(?P<id>[a-zA-Z0-9]+)ÚJPFz#https://tver.jp/episodes/epc1hdugbkÚidÚ
epc1hdugbkÚextÚmp4Ú
display_idz(ref:baeebeac-a2a6-4dbf-9eb3-c40d59b40068ÚtitleuR   ç¥žå›žã� ã�‘è¦‹ã�›ã�¾ã�™ï¼� #2 å£®çƒˆï¼�è»Šå¤§é¨Žé¦¬æˆ¦ï¼ˆæœ¨æ›œã‚¹ãƒšã‚·ãƒ£ãƒ«ï¼‰Ú	alt_titleu\   ç¥žå›žã� ã�‘è¦‹ã�›ã�¾ã�™ï¼� #2 å£®çƒˆï¼�è»Šå¤§é¨Žé¦¬æˆ¦ï¼ˆæœ¨æ›œã‚¹ãƒšã‚·ãƒ£ãƒ«ï¼‰ æ—¥ãƒ†ãƒ¬Údescriptionz$md5:2726f742d5e3886edeaf72fb6d740fefÚuploader_idztver-ntvÚchannelu	   æ—¥ãƒ†ãƒ¬Údurationgj¼t“’@Ú	thumbnailzShttps://statics.tver.jp/images/content/thumbnail/episode/xlarge/epc1hdugbk.jpg?v=16Úseriesu   ç¥žå›žã� ã�‘è¦‹ã�›ã�¾ã�™ï¼�Úepisodeu6   #2 å£®çƒˆï¼�è»Šå¤§é¨Žé¦¬æˆ¦ï¼ˆæœ¨æ›œã‚¹ãƒšã‚·ãƒ£ãƒ«ï¼‰Úepisode_numberr   Ú	timestampi”¬€gÚupload_dateÚ20250110Úmodified_timestampix‰†gÚmodified_dateÚ20250114Únot_livei-obÚ20220502z6brightcovenew ref:baeebeac-a2a6-4dbf-9eb3-c40d59b40068Ú
sru35hwdd2Ú
ss2lcn4af6)Úlive_statusÚrelease_timestampÚrelease_dateÚ_old_archive_idsÚ	series_idÚ	season_id©ÚurlÚ	info_dictÚ4394098882001g–C‹lg’@Útagsis0nbÚ20220501r2   r3   )r5   r6   Úextractor_argsÚtverÚbackendÚ
brightcove)r8   r9   Úparamszhttps://tver.jp/corner/f0103888T)r8   Úonly_matchingzhttps://tver.jp/lp/f0033031z!https://tver.jp/series/srtxft431vÚ
srtxft431vu   å��æŽ¢å�µã‚³ãƒŠãƒ³)r   r   é   )r8   r9   Úplaylist_mincountz!https://tver.jp/series/sru35hwdd2é   )r8   r9   Úplaylist_countz!https://tver.jp/series/srkq2shp9dzFhttp://players.brightcove.net/%s/default_default/index.html?videoId=%sÚwebúhttps://tver.jpúhttps://tver.jp/)zx-tver-platform-typeÚOriginÚRefererc                 óŒ   — | j                  dd dd¬«      }t        |ddddœf«      | _        | j                  d	d d
d«      | _        y )NzAhttps://platform-api.tver.jp/v2/api/platform_users/browser/createzCreating sessions   device_type=pc)ÚdataÚresultÚplatform_uidÚplatform_token)rP   rQ   z2https://player.tver.jp/player/streaks_info_v2.jsonzDownloading STREAKS API infoz#Unable to download STREAKS API info)Ú_download_jsonr   Ú_PLATFORM_QUERYÚ_STREAKS_API_INFO)ÚselfÚsession_infos     úL/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/tver.pyÚ_real_initializezTVerIE._real_initializep   sh   € Ø×*Ñ*ØOØÐ$Ð+<ð +ó >ˆô  ,¨L¸8Ø*Ø.ñF
ð ;ó  ˆÔð "&×!4Ñ!4Ø@À$Ø*Ð,Qó"SˆÕó    Nc           
      ón   — | j                  d|› �|||| j                  i | j                  ¥|xs i ¥¬«      S )Nz)https://platform-api.tver.jp/service/api/)ÚfatalÚheadersÚquery)rR   Ú_HEADERSrS   )rU   ÚpathÚvideo_idÚnoter[   r]   s         rW   Ú_call_platform_apizTVerIE._call_platform_api|   sP   € Ø×"Ñ"Ø7¸°vÐ>ÀÈ$Ø §¡ð 7Ø×&Ñ&ð7à’;˜Bð7ð #ó ð 	rY   c           
   #   ó  K  — | j                  d|› �|d| j                  ¬«      }t        |ddd„ ddt        hf«      D ]<  }| j	                  d	|› �|d
|› d�«      }t        |ddd„ ddt        hf«      E d {  –—†  Œ> y 7 Œ­w)Nz5https://service-api.tver.jp/api/v1/callSeriesSeasons/zDownloading seasons info)r\   rO   Úcontentsc                 ó   — |d   dk(  S )NÚtypeÚseason© ©Ú_Úvs     rW   ú<lambda>z6TVerIE._yield_episode_ids_for_series.<locals>.<lambda>‰   s   € À!ÀFÁ)ÈxÑBW€ rY   Úcontentr   zv1/callSeasonEpisodes/zDownloading season z episodes infoc                 ó   — |d   dk(  S )Nrf   r%   rh   ri   s     rW   rl   z6TVerIE._yield_episode_ids_for_series.<locals>.<lambda>�   s   € °1°V±9À	Ñ3I€ rY   )rR   r^   r   Ústrrb   )rU   r5   Úseasons_infor6   Úepisodes_infos        rW   Ú_yield_episode_ids_for_seriesz$TVerIE._yield_episode_ids_for_series„   sÆ   è ø€ Ø×*Ñ*ØCÀIÀ;ÐOØÐ1¸4¿=¹=ð +ó Jˆô &Ø˜x¨Ñ5WÐYbÐdhÔknÐjoÐpórò 	dˆIà ×3Ñ3Ø(¨¨Ð4°iÐCVÐW`ÐVaÐaoÐApórˆMä# MØ˜*Ñ&IÈ9ÐVZÔ]`Ð\að4có d÷ dñ dñ		dðdús   ‚A3A?Á5A=Á6A?c                 ó*  — | j                  |«      j                  dd«      \  }}| j                  ddg«      d   }|dvrt        d|› �d¬	«      ‚|d
k(  rT| j	                  d|› �|d«      }| j                  | j                  |«      |t        |ddddt        hf«      t        d„ ¬«      S |dk7  r6| j                  ||d¬«      }| j                  | j                  d|d«      «      }| j	                  d|› �|ddddi¬«      }t        |d«      xs i }t        |dt        hfd¬ «      }	| j                  d!|› d"�|d#d$|	id%d&i¬'«      }
t        |j!                  d«      «      }t        |j!                  d(«      «      }t#        ||d)¬*«      xs t        |
j!                  d«      «      }t        |j!                  d+«      «      }t        |j!                  d,«      «      }d-D ���cg c]   \  }}}|t%        d.|› d/|› d0�d$|	i«      ||d1œ‘Œ" }}}}|||t#        |||d)¬*«      ||d2œt        |
d3t        hfd4d5t&        hfd6t&        hfd7t        hfd8t        hfd9œ«      ¥}t        |
d:d;t        ht(        f«      }|r|j+                  «       sd<|› �}t        |
dd=t        hf«      }|r|j-                  d<«      sd<|› �}|d>k(  s|sw|d>k7  r| j/                  d?|¬@«       |st        dAd¬	«      ‚t        |
d:dBt        ht1        dCd¬	«      hf«      }i |¥dDt3        | j4                  ||fz  dE| j6                  i«      dFdGœ¥S |
d   dH   }t8        j:                  j=                  t?        dI¬J«      t8        j@                  jB                  «      jD                  dKz  xs dK}	 | jG                  ||dLd&| jH                  |   dM   dN|› �   dOœ«      }i |¥|¥||rtQ        dF|«      gdQœ¥S d dQœ¥S c c}}}w # tJ        $ r4}| jM                  |jN                  | j6                  d¬P«       i }Y d }~Œ\d }~ww xY w)RNr   rf   r?   Ústreaksr   )r@   rt   zInvalid backend value: T©Úexpectedr$   zv2/callSeries/zDownloading series inforO   rm   r   c                 ó   — d| › �S )Nzhttps://tver.jp/episodes/rh   )Úxs    rW   rl   z&TVerIE._real_extract.<locals>.<lambda>›   s   € Ð.GÈÀsÐ,K€ rY   )ÚieÚgetterÚepisodeszResolving to new URL)ra   )z-canonical"\s*href="(https?://tver\.jp/[^"]+)"z$&link=(https?://tver\.jp/[^?&]+)[?&]z	url regexzv1/callEpisode/zDownloading episode infoFÚrequire_dataz<mylist,later[epefy106ur],good[epefy106ur],resume[epefy106ur])r[   r]   )rO   r%   rm   ÚversionÚ5)Údefaultz(https://statics.tver.jp/content/episode/z.jsonzDownloading video infork   rL   rJ   )r]   r\   ÚseriesTitleú )ÚdelimÚproductionProviderNameÚbroadcastDateLabel))Úsmallià  i  )Úmediumi€  ih  )ÚlargeiÀ  i  )Úxlargei   iÐ  z9https://statics.tver.jp/images/content/thumbnail/episode/ú/z.jpg)r   r8   ÚwidthÚheight)r   r$   r%   r   r!   Ú
thumbnailsr   Ú
viewStatusÚstartAtÚnoÚseriesIDÚseasonID)r   r2   r&   r5   r6   Úvideo)Ú
videoRefIDÚvideoIDúref:r“   r@   z:No STREAKS ID found; falling back to Brightcove extraction)r`   z)Unable to extract brightcove reference IDÚ	accountIDzbrightcove account IDÚurl_transparentÚgeo_countriesÚBrightcoveNew)Ú_typer8   Úie_keyÚ	projectIDé	   )Úhoursé   rI   Úapi_keyÚkey0©rK   rL   zX-Streaks-Api-Key)Ú	countriesÚmetadata_available)r   r4   ))Ú_match_valid_urlÚgroupÚ_configuration_argr   rb   Úplaylist_from_matchesrr   r   ro   r   Ú_download_webpageÚ	_match_idÚ_search_regexr   rR   r   Úgetr
   r   r	   ÚanyÚ	isdecimalÚ
startswithÚreport_warningr   r   ÚBRIGHTCOVE_URL_TEMPLATEÚ_GEO_COUNTRIESÚdtÚdatetimeÚfromtimestampr   ÚtimezoneÚutcÚmonthÚ_extract_from_streaks_apirT   r   Úraise_geo_restrictedÚorig_msgr   )rU   r8   r`   Ú
video_typer?   Úseries_infoÚwebpageÚepisode_infoÚepisode_contentr}   Ú
video_infor%   r$   r   ÚproviderÚonair_labelÚqualityrŠ   r‹   rŒ   ÚmetadataÚbrightcove_idÚ
streaks_idÚ
account_idÚ
project_idÚkey_idxÚstreaks_infoÚes                               rW   Ú_real_extractzTVerIE._real_extract�   s+  € Ø#×4Ñ4°SÓ9×?Ñ?ÀÀfÓMÑˆ�*Ø×)Ñ)¨)°i°[ÓAÀ!ÑDˆØÐ3Ñ3Ü Ð#:¸7¸)Ð!DÈtÔTÐTà˜Ò!Ø×1Ñ1Ø   
Ð+¨XÐ7PóRˆKà×-Ñ-Ø×2Ñ2°8Ó<¸hÜ˜[¨8°YÀ	È7ÔUXÐTYÐ*ZÓ[ÜÑ"Kð .ó Mð Mð
 ˜Ò#Ø×,Ñ,¨S°(ÐAWÐ,ÓXˆGØ—~‘~ d×&8Ñ&8ØkØ˜ó'&ó 'ˆHð ×.Ñ.Ø˜h˜ZÐ(¨(Ð4NÐV[ØÐ ^ðdð /ó ˆô 'ØÐ:ó<ò BØ?Að 	ô ˜°¼[¸MÐ0JÐTWÔXˆØ×(Ñ(Ø6°x°jÀÐFÈÐRjØ˜�.¨9Ð6HÐ*Ið )ó Kˆ
ô   × 3Ñ 3°GÓ <Ó=ˆÜ˜_×0Ñ0°Ó?Ó@ˆä˜& '°Ô5ò 4Ü˜:Ÿ>™>¨'Ó2Ó3ð 	ô ˜×2Ñ2Ð3KÓLÓMˆÜ! /×"5Ñ"5Ð6JÓ"KÓLˆð+÷
ð 
ñ '�˜ ð Ü'ØOÐPWÈyÐXYÐZbÐYcÐcgÐhØ˜'�Nó$ð Ø óð
ˆ
ò 
ð$ ØØä& u¨h¸È3ÔOØØ$ñ
ô ˜:Ø -´¨uÐ5Ø&2°IÄ¸}Ð%MØ#'¬+¨Ð"7Ø(¬3¨%Ð0Ø(¬3¨%Ð0ñ(ó ð
ˆô" % Z°'Ð;TÔWZÐV[Ô]`Ð1aÓbˆÙ ×!8Ñ!8Ô!:Ø" = /Ð2ˆMä! *¨y¸,ÌÈÐ.NÓOˆ
Ù˜j×3Ñ3°FÔ;Ø 
˜|Ð,ˆJð �lÒ"©*Ø˜,Ò&Ø×#Ñ#ØPÐ[cð $ô eá Ü$Ð%PÐ[_Ô`Ð`Ü% jØ˜¤s e¬gÐ6MÐX\Ô.]Ð-^ð3`ó aˆJðØðà*Ü"Ø×0Ñ0°JÀÐ3NÑNØ$ d×&9Ñ&9Ð:ó<ð *òð ð   	Ñ*¨;Ñ7ˆ
Ü—+‘+×+Ñ+¬L¸qÔ,AÄ2Ç;Á;Ç?Á?ÓS×YÑYÐ\]Ñ]ÒbÐabˆð		Ø×9Ñ9¸*ÀjØ+Ø-Ø%)×%;Ñ%;¸JÑ%GÈ	Ñ%RÐUYÐZaÐYbÐScÑ%dñSó ˆLð
Øð
àð
ð ÙUb¤°À-Ó!PÐ Qò	
ð 	
ð imò	
ð 	
ùôU
øôJ "ò 	à×%Ñ% a§j¡j¸D×<OÑ<OÐdhÐ%ÔiØ�Lûð	ús   Ç%OÎ-O Ï	PÏ*PÐP)NTN)Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLr²   Ú_GEO_BYPASSÚ_TESTSr±   r^   rS   rT   rX   rb   rr   rÍ   rh   rY   rW   r   r      s°  „ Øv€JØ�V€NØ€Kð 5ð
Ø�,ð
à�5ð
ð ÐDð
ð Ðið	
ð
 Ðwð
ð ÐAð
ð ˜:ð
ð �{ð
ð ˜ð
ð Ðnð
ð Ð3ð
ð ÐOð
ð ˜að
ð ˜ð
ð ˜:ð
ð  ! *ð!
ð" ˜Zð#
ð$ &Ø!+Ø&Ø!YÐ ZØ%Ø%ò/
ñð< 5ð
ØÐ<ð
à�5ð
ð Ðið
ð Ðwð	
ð
 ÐAð
ð ˜?ð
ð �{ð
ð ˜ð
ð Ðnð
ð �Bð
ð Ð3ð
ð ÐOð
ð ˜að
ð ˜ð
ð ˜:ð
ð    ð!
ð" ˜Jð#
ð$ &Ø%ò'
ð* $ f¨y¸<¸.Ð.IÐ%JÐKñ1ð4 1Øñð -Øñð 3àØ)ñ
ð  ñð 3àØ2ñ
ð ñð 3ØñðSL€FðZ gÐà %Ø#Ø%ñ€Hð
 €OØÐò
Sóò	dów
rY   r   c                   ój   — e Zd ZdZdZdZdddddd	d
deddddddœdœdddddddddedddddœdœgZd„ Zy)ÚTVerOlympicIEztver:olympicz https://olympic-data.tver.jp/apiz[https?://(?:www\.)?tver\.jp/olympic/milanocortina2026/(?P<type>live|video)/play/(?P<id>\w+)zVhttps://tver.jp/olympic/milanocortina2026/video/play/3b1d4462150b42558d9cc8aabb5238d0/Ú 3b1d4462150b42558d9cc8aabb5238d0r   u0   ã€�é–‹ä¼šå¼�ã€‘ã�Žã‚…ã�£ã�¨å‡�ç¸®ãƒ�ã‚¤ãƒ©ã‚¤ãƒˆz$ref:3b1d4462150b42558d9cc8aabb5238d0g�Âõ(\@†@r-   zre:\d{8}zcount:1zre:https://.+\.(?:jpg|png)iÛw†iÚ20260206útver-olympic)r   r   r   r   r"   r1   r+   r*   r;   r#   r'   r(   r    r7   zAhttps://tver.jp/olympic/milanocortina2026/live/play/glts313itwvj/Úglts313itwvju   é–‹ä¼šå¼�ãƒ�ã‚¤ãƒ©ã‚¤ãƒˆÚntvzref:sp_260207_spc_01_dvri   Úwas_liveiLx†iútver-olympic-live)r   r   r   Ú
channel_idr   r"   r1   r+   r*   r#   r'   r(   r    c                 óB  — | j                  |«      j                  dd«      \  }}| j                  d«      }|dk(  �rd}d}t        | j	                  | j
                  › d|› �|«      ddt        hf«      }t        |d	t        hf«      }t        «       }	t        |d
t        hf«      }
t        |
d¬«      }|st        d«      ‚t        |dt        d¬«      ht        d«      hf«      }|	|k  r| j                  d|
› d�d¬«       |d|dœS ||	cxk  r|k  rn n
d}|r{|dz  }nu||	k  rpt        |dt        d¬«      hf«      }|r|	|k  rd}|dz  }nHt        dd¬«      ‚d}d}|}d}t        | j	                  | j
                  › d|› �|«      ddt        hf«      }i | j                  |d |› �d!d"|d#œ|¬$«      ¥t        |d%t        ht        fd&t        ht        fd't        ht        fd(t        ht        fd)t        ht        t         fd
t        d¬«      hfd*t"        ht         fd+œ«      ¥|d,œ¥S )-Nrf   r   Úlive_from_startÚliverÜ   Ú a35ebb1ca7d443758dc7fcc5d99b1f72z/live/rd   r`   Úonair_start_dater�   )Ú	tz_offsetz#Unable to extract on-air start timeÚonair_end_datezon-air end timez&This program is scheduled to start at z JSTTru   Úis_upcoming)r   r1   r2   Úis_liveÚ_dvrÚdvr_end_daterÛ   z#This program is no longer availablerØ   Ú 4b55a4db3cce4ad38df6dd8543e3e46ar-   z/video/r’   r•   rI   rJ   r¢   )rß   r   Ú	sub_titler!   rÝ   )r   Údescription_lÚdescription_s)Úpicture_l_urlÚpicture_m_urlÚpicture_s_url)r   r   r!   rÝ   r   r'   r#   )r   r1   )r¥   r¦   Ú	get_paramr   rR   Ú	_API_BASEÚdictro   r   r   r   r   Úraise_no_formatsr¹   r   Úfilterr­   r   )rU   r8   r¼   r`   rß   rÉ   r    Úolympic_dataÚmedia_idÚnowÚstart_timestamp_strÚstart_timestampÚend_timestampr1   Údvr_end_timestamps                  rW   rÍ   zTVerOlympicIE._real_extract2  sÐ  € Ø#×4Ñ4°SÓ9×?Ñ?ÀÈÓMÑˆ
�HØŸ.™.Ð):Ó;ˆà˜ÓØ,ˆJØ8ˆGÜ'¨×(;Ñ(;Ø—>‘>Ð" &¨¨
Ð3°Xó)?ØAKÈVÔVZÐU[Ð@\ó^ˆLä# L°:Ä¸uÐ2EÓFˆHä“.ˆCÜ".¨|Ð>PÔSVÐRWÐ=XÓ"YÐÜ/Ð0CÈqÔQˆOÙ"Ü$Ð%JÓKÐKÜ(¨Ø Ô#4¸qÔ#AÐ"BÄWÐM^ÓE_ÐD`ð8bó cˆMð �_Ò$Ø×%Ñ%Ø<Ð=PÐ<QÐQUÐVÐaeð &ô gð #Ø#0Ø)8ñð ð
 ! CÔ7¨-Õ7Ø'�Ù"Ø Ñ&‘HØ #Ò%Ü$0°Ø"Ô%6ÀÔ%CÐ$Dð@Fó %GÐ!á$¨Ð/@Ò)@Ø",�KØ Ñ&‘Hä(Ø=ÈôNð Nð (ˆJØ8ˆGØˆHØ$ˆKÜ'¨×(;Ñ(;Ø—>‘>Ð" '¨(¨Ð4°hó)@ØBLÈgÔX\ÐW]ÐA^ó`ˆLð
Ø×,Ñ,¨Z¸4À¸zÐ9JØ+Ø-Ø%,ñMð  /ð	 -ó 0ð
ô ˜<Ø!¤J <´Ð8Ø)¬J¨<¼Ð@Ø%¬
 |´VÐ<Ø+¬j¨\¼6ÐBØ QÔT^ÐS_ÔagÔilÐmØ0Ô3DÈqÔ3QÐ2RÐSØQÔT_ÐS`ÔbeÐfñ*ó ð
ð Ø&ò!
ð 	
rY   N)	rÎ   rÏ   rÐ   ÚIE_NAMErñ   rÑ   ÚintrÓ   rÍ   rh   rY   rW   rÕ   rÕ   	  sŠ   „ Ø€Gà2€IØo€Jàgà4ØØGØ@ØØ%Ø(Ø"%ØØ6Ø#Ø%Ø)ñ
ñð$ Sà ØØ/ØØ4ØØ%Ø(Ø"%Ø6Ø#Ø%Ø.ñ
ñð#"€FóHB
rY   rÕ   )r´   r³   rt   r   Úutilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   Úutils.traversalr   r   r   rÕ   rh   rY   rW   ú<module>r      sA   ðÛ å "÷÷ ÷ õ ÷ 4ôp
ˆ]ô p
ôfk
�Mõ k
rY   