
    i@                         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	   日テレdurationgjt@	thumbnailzShttps://statics.tver.jp/images/content/thumbnail/episode/xlarge/epc1hdugbk.jpg?v=16seriesu   神回だけ見せます！episodeu6   #2 壮烈！車大騎馬戦（木曜スペシャル）episode_numberr   	timestampigupload_date20250110modified_timestampixg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4394098882001gClg@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     H/var/www/files/kim/lib/python3.12/site-packages/yt_dlp/extractor/tver.py_real_initializezTVerIE._real_initializep   sh    **O$+< + >  ,L8*.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)xBW 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    1V9	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     **CI;O14== + J &x5WYbdhknjopr 	dI 33(4iCVW`VaaoAprM#M*&I9VZ]`\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?        dIJ      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4S9??fM*)))i[A!D33 #:7)!DtTT!11 
+X7PRK--228<h[8Y	7UXTY*Z["K . M M
 #,,S(AW,XG~~d&8&8k'& 'H ..hZ((4NV[ ^d /  ':< B?A 	 [M0JTWX((6xjFRj.96H*I ) K
   3 3G <=_00?@&'5 4:>>'23 	 223KLM!/"5"56J"KL+
 
 ' 'OPWyXYZbYccgh'N$  

 
$ &uh3O$
 : -u5&2I}%M#'+"7(3%0(3%0( 
" %Z';TWZV[]`1ab!8!8!:"=/2M!*y,.NO
j33F;
|,J l"*,&##P[c $ e $%P[_``%jseg6MX\.]-^3` aJ*"00J3NN$d&9&9:< *   	*;7
++++Lq,A2;;??SYY\]]bab		99*j+-%)%;%;J%G	%RUYZaYbSc%dS L


 Ub-!P Q	
 	
 im	
 	
U
J " 	%%ajjD<O<Odh%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   vJVN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#
$ &%'
* $fy<..I%JK14 1 - 3)
   32
  3SLFZ 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)iwi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_liveiLxi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4S9??M
H..):;,J8G'(;(;>>"&
3X)?AKVVZU[@\^L#L:u2EFH.C".|>PSVRW=X"Y/0CqQO"$%JKK( #4q#A"BWM^E_D`8b cM _$%%<=P<QQUVae & g ##0)8 
 !C7-7'"&H#%$0"%6%C$D@F %G!$/@)@",K&H(=N N (J8GH$K'(;(;>>"'(4h)@BLgX\W]A^`L
,,Z4z9J+-%,M  /	 - 0
 <!J<8)J<@%
|V<+j\6B QT^S_agilm03Dq3Q2RSQT_S`bef* 
 &!
 	
rY   N)	r   r   r   IE_NAMEr   r   intr   r   rh   rY   rW   r   r   	  s    G2IoJg4G@%("%6#%)
$ S /4%("%6#%.
#"FH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   