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
st	| j|}| j|d dt
|d| jid t fdddD r| jd dd dd	}|rt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}|sTqt|d}|rt d|}|r||d|d|dddddd q|dd }|d!}|rt|tsq|| }|d"}|sq|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qq|||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 st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
    
