
    bi@                         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dS )    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dPS )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                     |                      dd dd          }t          |ddddf          | _        |                      d	d d
d          | _        d S )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     O/DATA/AppData/hermes/venv/lib/python3.11/site-packages/yt_dlp/extractor/tver.py_real_initializezTVerIE._real_initializep   s    **O$+< + > >  ,L8*.F
 F
 ;     "&!4!4@$*,Q"S "S    Nc           	      ^    |                      d| |||| j        i | j        |p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|   sQ    "">>>$ 7&7;B7 #   	rY   c           
   #     K   |                      d| |d| j                  }t          |ddd ddt          hf          D ]C}|                     d	| |d
| d          }t          |ddd ddt          hf          E d {V  Dd S )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     **OIOO14= + J J &x5W5WYbdhknjopr r 	d 	dI 33444iApW`ApApApr rM#M*&I&I9VZ]`\a4c d d d d d d d d d d		d 	drY   c                 	   |                      |                              dd          \  }|                     ddg          d         }|dvrt          d| d	          |d
k    rf|                     d d          }|                     |                               t          |ddddt          hf          t          d           S |dk    rB| 
                    |d          }|                     |                     d|d                    |                     d ddddi          }t          |d          pi }t          |dt          hfd           |                     d! d"d#d$id%d&i'          }t          |                    d                    }	t          |                    d(                    }
t#          |
|	d)*          p!t          |                    d                    }t          |                    d+                    }t          |                    d,                    }fd-d.D             }||
|	t#          |||d)*          ||d/t          |d0t          hfd1d2t$          hfd3t$          hfd4t          hfd5t          hfd6          }t          |d7d8t          ht&          f          }|r|                                sd9| }t          |dd:t          hf          }|r|                    d9          sd9| }|d;k    s|s|d;k    r|                     d<=           |st          d>d	          t          |d7d?t          ht/          d@d	          hf          }i |dAt1          | j        ||fz  dB| j        i          dCdDS |d         dE         }t6          j                            t=          dFG          t6          j        j                   j!        dHz  pdH}	 | "                    ||dId&| j#        |         dJ         dK|          dL          }n;# tH          $ r.}| %                    |j&        | j        dM           i }Y d }~nd }~ww xY wi |||rtO          dC|          gnd dNS )ONr   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    ,K,K,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broadcastDateLabelc           
      T    g | ]$\  }}}|t          d | d ddi          ||d%S )z9https://statics.tver.jp/images/content/thumbnail/episode//z.jpgrk   )r   r8   widthheight)r   ).0qualityr   r   r}   r`   s       rW   
<listcomp>z(TVerIE._real_extract.<locals>.<listcomp>   so     
 
 
 ' 'hPWhhZbhhh'N$ $   
 
 
rY   ))smalli  i  )mediumi  ih  )largei  i  )xlargei   i  )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	   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   
video_typer?   series_infowebpageepisode_infoepisode_content
video_infor%   r$   r   provideronair_labelr   metadatabrightcove_id
streaks_id
account_id
project_idkey_idxstreaks_infoer}   r`   s                          @@rW   _real_extractzTVerIE._real_extract   s   #44S99??fMM*)))i[AA!D333 !D7!D!DtTTTT!!11+++X7PR RK--228<<h[8Y	7UXTY*Z[["K"K . M M M
 ##,,S(AW,XXG~~d&8&8k'& '& ' 'H ..(h(((4NV[ ^d /   ':< < B?A 	 [M0JTWXXX((FxFFFRj.96H*I ) K K
   3 3G < <==_00??@@&'555 4:>>'2233 	 223KLLMM!/"5"56J"K"KLL
 
 
 
 
+
 
 

$ &uh3OOO$
 
 : -u5&2I}%M#'+"7(3%0(3%0( (  
" %Z';TWZV[]`1abb 	3!8!8!:!: 	32=22M!*y,.NOO
 	-j33F;; 	-,
,,J l""*",&&##P[c $ e e e  a$%P[_````%jseg6MX\.].].]-^3` a aJ*"0J3NN$d&9:< < *     	*;7
+++Lq,A,A,A2;?SSY\]]bab		99*j+-%)%;J%G	%RScZaScSc%dS S  LL
 " 	 	 	%%ajD<Odh%iiiLLLLLL	



 Ub l-!P!P Q Qhl	
 
 
 	
s   95P/ /
Q'9$Q""Q')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 
S 
S   	d 	d 	dw
 w
 w
 w
 w
rY   r   c                   l    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dS )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                    |                      |                              dd          \  }}|                     d          }|dk    rUd}d}t          |                     | 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!|                     d|
 dd           |d|dS ||	cxk    r|k     rn n
d}|r|dz  }n||	k    rBt          |dt          d          hf          }|r|	|k     rd}|dz  }nQt          dd          n?d}d}|}d}t          |                     | j         d| |          ddt          hf          }i |                     |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9??MM
H..):;;,J8G'(;(;>3333X)? )?AKVVZU[@\^ ^L#L:u2EFFH..C".|>PSVRW=X"Y"Y/0CqQQQO" L$%JKKK( #4q#A#A#A"BWM^E_E_D`8b c cM _$$%%V=PVVVae & g g g ##0)8  
 !C7777-77777'" '&H#%%$0"%6%C%C%C$D@F %G %G!$ N/@)@)@",K&HH(=N N N N & (J8GH$K'(;(;>44(44h)@ )@BLgX\W]A^` `L
,,Z9J9J9J+-%,M M  /	 - 0 0
 <!J<8)J<@%
|V<+j\6B QT^S_agilm03Dq3Q3Q3Q2R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
 B
 B
 B
 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     sD       " " " " " "                              4 3 3 3 3 3 3 3p
 p
 p
 p
 p
] p
 p
 p
fk
 k
 k
 k
 k
M k
 k
 k
 k
 k
rY   