U
    ¦y^0  ã                   @   s`   d dl mZ d dl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 G dd	„ d	eƒZdS )
é    )Úunicode_literalsNé   )ÚInfoExtractoré   )Ú
compat_str)Údetermine_extÚextract_attributesÚExtractorErrorÚurl_or_noneÚurlencode_postdataÚurljoinc                   @   s€   e Zd ZdZdZdZdZddddd	gZd
ddddœddœdddœdddœdddœdddœdddœgZdd„ Z	dd„ Z
dd„ ZdS )ÚAnimeOnDemandIEz8https?://(?:www\.)?anime-on-demand\.de/anime/(?P<id>\d+)z,https://www.anime-on-demand.de/users/sign_inz)https://www.anime-on-demand.de/html5applyÚanimeondemandÚATÚCHÚDEÚLIÚLUz(https://www.anime-on-demand.de/anime/161Z161z"Grimgar, Ashes and Illusions (OmU)z$md5:6681ce3c07c7189d255ac6ab23812d31©ÚidÚtitleÚdescriptioné   )ÚurlÚ	info_dictÚplaylist_mincountz'https://www.anime-on-demand.de/anime/39T)r   Úonly_matchingz(https://www.anime-on-demand.de/anime/162z(https://www.anime-on-demand.de/anime/169z(https://www.anime-on-demand.de/anime/185z'https://www.anime-on-demand.de/anime/12c                    sð   |   ¡ \}}|d krd S |  | jd d¡}d|kr@|  d| j ¡ |  d|¡}| ||dœ¡ | jd|d| jdd	�}| d
¡sˆt	| j|ƒ}| j|d dt
|ƒd| jid�‰ t‡ fdd„dD ƒƒrì| jdˆ dd dd	�}|rätd| dd�‚tdƒ‚d S )NzDownloading login pageza>Our licensing terms allow the distribution of animes only to German-speaking countries of Europez;%s is only available in German-speaking countries of EuropeZnew_user)zuser[login]zuser[password]z&<form[^>]+action=(["\'])(?P<url>.+?)\1zpost urlr   ©ÚdefaultÚgroupÚhttpz
Logging inÚReferer)ÚdataÚheadersc                 3   s   | ]}|ˆ kV  qd S ©N© )Ú.0Úp©Úresponser%   úUC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\animeondemand.pyÚ	<genexpr>W   s     z)AnimeOnDemandIE._login.<locals>.<genexpr>)z>Logout<zhref="/users/sign_out"zQ<p[^>]+\bclass=(["\'])(?:(?!\1).)*\balert\b(?:(?!\1).)*\1[^>]*>(?P<error>.+?)</p>ÚerrorzUnable to login: %sT)ÚexpectedzUnable to log in)Ú_get_login_infoÚ_download_webpageÚ
_LOGIN_URLÚraise_geo_restrictedÚIE_NAMEÚ_form_hidden_inputsÚupdateÚ_search_regexÚ
startswithr   r   Úallr	   )ÚselfÚusernameÚpasswordÚ
login_pageÚ
login_formÚpost_urlr,   r%   r(   r*   Ú_login7   s\      ÿÿþ   þ
   ÿþ   þzAnimeOnDemandIE._loginc                 C   s   |   ¡  d S r$   )r>   )r8   r%   r%   r*   Ú_real_initialize_   s    z AnimeOnDemandIE._real_initializec                    sà   ˆ  ˆ¡‰ˆ ˆˆ¡}d|kr<ˆ ˆjˆdd¡ ˆ ˆˆ¡}ˆjd|ddd�‰ˆ d|d	¡‰ˆjd
|dd d�‰ g ‰d‡‡‡fdd„	‰d‡‡‡‡fdd„	‰‡‡‡fdd„}‡ ‡‡‡fdd„}||ƒ ˆsÐ||ˆƒ ˆ ˆˆˆˆ ¡S )Nzdata-playlist=zActivating HTML5 betazUnable to apply HTML5 betaz
csrf-tokenz
csrf tokenT)Úfatalz+(?s)<h1[^>]+itemprop="name"[^>]*>(.+?)</h1>z
anime namez4(?s)<div[^>]+itemprop="description"[^>]*>(.+?)</div>zanime description©r   c                    s  d gd \}}g }t  d| ¡D �]Ø}t|ƒ}| d¡}g }dD ]2}	| |	¡}
t|
tƒr>t  d|
¡r>| ||	 ¡ q>|sxq| d¡}| d¡}|D �]d}
ˆjd|
d	d d
�}g }|rº| |¡ |rÈ| |¡ |sâ|d k	râ| t|ƒ¡ d 	|¡}d 	t
d ||fƒ¡}g }|�r| |¡ | d¡ ˆjtˆ|
ƒ|dd 	|¡ dˆ ˆddœdd�}|�sTq�t| d¡ƒ}|�rªt  d|¡}|�rª| | d¡| d¡| d¡ˆdddddœ¡ q�| dd ¡}| d!¡}|r�t|tƒ�sÒq�|| }| d"¡}|�sìq�| d#¡}| d$g ¡D ]ò}| d%¡}|�s�qt|ƒ}||g}|d&k�r@| d'¡ n$| d(¡d)k�sZ|d*k�rd| d+¡ d 	t
d |ƒ¡}|d&k�r–ˆj||d,d-|dd.�}n6| d(¡d)k�s|d*k�r�qˆj|||dd/�}n�q|D ]}| ||d0œ¡ �qÐ| |¡ �qq�q|||d1œS )2Nr   z,<input[^>]+class=["\'].*?streamstarter[^>]+>zdata-dialog-header)zdata-playlistzdata-otherplaylistzdata-streamz/?[\da-zA-Z]+z	data-langÚvaluezvideomaterialurl/\d+/([^/]+)/z
media kindrA   ú-z, ZvideomaterialzDownloading %s JSONú ZXMLHttpRequestz.application/json, text/javascript, */*; q=0.01)zX-Requested-WithzX-CSRF-Tokenr!   ÚAcceptF)r#   r@   Z	streamurlzF^(?P<url>rtmpe?://(?P<host>[^/]+)/(?P<app>.+/))(?P<playpath>mp[34]:.+)r   ÚappÚplaypathzYhttps://www.anime-on-demand.de/assets/jwplayer.flash-55abfb34080700304d49125ce9ffb4a6.swfTÚrtmpÚflv)r   rF   Ú	play_pathÚpage_urlÚ
player_urlÚrtmp_real_timeÚ	format_idÚextZ
startvideor   Úplaylistr   r   ÚsourcesÚfileÚm3u8ÚhlsÚtypez
video/dashÚmpdÚdashÚmp4Úm3u8_native)Úentry_protocolÚm3u8_idr@   )Úmpd_idr@   )ÚlanguageÚformat_note)r   r   Úformats)ÚreÚfindallr   ÚgetÚ
isinstancer   ÚmatchÚappendr5   ÚjoinÚfilterÚ_download_jsonr   r
   Úsearchr   Úlistr   Ú_extract_m3u8_formatsÚ_extract_mpd_formatsr4   Úextend)ÚhtmlÚvideo_idÚnumr   r   r_   Zinput_Z
attributesZplaylist_urlsZplaylist_keyZplaylist_urlÚlangZ	lang_noteÚkindZformat_id_listrN   r^   Zitem_id_listrP   Z
stream_urlrH   Zstart_videoÚsourceZfile_rO   Zfile_formatsÚf)Ú
csrf_tokenr8   r   r%   r*   Úextract_infoy   sî     ÿ


 ÿ


  þ




 üø	þø







    þ   ÿþýz3AnimeOnDemandIE._real_extract.<locals>.extract_infoc              	      s¦   ˆ| ||ƒ}|d r>ˆ  |d ¡ | ¡ }| |¡ ˆ  |¡ |d s¢t d| ¡}|r¢| ¡ }| d|d | d¡ ¡ f | d¡tˆ| d¡ƒdœ¡ ˆ  |¡ d S )	Nr_   zidata-dialog-header=(["\'])(?P<title>.+?)\1[^>]+href=(["\'])(?P<href>.+?)\3[^>]*>(?P<kind>Teaser|Trailer)<z%s-%sr   rr   r   Úhref)r   r   r   )	Ú_sort_formatsÚcopyr4   re   r`   ri   r   Úlowerr   )rn   ro   Úcommon_inforp   Úinfort   Úm)Úentriesrv   r8   r   r%   r*   Úextract_entrieså   s&    

