a
    hN-                     @   sh   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 deZdS )	    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                   @   s
  e Zd ZdZdgZdZ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dddd	d
ddddg dddd d!ddddd"d#d$d%d&giiid'd(d)d*d+d)d*d,d-d.d/d0d1d2ddd/d3d4d5d)d*gZd6Zd7d8d9d:Zi Z	i Z
d;d< ZdDd>d?Zd@dA ZdBdC Zd=S )ETVerIEzbhttps?://(?:www\.)?tver\.jp/(?:(?P<type>lp|corner|series|episodes?|feature)/)+(?P<id>[a-zA-Z0-9]+)ZJPFz#https://tver.jp/episodes/epc1hdugbkZ
epc1hdugbkZmp4z(ref:baeebeac-a2a6-4dbf-9eb3-c40d59b40068uR   神回だけ見せます！ #2 壮烈！車大騎馬戦（木曜スペシャル）u\   神回だけ見せます！ #2 壮烈！車大騎馬戦（木曜スペシャル） 日テレz$md5:2726f742d5e3886edeaf72fb6d740fefztver-ntvu	   日テレgjt@zShttps://statics.tver.jp/images/content/thumbnail/episode/xlarge/epc1hdugbk.jpg?v=16u   神回だけ見せます！u6   #2 壮烈！車大騎馬戦（木曜スペシャル）r   igZ20250110ixgZ20250114Znot_livei-obZ20220502z6brightcovenew ref:baeebeac-a2a6-4dbf-9eb3-c40d59b40068Z
sru35hwdd2Z
ss2lcn4af6)idextZ
display_idtitle	alt_titledescriptionuploader_idchannelduration	thumbnailseriesepisodeepisode_number	timestampupload_dateZmodified_timestampZmodified_dateZlive_statusrelease_timestamprelease_date_old_archive_ids	series_id	season_id)url	info_dictZ4394098882001gClg@is0nbZ20220501)r   r   r   r   r   r   r   r   r   tagsr   r   r   r   r   r    r!   r#   r$   Zextractor_argsZtverbackend
brightcove)r%   r&   paramszhttps://tver.jp/corner/f0103888T)r%   Zonly_matchingzhttps://tver.jp/lp/f0033031z!https://tver.jp/series/srtxft431vZ
srtxft431vu   名探偵コナン)r   r      )r%   r&   Zplaylist_mincountz!https://tver.jp/series/sru35hwdd2   )r%   r&   Zplaylist_countz!https://tver.jp/series/srkq2shp9dzFhttp://players.brightcove.net/%s/default_default/index.html?videoId=%sZwebhttps://tver.jphttps://tver.jp/)zx-tver-platform-typeOriginRefererc                 C   s>   | j d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)r3   r4   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)selfZsession_info r9   J/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/tver.py_real_initializem   s    zTVerIE._real_initializeNc                 C   s,   | j d| |||| ji | j|p$i dS )Nz)https://platform-api.tver.jp/service/api/)fatalheadersquery)r5   _HEADERSr6   )r8   pathvideo_idnoter<   r>   r9   r9   r:   _call_platform_apiy   s    zTVerIE._call_platform_apic              	   c   s~   | j d| |d| jd}t|dddd dd	thfD ]B}| d
| |d| d}t|dddd dd	thfE d H  q6d S )Nz5https://service-api.tver.jp/api/v1/callSeriesSeasons/zDownloading seasons info)r=   r2   contentsc                 S   s   |d dkS )NtypeZseasonr9   _vr9   r9   r:   <lambda>       z6TVerIE._yield_episode_ids_for_series.<locals>.<lambda>contentr   zv1/callSeasonEpisodes/zDownloading season z episodes infoc                 S   s   |d dkS )NrE   r   r9   rF   r9   r9   r:   rI      rJ   )r5   r?   r   strrC   )r8   r#   Zseasons_infor$   Zepisodes_infor9   r9   r:   _yield_episode_ids_for_series   s    z$TVerIE._yield_episode_ids_for_seriesc              
      s  |  |dd\}| ddgd }|dvrBtd| dd	|d
