U
    Mf7                     @   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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_intlistbytes_to_longfloat_or_noneint_or_noneintlist_to_bytes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*   8/tmp/pip-unpacked-wheel-zk9bgjdq/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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\.)?(?:animation|anime)digitalnetwork\.(?P<lang>fr|de)/video/[^/?#]+/(?P<id>\d+)zOhttps://animationdigitalnetwork.fr/video/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skipz`http://animedigitalnetwork.fr/video/blue-exorcist-kyoto-saga/7778-episode-1-debut-des-hostilitesT)r<   Zonly_matchingzMhttps://animationdigitalnetwork.de/video/the-eminence-in-shadow/23550-folge-1Z 5c5651bf5791fa6fcd7906012b9d94e8Z23550i  Z20231004zThe Eminence in Shadowr   zSeason 2)r.   r/   r9   r3   r4   r2   r7   r8   r0   r:   r;   r5   r6   r1   )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 ks|d ks|d k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://)rA   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_subtitlesa   sz           



zADNIE._get_subtitlesc                 C   s   zL| j | jd d d| jdt|dd|ddp0i d}|rJdd	| i| _W n tk
r } zdd }t|jt	r|jj
d
kr| j|jj  d ddpi }|dp|d}| |p| j W 5 d }~X Y nX d S )Nzauthentication/loginz
Logging inFWeb)passwordZ
rememberMesourceusername)rA   rK   ZaccessTokenauthorizationzBearer   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   s@       	  zADNIE._perform_loginc           $      C   s  |  |dd\}}| jd| d }| j|d |d| jdd }|d	 }|d
 }|dst|ddthf}t|pzd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| }z6| j|
|d'||d(| jd)d*d)d+d,d-}W  qDW n t
k
r6 } z~t|jt s||jj!d.krW Y Xq"| "|jj#$ |}|d/}|jj%d0kr|d1d2kr| j&|d3 t
|W 5 d }~X Y nX q"t
d4|d5pRi }|d6pbi }|d7pri d8}|dpi }|d9 }g }|d:pi ' D ]\}}t|t(sq|' D ]\}}| j||d;| d<| d=d>d?pi }|d@}|sq| j)||dAdB|d>dC} |dDkrB| D ]}!dE|!dF< q0n|dGkr`| D ]}!dH|!dF< qP|*|  qʐq|s| jddd | j| j+d|  |dId>d?pi dpi }"|"dJpi }#||t,|dKp|"dK|dLp|dL|| -|||dMp|"dNt.|"dO|#d9t.|"dPt.|dQpL|"dQt/|"dRt0|"dSpp|dSt.|"dTdUS )VNlangr.   z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 metadata)zX-Player-TokenX-Target-Distributiontruefalsere   )ZfreeWithAdsZadaptiveZwithMetadatarg   rC   queryrj   rk   i  rl   zplayer-bad-geolocation-country)msgzGiving up retryinglinksmetadatar`   allr0   Z	streamingzDownloading  z JSON metadataFr@   rB   r-   Zm3u8_native)Zm3u8_idrA   ZvfrH   languageZvderI   z%Downloading additional video metadatashowsummaryimageZsubtitlenameZshortNumberr;   r3   ZreleaseDateZratingZcommentsCount)r.   r0   r1   r:   formatsr`   r8   r9   r2   r7   r3   r4   r6   r5   )1_match_valid_urlgroupr$   rm   r%   rN   r   strr   timer   Zraise_login_requiredr   joinrandomchoicesrS   r
   rJ   r\   ranger   r   r'   r   powr   rO   	b64encoderT   rn   ro   r   rp   rM   rq   rr   rl   Zraise_geo_restrictedrU   dictZ_extract_m3u8_formatsr[   r#   r   Zextract_subtitlesr   r   r   )$r]   r<   rv   r_   Zvideo_base_urlry   rz   r{   Z
start_dater   Z	links_urlrk   Z
links_data_Zpadded_messagenrs   Zencrypted_messageri   errorr   Zmetasr^   Z
video_infor0   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,   2   sZ   -<r,   c                   @   s,   e Zd ZdZddddddgZdd	 Zd
S )ADNSeasonIEzghttps?://(?:www\.)?(?:animation|anime)digitalnetwork\.(?P<lang>fr|de)/video/(?P<id>[^/?#]+)/?(?:$|[#?])z:https://animationdigitalnetwork.fr/video/tokyo-mew-mew-new   Z911zTokyo Mew Mew New)r.   r0   )r<   Zplaylist_countr>   c                    s    |dd\jj d ddjdd }t|d }jj d| d	d
ijdddd  fdd}| ||dS )Nrv   r.   zshow/r   zDownloading show JSON metadatarx   r   zvideo/show/zDownloading episode listr   Zascz-1)orderlimitr   c               	   3   s@   t  dddthfD ]&} d d d|  t| V  qd S )NZvideos.r.   z https://animationdigitalnetwork.z/video/r   )r   r   Z
url_resultr,   )Z
episode_idZepisodesrv   r]   Zvideo_show_slugr*   r+   entriesH  s     z*ADNSeasonIE._real_extract.<locals>.entriesr0   )r   r   rm   r#   r%   r   Zplaylist_resultrN   )r]   r<   r   Zshow_idr   r*   r   r+   r   8  s2        
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   r   Zutils.traversalr   r   r,   r   r*   r*   r*   r+   <module>   s   D {