
    yf+7                         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 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e      Z! G d de!      Z" G d de!      Z#y)    N   )InfoExtractor   )aes_cbc_decrypt_bytesunpad_pkcs7)compat_b64decode)	HTTPError)ass_subtitles_timecodebytes_to_intlistbytes_to_longExtractorErrorfloat_or_noneint_or_noneintlist_to_byteslong_to_bytesparse_iso8601pkcs1padstrip_or_nonestr_or_nonetry_getunified_strdateurlencode_postdata)traverse_objc                   N    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y)	ADNBaseIEzAnimation Digital Network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      )middler    N)__name__
__module____qualname__IE_DESC_NETRC_MACHINE_BASE_API_BASE_URL_PLAYER_BASE_URL_HEADERS_LOGIN_ERR_MESSAGE_RSA_KEY_POS_ALIGN_MAP_LINE_ALIGN_MAP     6/usr/lib/python3/dist-packages/yt_dlp/extractor/adn.pyr   r       s[    )G.N(E%eWA.M'0H+ [HN
 Or2   r   c                       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 Zd Z	d  Z
y!)"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-soir 1c9ef066ceb302c86f80c2b3716152619841mp4zFruits Basket - Episode 1z$md5:14be2f72c3c96809b0ca424b0097d336zFruits Basketi  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)rH   only_matchingzMhttps://animationdigitalnetwork.de/video/the-eminence-in-shadow/23550-folge-1 5c5651bf5791fa6fcd7906012b9d94e823550i  20231004zThe Eminence in Shadowr   zSeason 2)r:   r;   rE   r?   r@   r>   rC   rD   r<   rF   rG   rA   rB   r=   )rH   rI   rJ   c                    |sy | j                  ||dd      xs d}| j                  ||d      xs i j                  d      }|r%| j                  ||dddd| j                  z   i	      }|sy t	        t        t        |d
d        t        j                  | j                  dz         t        |d d
                   }| j                  |j                         d d      }|sy i }|j                         D ]s  \  }}	d}
|	D ]  }t        |j                  d            t        |j                  d            |j                  d      |j                  d      |j                  d      f\  }}}}}|||u| j                  j                  |d      | j                  j                  |d      z   }|
t        j                   dt#        |      dt#        |      d|dk7  rd|z  nd|j%                  dd      j%                  dd      j%                  dd      z   z  }
 |dk(  rd }n|d!k(  rd"}|j'                  |g       j)                  d#t+        j,                  |	      d$d%|
d$g       v |S )&NzDownloading subtitles locationFfatalz{}locationzDownloading subtitles dataOriginzhttps://)rR   headers   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,Text	startTimeendTimetext	lineAlignpositionAlignr   r   zDialogue: Marked=0,,z,Default,,0,0,0,,z{\a%d} 
z\Nz<i>z{\i1}z</i>z{\i0}vostffrvostdedejson)r;   datassa)_download_webpage_parse_jsongetr)   r   r   r   binascii	unhexlify_Kdecodeitemsr   r/   r0   oslinesepr
   replace
setdefaultextendrd   dumps)selfsub_urlvideo_idenc_subtitlessubtitle_locationdec_subtitlessubtitles_json	subtitlessub_langsubrf   currentr   r    rZ   
line_alignposition_align	alignments                     r3   _get_subtitleszADNIE._get_subtitlesb   s   ..X?u / N VQU 	!--mXU-SYWY^^_ij 22!8-Ih
TZZ0G%H 3 JM  $$9]23/0tww);;<]3B/0%2 3 ))-*>*>*@$e)T	+113 !	MHcKC  b!'++k":;!'++i"89KK'[)AKK0	@2<sD*n
 =CK4< //33NAFI]I]IaIablnoIpp	rzz*51*3/-6!^I	)CLLu-55eXFNNvW_`	%b b bb 7"X%  2.55

