a
    h6                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZddlmZ ddlm	Z	m
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mZ ddlmZ G d	d
 d
eZG dd deZG dd deZ dS )    N   )InfoExtractor   )aes_cbc_decrypt_bytesunpad_pkcs7)	HTTPError)ExtractorErrorass_subtitles_timecodebytes_to_longfloat_or_noneint_or_nonejoin_nonemptylong_to_bytesparse_iso8601pkcs1padstr_or_nonestrip_or_nonetry_getunified_strdateurlencode_postdata)traverse_objc                   @   sN   e Zd ZdZdZdZde dZe dZi ZdZ	dZ
d	d
dZdddZdS )	ADNBaseIEzAnimation Digital NetworkZanimationdigitalnetworkzanimationdigitalnetwork.frzhttps://gw.api./zplayer/zUnable to log in)lE   J4XjDqK!E/&^x!& lL}?<dZ:O!3cUgK?> EYl*PLASAXrjnvt^|h#hGe\GE8=,v0sh	g\3
$BZ	 i  r      )startend      )Zmiddler   N)__name__
__module____qualname__ZIE_DESCZ_NETRC_MACHINE_BASE_API_BASE_URL_PLAYER_BASE_URL_HEADERS_LOGIN_ERR_MESSAGE_RSA_KEY_POS_ALIGN_MAP_LINE_ALIGN_MAP r)   r)   I/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/adn.pyr      s   
r   c                   @   s~   e Zd ZdZdddddddd	d
eedddedddddddddddddeeedeeeddgZdd Zdd Z	dd  Z
d!S )"ADNIEz[https?://(?:www\.)?animationdigitalnetwork\.com/(?:(?P<lang>de)/)?video/[^/?#]+/(?P<id>\d+)zThttps://animationdigitalnetwork.com/video/558-fruits-basket/9841-episode-1-a-ce-soirZ 1c9ef066ceb302c86f80c2b371615261Z9841mp4zFruits Basket - Episode 1z$md5:14be2f72c3c96809b0ca424b0097d336zFruits Basketi  Z20190405r   u   À ce soir !zSeason 1)idexttitledescriptionseriesdurationrelease_datecomment_countaverage_ratingseason_numberepisodeepisode_number	thumbnailseasonz3Only available in French and German speaking Europe)urlmd5	info_dictskipzUhttps://animationdigitalnetwork.com/de/video/973-the-eminence-in-shadow/23550-folge-1Z 5c5651bf5791fa6fcd7906012b9d94e8Z23550i  Z20231004zThe Eminence in Shadowr   zSeason 2)r-   r.   r8   r2   r3   r1   r6   r7   r/   r9   r:   r4   r5   r0   )r;   r<   r=   c                 C   s  |sd S | j ||dddpd}| j||ddp0i d}|rZ| j ||dddd| j id	}|sbd S ttt|d
d  t	| j
d t|d d
 }| j| d dd}|sd S i }| D ]\}}	d}
|	D ]}t|dt|d|d|d|df\}}}}}|d u s|d u s|d u r2q| j|d| j|d }|
tjdt|t||dkrvd| nd|dddddd 7 }
q|dkrd}n|dkrd }||g d!t|	d"d#|
d"g q|S )$NzDownloading subtitles locationFfatalz{}locationzDownloading subtitles dataZOriginzhttps://r@   headers   Z7fac1178830cfe0ca~  [Script Info]
ScriptType:V4.00
[V4 Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,TertiaryColour,BackColour,Bold,Italic,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,AlphaLevel,Encoding
Style: Default,Arial,18,16777215,16777215,16777215,0,-1,0,1,1,0,2,20,20,20,0,0
[Events]
Format: Marked,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,TextZ	startTimeZendTimetextZ	lineAlignZpositionAlignr   r   z-Dialogue: Marked=0,{},{},Default,,0,0,0,,{}{}z{\a%d} 
z\Nz<i>z{\i1}z</i>z{\i0}ZvostffrZvostdedejson)r.   datassa)Z_download_webpage_parse_jsongetr!   r   r   base64	b64decodebinascii	unhexlify_Kdecodeitemsr   r'   r(   oslinesepformatr	   replace
setdefaultextendrJ   dumps)selfsub_urlvideo_idZenc_subtitlesZsubtitle_locationZdec_subtitlesZsubtitles_json	subtitlesZsub_langsubrL   currentr   r   rE   Z
line_alignZposition_align	alignmentr)   r)   r*   _get_subtitles]   sl    



zADNIE._get_subtitlesc                 C   s   zN| j | jd d d| jdt|dd|ddp0i d}|rLd| | jd	< W n ty } zld }t|jt	r|jj
d
kr| j|jj  d ddpi }|dp|d}| |p| j W Y d }~n
d }~0 0 d S )Nzauthentication/loginz
Logging inFWeb)passwordZ
rememberMesourceusername)r@   rK   ZaccessTokenzBearer Authorization  r?   messagecode)_download_jsonr"   r%   r   rN   r$   r   
isinstancecauser   statusrM   responsereadrT   Zreport_warning)r]   rh   rf   Zaccess_tokenerk   respr)   r)   r*   _perform_login   s6    
	zADNIE._perform_loginc           $      C   s  |  |dd\}}|pd| jd< | jd| d }| j|d |d| jd	d
 }|d }|d }|dst|ddthf}t|pdt		 krt