þýz6AnimeOnDemandIE._real_extract.<locals>.extract_entriesc                    s„   t t d| ¡dƒD ]l\}}ˆjd|dd dd�}|s4qtˆjd|d|d	�ƒ}ˆjd
|dd d	�}d| }|ˆ ||dœ}ˆ|||ƒ qd S )Nz7(?s)<h3[^>]+class="episodebox-title".+?>Episodeninhalt<r   )z:class="episodebox-title"[^>]+title=(["\'])(?P<title>.+?)\1z-class="episodebox-title"[^>]+>(?P<title>.+?)<zepisodebox titler   r   z(?:Episode|Film)\s*(\d+)zepisode numberrA   z!(?:Episode|Film)\s*\d+\s*-\s*(.+)zepisode titlez
episode-%d)r   ÚseriesÚepisodeÚepisode_number)Ú	enumerater`   ra   r5   Úint)rn   rp   Zepisode_htmlZepisodebox_titler‚   Úepisode_titlero   r{   )Úanime_titler   r8   r%   r*   Úextract_episodesü   sD     ÿÿ   ý  þ  þüz7AnimeOnDemandIE._real_extract.<locals>.extract_episodesc                    s   ˆˆˆ dœ}ˆ| ||ƒ d S )Nr   r%   )rn   ro   r{   )Úanime_descriptionÚanime_idr†   r   r%   r*   Úextract_film  s
    ýz3AnimeOnDemandIE._real_extract.<locals>.extract_film)N)N)Ú	_match_idr/   Ú_APPLY_HTML5_URLÚ_html_search_metaÚ_html_search_regexÚplaylist_result)r8   r   Úwebpager‡   rŠ   r%   )	rˆ   r‰   r†   ru   r~   r   rv   r8   r   r*   Ú_real_extractb   sH    
  þ   ÿ þ  þl
zAnimeOnDemandIE._real_extractN)Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLr0   rŒ   Ú_NETRC_MACHINEÚ_GEO_COUNTRIESÚ_TESTSr>   r?   r‘   r%   r%   r%   r*   r      s>   ýøýýýýýç(r   )Ú
__future__r   r`   Úcommonr   Úcompatr   Úutilsr   r   r	   r
   r   r   r   r%   r%   r%   r*   Ú<module>   s
    