kr| d d}| j| t|ddddthft	dd dS |dkr| j
|dd}| | d|d| jd ddddid}t|dpi }t|dthfd d! | jd" d#d$d% id&d'id(}t|d}	t|d)}
t|
|	d*d+pVt|d}t|d,}t|d-} fd.d/d0D }||
|	t|||d*d+||d1t|d2thfd3d4thfd5thfd6thfd7thfd8}t|d9d:thtf}|r
| s
d;| }t|dd<thf}|r8|d;s8d;| }|d=ksH|s|d=kr`| jd>d? |srtd@dd	t|d9dAthtdBdd	hf}i |dCt| j||f dD| jidEdFS |d dG }tjtdHdItjj j!dJ pdJ}z.| "||dKd'| j#| dL dM|  dN}W n> t$yV } z$| j%|j&| jddO i }W Y d }~n
d }~0 0 i |||rvt'dE|gnd dPS )QNr   rE   r(   streaksr   )r)   rN   zInvalid backend value: T)expectedr   zv2/callSeries/zDownloading series infor2   rK   r   c                 S   s
   d|  S )Nzhttps://tver.jp/episodes/r9   )xr9   r9   r:   rI      rJ   z&TVerIE._real_extract.<locals>.<lambda>)ZiegetterZepisodeszResolving to new URL)rB   )z-canonical"\s*href="(https?://tver\.jp/[^"]+)"z$&link=(https?://tver\.jp/[^?&]+)[?&]z	url regexzv1/callEpisode/zDownloading episode infoFZrequire_dataz<mylist,later[epefy106ur],good[epefy106ur],resume[epefy106ur])r<   r>   )r2   r   rK   version5)defaultz(https://statics.tver.jp/content/episode/z.jsonzDownloading video inforH   r0   r.   )r>   r=   ZseriesTitle )delimZproductionProviderNameZbroadcastDateLabelc              	      s8   g | ]0\}}}|t d | d dd i||dqS )z9https://statics.tver.jp/images/content/thumbnail/episode//z.jpgrH   )r   r%   widthheight)r   ).0ZqualityrX   rY   rR   rA   r9   r:   
<listcomp>   s   	z(TVerIE._real_extract.<locals>.<listcomp>))smalli  i  )Zmediumi  ih  )Zlargei  i  )Zxlargei   i  )r   r   r   r   r   
thumbnailsr   Z
viewStatusZstartAtnoZseriesIDZseasonID)r   r    r   r#   r$   video)
videoRefIDZvideoIDzref:ra   r)   z:No STREAKS ID found; falling back to Brightcove extraction)rA   z)Unable to extract brightcove reference IDZ	accountIDzbrightcove account IDZurl_transparentZgeo_countriesZBrightcoveNew)_typer%   Zie_keyZ	projectID	   )hours   r-   Zapi_keykey0)r/   r0   zX-Streaks-Api-Key)Z	countriesZmetadata_available)r   r"   )(Z_match_valid_urlgroupZ_configuration_argr   rC   Zplaylist_from_matchesrM   r   rL   r   Z_download_webpageZ	_match_idZ_search_regexr   r5   r   getr   r   any	isdecimal
startswithZreport_warningr   r
   BRIGHTCOVE_URL_TEMPLATE_GEO_COUNTRIESdtdatetimefromtimestampr   timezoneutcmonthZ_extract_from_streaks_apir7   r   Zraise_geo_restrictedZorig_msgr	   )r8   r%   Z
video_typer(   Zseries_infoZwebpageZepisode_infoZepisode_contentZ
video_infor   r   r   providerZonair_labelr^   metadataZbrightcove_idZ
streaks_idZ
account_idZ
project_idZkey_idxZstreaks_infoer9   r[   r:   _real_extract   s    
	



	$zTVerIE._real_extract)NTN)__name__
__module____qualname__Z
_VALID_URLrm   Z_GEO_BYPASSZ_TESTSrl   r?   r6   r7   r;   rC   rM   rw   r9   r9   r9   r:   r      s   M
r   )ro   rn   rN   r   utilsr   r   r   r   r	   r
   r   r   r   r   Zutils.traversalr   r   r   r9   r9   r9   r:   <module>   s   0