38 7 7!	D r2   c                 n   	 | j                  | j                  dz   d d| j                  dt        |dd|d            xs i j	                  d      }|rdd	|z   i| _        y y # t        $ r}d }t        |j                  t              r|j                  j                  d
k(  rl| j                  |j                  j                  j                         j                         d d      xs i }|j	                  d      xs |j	                  d      }| j                  |xs | j                         Y d }~y d }~ww xY w)Nzauthentication/loginz
Logging inFWeb)password
rememberMesourceusername)rR   re   accessTokenauthorizationzBearer   rQ   messagecode)_download_jsonr*   r-   r   ri   r,   r   
isinstancecauser	   statusrh   responsereadrm   report_warning)ru   r   r   access_tokener   resps          r3   _perform_loginzADNIE._perform_login   s6   	D //""%;;Td55U' ("'# (	)  0   33}-  !0)l2J K  	DG!''9-!''..C2G''GG$$))+224d% ( I OLN ((9-A&1A B4+B+BCC	Ds   AA! !	D4*C D//D4c                    | j                  |      j                  dd      \  }}| j                  d|z  z   }| j                  |dz   |d| j                        d   }|d   }|d	   }|j                  d
      s[t        |ddt        hf      }t        |      xs dt        j                         kD  rt        d| d      | j                  dd       | j                  |j                  d      xs | j                  dz   |dd|d   id      d   }	t        |d       xs |dz   }
dj                  t        j                  dd !            | _        t#        t%        j&                  | j                   |	d"            }d }t)        d#      D ]  }t+        t-        |d$            }| j.                  \  }}t1        t3        t5        |      ||            }t7        j8                  |      j;                         }	 | j                  |
|d%||d&| j                  d'd(d'd)d*+      } n t        d2      |j                  d3      xs i }|j                  d4      xs i }|j                  d5      xs i j                  d6      }|j                  d      xs i }|d7   }g }|j                  d8      xs i jO                         D ]  \  }}t=        |tP              s|jO                         D ]  \  }}| j                  ||d9|d:|d;d<=      xs i }|j                  d>      }|s:| jS                  ||d?d@|d<A      } |dBk(  r| D ]  }!dC|!dD<   	 n|dEk(  r| D ]  }!dF|!dD<   	 |jU                  |          |s| j                  dd       | j                  | jV                  dG|z  z   |dHd<=      xs i j                  d      xs i }"|"j                  dI      xs i }#||tY        |j                  dJ      xs |"j                  dJ            |j                  dK      xs |j                  dK      || j[                  ||      |j                  dL      xs |"j                  dM      t]        |"j                  dN            |#j                  d7      t]        |"j                  dO            t]        |j                  dP      xs |"j                  dP            t_        |"j                  dQ            ta        |"j                  dR      xs |j                  dR            t]        |"j                  dS            dTS # t        $ r}t=        |j>                  t@              s||j>                  jB                  d,k(  rY d }~| jE                  |j>                  jF                  jI                         |      }|j                  d-      }|j>                  jJ                  d.k(  r&|j                  d/      d0k(  r| jM                  |1       t        |      d }~ww xY w)UNlangr:   z	video/%s/configurationz'Downloading player config JSON metadatarU   playeroptionsuser	hasAccessvideo	startDater   z/This video is not available yet. Release date: T)expectedz"This video requires a subscriptionr   )methodrefreshTokenUrlzrefresh/tokenzDownloading access tokenzX-Player-Refresh-TokenrefreshTokenr2   )rU   re   tokenc                     | d   d   S )Nr   rH   r1   )xs    r3   <lambda>z%ADNIE._real_extract.<locals>.<lambda>   s    qz%/@ r2   linkr^   0123456789abcdef   )k)r   tr      zDownloading links JSON metadata)zX-Player-TokenX-Target-Distributiontruefalser   )freeWithAdsadaptivewithMetadatar   rU   queryr   r   i  r   zplayer-bad-geolocation-country)msgzGiving up retryinglinksmetadatar|   allr<   	streamingzDownloading  z JSON metadataFrQ   rS   r8   m3u8_native)m3u8_idrR   vfra   languagevderc   zvideo/%sz%Downloading additional video metadatashowsummaryimagesubtitlenameshortNumberrG   r?   releaseDateratingcommentsCount)r:   r<   r=   rF   formatsr|   rD   rE   r>   rC   r?   r@   rB   rA   )1_match_valid_urlgroupr+   r   r,   ri   r   strr   timer   raise_login_requiredr   joinrandomchoicesrl   r   rd   rt   ranger   r   r.   r   powr   base64	b64encoderm   r   r   r	   r   rh   r   r   r   raise_geo_restrictedrn   dict_extract_m3u8_formatsrs   r*   r   extract_subtitlesr   r   r   )$ru   rH   r   rw   video_base_urlr   r   r   
start_dater   	links_urlr   
links_data_padded_messagenr   encrypted_messager   errorr   metasrv   
video_infor<   r   	format_id	qualitiesqualityload_balancer_urlload_balancer_datam3u8_urlm3u8_formatsfr   r   s$                                       r3   _real_extractzADNIE._real_extract   s   ..s399&$Gh..x1GG$$_,h5MM % # $,- #vxx$%gse/LMJj).Q$))+=$'VWaVb%cnrss%%&JS]%^##HH&'TD,A,AO,S0($~*>;	 $  !	" G%@A^nW]F]	''&..);rBC"4::/
 $  