d| dd| jddd | j|dp| jd |dd|d iddd }	t|dd  p|d! }
d"tjd#d$d%| _tt| j|	d& }d }td'D ]}tt|d(}| j\}}ttt|||}t| }z4| j|
|d)d*|i| jd+d,d+d-d.d/}W  qZW n t
yL } zt|j t!s||j j"d0krW Y d }~q4| #|j j$% |}|d1}|j j"d2kr0|d3d4kr0| j&|d5 t
|W Y d }~n
d }~0 0 q4t
d6|d7phi }|d8pxi }|d9pi d:}|dpi }|d; }g }|d<pi ' D ]\}}t|t(sؐq|' D ]\}}| j||d=| d>| d?| jd@dApi }|dB}|s&q| j)||dCdD|d@dE} |dFkr\| D ]}!d|!dG< qJn|dHkrz| D ]}!dI|!dG< qj|*|  qq|s| jddd | j| j+d|  |dJd@| jdKpi dpi }"|"dLpi }#||t,|dMp|"dM|dNp|dN|| -|||dOp4|"dPt.|"dQ|#d;t.|"dRt.|dSpj|"dSt/|"dTt0|"dUp|dUt.|"dVdWS )XNlangr-   rH   X-Target-Distributionzvideo/r   configurationz'Downloading player config JSON metadatarC   playeroptionsuserZ	hasAccessvideoZ	startDater   z/This video is not available yet. Release date: T)expectedz"This video requires a subscriptionrf   )methodZrefreshTokenUrlzrefresh/tokenzDownloading access tokenzX-Player-Refresh-TokenZrefreshToken    )rC   rK   tokenc                 S   s   | d d S )Nr}   r;   r)   )xr)   r)   r*   <lambda>   r   z%ADNIE._real_extract.<locals>.<lambda>linkrF   0123456789abcdef   )k)r   tr      zDownloading links JSON metadatazX-Player-Tokentruefalsere   )ZfreeWithAdsZadaptiveZwithMetadatarg   rC   queryrj   rk   i  rl   zplayer-bad-geolocation-country)msgzGiving up retryinglinksmetadatar`   allr/   Z	streamingzDownloading  z JSON metadataF)rC   r@   rA   r,   Zm3u8_native)Zm3u8_idr@   ZvflanguageZvderI   z%Downloading additional video metadatarB   showsummaryimageZsubtitlenameZshortNumberr:   r2   ZreleaseDateZratingZcommentsCount)r-   r/   r0   r9   formatsr`   r7   r8   r1   r6   r2   r3   r5   r4   )1_match_valid_urlgroupr$   r#   rm   rN   r   strr   timer   Zraise_login_requiredr   joinrandomchoicesrS   listrJ   r\   encoderangebytesr   r&   r   powr
   rO   	b64encoderT   rn   ro   r   rp   rM   rq   rr   Zraise_geo_restrictedrU   dictZ_extract_m3u8_formatsr[   r"   r   Zextract_subtitlesr   r   r   )$r]   r;   rv   r_   Zvideo_base_urlrz   r{   r|   Z
start_dater   Z	links_urlrk   Z
links_data_Zpadded_messagenrs   Zencrypted_messageauthorizationerrorr   Zmetasr^   Z
video_infor/   r   Z	format_idZ	qualitiesZqualityZload_balancer_urlZload_balancer_dataZm3u8_urlZm3u8_formatsfr}   r   r)   r)   r*   _real_extract   s    



"



zADNIE._real_extractN)r   r   r    
_VALID_URLintfloatr   _TESTSrd   ru   r   r)   r)   r)   r*   r+   1   sT   *<r+   c                   @   s,   e Zd ZdZddddddgZdd	 Zd
S )ADNSeasonIEzfhttps?://(?:www\.)?animationdigitalnetwork\.com/(?:(?P<lang>de)/)?video/(?P<id>\d+)[^/?#]*/?(?:$|[#?])z?https://animationdigitalnetwork.com/video/911-tokyo-mew-mew-new   Z911zTokyo Mew Mew New)r-   r/   )r;   Zplaylist_countr=   c                    s    |dd\pdjd< jj d ddjdd	 }t|d }jj d
| djdddd  fdd}| ||dS )Nrv   r-   rH   rw   zshow/r   zDownloading show JSON metadatary   r   zvideo/show/zDownloading episode listZascz-1)orderlimitr   c                  3   s>   t  dddthfD ]$} tdd| ddt| V  qd S )NZvideos.r-   z#https://animationdigitalnetwork.comr}   r   )delim)r   r   Z
url_resultr   r+   )Z
episode_idZepisodesrv   r]   Zvideo_show_slugr)   r*   entriesC  s    z*ADNSeasonIE._real_extract.<locals>.entriesr/   )r   r   r$   rm   r"   r   Zplaylist_resultrN   )r]   r;   r   Zshow_idr   r)   r   r*   r   5  s$    zADNSeasonIE._real_extractN)r   r   r    r   r   r   r)   r)   r)   r*   r   )  s   
r   )!rO   rQ   rJ   rV   r   r   commonr   Zaesr   r   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zutils.traversalr   r   r+   r   r)   r)   r)   r*   <module>   s   @ y