
    ukiN-                     n    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 ddlmZmZ  G d de      Zy)	    N   )StreaksBaseIE   )
ExtractorErrorGeoRestrictedErrorint_or_nonejoin_nonemptymake_archive_idsmuggle_urlstr_or_nonestrip_or_nonetime_secondsupdate_url_query)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20220501r/   r0   )r2   r3   extractor_argstverbackend
brightcove)r4   r5   paramszhttps://tver.jp/corner/f0103888T)r4   only_matchingzhttps://tver.jp/lp/f0033031z!https://tver.jp/series/srtxft431v
srtxft431vu   名探偵コナン)r   r      )r4   r5   playlist_mincountz!https://tver.jp/series/sru35hwdd2   )r4   r5   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)rL   rM   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     P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/tver.py_real_initializezTVerIE._real_initializem   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)rN   _HEADERSrO   )rQ   pathvideo_idnoterW   rY   s         rS   _call_platform_apizTVerIE._call_platform_apiy   sP    ""7v>$ 7&&7;B7 #  	rU   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)rX   rK   contentsc                     |d   dk(  S )Ntypeseason _vs     rS   <lambda>z6TVerIE._yield_episode_ids_for_series.<locals>.<lambda>   s    !F)xBW rU   contentr   zv1/callSeasonEpisodes/zDownloading season z episodes infoc                     |d   dk(  S )Nrb   r"   rd   re   s     rS   rh   z6TVerIE._yield_episode_ids_for_series.<locals>.<lambda>   s    1V9	3I rU   )rN   rZ   r   strr^   )rQ   r2   seasons_infor3   episodes_infos        rS   _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   rb   r;   streaksr   )r<   rp   zInvalid backend value: T)expectedr!   zv2/callSeries/zDownloading series inforK   ri   r   c                     d|  S )Nzhttps://tver.jp/episodes/rd   )xs    rS   rh   z&TVerIE._real_extract.<locals>.<lambda>   s    .Gs,K rU   )iegetterepisodeszResolving to new URL)r]   )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])rW   rY   )rK   r"   ri   version5)defaultz(https://statics.tver.jp/content/episode/z.jsonzDownloading video inforg   rH   rF   )rY   rX   seriesTitle )delimproductionProviderNamebroadcastDateLabel))smalli  i  )mediumi  ih  )largei  i  )xlargei   i  z9https://statics.tver.jp/images/content/thumbnail/episode//z.jpg)r   r4   widthheight)r   r!   r"   r   r   
thumbnailsr   
viewStatusstartAtnoseriesIDseasonID)r   r/   r#   r2   r3   video)
videoRefIDvideoIDz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)_typer4   ie_key	projectID	   )hours   rE   api_keykey0)rG   rH   zX-Streaks-Api-Key)	countriesmetadata_available)r   r1   ))_match_valid_urlgroup_configuration_argr   r^   playlist_from_matchesrn   r   rk   r   _download_webpage	_match_id_search_regexr   rN   r   getr	   r   r   any	isdecimal
startswithreport_warningr   r   BRIGHTCOVE_URL_TEMPLATE_GEO_COUNTRIESdtdatetimefromtimestampr   timezoneutcmonth_extract_from_streaks_apirP   r   raise_geo_restrictedorig_msgr
   )rQ   r4   r\   
video_typer;   series_infowebpageepisode_infoepisode_contentrx   
video_infor"   r!   r   provideronair_labelqualityr   r   r   metadatabrightcove_id
streaks_id
account_id
project_idkey_idxstreaks_infoes                               rS   _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   rZ   rO   rP   rT   r^   rn   r   rd   rU   rS   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
rU   r   )r   r   rp   r   utilsr   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   rd   rU   rS   <module>r      s-     "   4p
] p
rU   