q !	7A-hw.DEN==DAq -c-2OQRTU.V W",,->?FFHM.!00x)J*715U --U
 (.$+(."'	 1 

 %!	7B !!566w'-2z*0b99[)/R44U;^^G,2
g%*YY{%;%Ar$H$H$J 	- Iyi..7oo.? -**%)%8%8%x9BGL &9 &! &' %' # .11*=#99h}%U  :  4 $) -(,*-%') -(,*-|,#-	-, %%&JS]%^$$h!6635 % B HEGW\Y[ 	 yy &B (9)=)U9AUV#0GFJJw4G//Byy,A		&0A)%))M*BChhw'(8)<=#JNN:$>$W%))JBWX+EIIm,DE+EIIh,?,V599XCVW(?)CD
 	
k " .!!''95G77>>S((()9)9)>)>)@(K))I.77<<3&599V+<@`+`--'-:$W--.s   1*T!!	W9*5W4%BW44W9N)r$   r%   r&   
_VALID_URLintfloatr   _TESTSr   r   r   r1   r2   r3   r5   r5   3   s    sJ`10A%& #% 
  F'* r _1&.  #
/+FZ:xD*w
r2   r5   c                   *    e Zd ZdZddddddgZd Zy	)
ADNSeasonIEzghttps?://(?:www\.)?(?:animation|anime)digitalnetwork\.(?P<lang>fr|de)/video/(?P<id>[^/?#]+)/?(?:$|[#?])z:https://animationdigitalnetwork.fr/video/tokyo-mew-mew-new   911zTokyo Mew Mew New)r:   r<   )rH   playlist_countrJ   c           	           j                  |      j                  dd      \   j                   j                   d dd j                        d   }t        |d         } j                   j                   d| d	d
i j                  ddd       fd} j                   |       ||j                  d            S )Nr   r:   zshow/r   zDownloading show JSON metadatar   r   zvideo/show/zDownloading episode listr   ascz-1)orderlimitr   c            	   3      K   t        dddt        hf      D ]$  } j                  d d d|  t        |        & y w)Nvideos.r:   z https://animationdigitalnetwork.z/video/r   )r   r   
url_resultr5   )
episode_idepisodesr   ru   video_show_slugs    r3   entriesz*ADNSeasonIE._real_extract.<locals>.entriesI  sX     *8hTK=5YZ '
oo6tfGOCTTUV`Uab:' ''s   >Ar<   )r   r   r   r*   r,   r   playlist_resultri   )ru   rH   r   show_idr  r  r   r  s   `    @@@r3   r   zADNSeasonIE._real_extract9  s     $ 5 5c : @ @ No""!!"%'8:O,dmm # EEKM d4j/&&!!"+gY7&'1--1  ' 	' ##GIw8IJJr2   N)r$   r%   r&   r   r   r   r1   r2   r3   r   r   -  s*    {JK(
 FKr2   r   )$r   rj   rd   ro   r   r   commonr   aesr   r   compatr   networking.exceptionsr	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r5   r   r1   r2   r3   <module>r     sj       	   ! 4 % -    " + &w
I w
t"K) "Kr2   