3
b`H                 @   s   d dl m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
mZmZmZmZmZmZmZmZmZmZmZ G dd	 d	eZG d
d deZdS )    )unicode_literalsN   )InfoExtractor   )compat_parse_qscompat_urlparse)determine_extdict_getExtractorErrorint_or_nonefloat_or_noneparse_durationparse_iso8601remove_starttry_getunified_timestampurlencode_postdata
xpath_textc               @   s:  e Zd ZdZdZddddddd	d
deddeeddddddddddddddd
dddddd d!dd"ed#ed$	ddd%d&dd'd(dd)d*d+d,d-	d.dd/d0d1dd2d3dd4d5d6d7d8eed9ddd:d;dd<d=d>d?d@dAddBeedCdddDdEdFddGdHdIdJdKdKddLeedCdddMdNdOgZdPZdZdQdR Z	dSdT Z
dUdV ZdWdX ZdKS )Y
NiconicoIEniconicou   ニコニコ動画z(http://www.nicovideo.jp/watch/sm22312215Z d1a75c0823e2f629128c43e1212760f9Z
sm22312215mp4zBig Buck Bunnyzre:https?://.*Z
takuya0301Z2698420Z20131123z=(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org!   )idexttitle	thumbnailuploaderuploader_idupload_date	timestampdescriptionduration
view_countcomment_countzRequires an account)urlmd5	info_dictskipz(http://www.nicovideo.jp/watch/nm14296458Z
nm14296458swfu;   【鏡音リン】Dance on media【オリジナル】take2!z$md5:689f066d74610b3b22e0f1739add0f58u   りょうたZ18822557Z20110429i|wM   )
r   r   r   r    r   r   r   r   r   r!   )r$   r&   r'   z%http://www.nicovideo.jp/watch/sm10000Zsm10000unknown_videodeleteduM   ドラえもんエターナル第3話「決戦第3新東京市」＜前編＞Z20071224i0  )	r   r   r    r   r   r   r   r!   r"   z(http://www.nicovideo.jp/watch/so22543406Z
1388129933u[   【第1回】RADIOアニメロミックス ラブライブ！～のぞえりRadio Garden～z$md5:b27d224bb0ff53d3c8269e9f8b561cf1i 0RZ20140104u   アニメロチャンネルZ312)	r   r   r   r    r   r   r   r   r   zCThe viewing period of the video you were searching for has expired.z'http://www.nicovideo.jp/watch/sm1151009Z 8fa81c364eb619d4085354eab075598aZ	sm1151009uZ   マスターシステム本体内蔵のスペハリのメインテーマ（ＰＳＧ版）z$md5:6ee077e0581ff5019773e2e714cdd0b7   i;5FZ20070927Zdenden2Z1392194)r   r   r   r    r   r!   r   r   r   r   r"   r#   z(http://www.nicovideo.jp/watch/sm31464864Z
sm31464864uG   新作TVアニメ「戦姫絶唱シンフォギアAXZ」PV 最高画質z$md5:e52974af9a96e739196b2c1ca72b5febiQYZ20170626u	   ゲストZ40826363   )r   r   r   r    r   r   r   r   r   r!   r"   r#   z(http://www.nicovideo.jp/watch/sm18238488Z d265680a1f92bdcbbd2a507fc9e78a9eZ
sm18238488u0   【実写版】ミュータントタートルズz$md5:15df8988e47a86f9e978af2064bf6d8ei{OZ20120701Ni  z<http://sp.nicovideo.jp/watch/sm28964488?ss_pos=1&cp_in=wt_tgT)r$   only_matchingzPhttps?://(?:www\.|secure\.|sp\.)?nicovideo\.jp/watch/(?P<id>(?:[a-z]{2})?[0-9]+)c             C   s   | j   d S )N)_login)self r1   IC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\niconico.py_real_initialize   s    zNiconicoIE._real_initializec             C   s   | j  \}}|sdS d}||d}| jdd ddt|d}|dkrHd}n.tj|j }t|jjdd gd	 d
krvd}|s| j	j
d |S )NT)Zmail_telpasswordz)https://account.nicovideo.jp/api/v1/loginz
Logging inzUnable to log in)noteerrnotedataFmessager   Z
cant_loginz*unable to log in: bad username or password)_get_login_info_request_webpager   r   urlparsegeturlr   queryget_downloaderreport_warning)r0   usernamer4   Zlogin_oklogin_form_strsurlhpartsr1   r1   r2   r/      s$    zNiconicoIE._loginc             C   st  dd }|d d d }|d d }dj td	d
 ||g}| j|d |ddiddid| tjdd|d i|d |d d  |d d|d d|d dd|d g|d gdigigddd d!|d" ii|d# d$d%d&d'||d( ||d) d*iiid+|d, d-|d. |d/ d0id1d2ij d3}	|jd4i }
|	d5 d d6 |d7t|jd8d9t|jd8d9|
jd:|
jd;d<S )=Nc             S   s   | rdS dS )NZyesnor1   )Zbooleanr1   r1   r2   yesno   s    z5NiconicoIE._extract_format_for_quality.<locals>.yesnovideodmcInfoZsession_apiurlsr   -c             S   s   t | d dS )Nr   Zarchive_)r   )sr1   r1   r2   <lambda>   s    z8NiconicoIE._extract_format_for_quality.<locals>.<lambda>r$   _formatjsonzContent-Typezapplication/jsonz Downloading JSON metadata for %ssession	player_idZ
auth_types	protocolscontent_key_timeoutZ	nicovideoservice_user_id)Z	auth_typerR   Z
service_idrS   
content_idZcontent_src_idsZsrc_id_to_muxr   )Zaudio_src_idsZvideo_src_idsmovie 	heartbeatZlifetimeZheartbeat_lifetimepriorityhttpZhttp_parameters
parametersZhttp_output_download_parametersZis_sslZis_well_known_port)Zuse_sslZuse_well_known_port)namerZ   	recipe_idZ#session_operation_auth_by_signature	signaturetoken)r]   r^   Z	unlimited)Zclient_infoZcontent_authrT   Zcontent_src_id_setscontent_typecontent_uriZkeep_methodrX   protocolr\   Zsession_operation_authZtiming_constraint)r=   headersr5   r7   
resolutionr7   r`   r   bitratei  heightwidth)r$   	format_idr   abrvbrre   rf   )joinmap_download_jsonrN   dumpsencoder>   r   )r0   api_datavideo_idaudio_qualityvideo_qualityrF   Zsession_api_dataZsession_api_endpointrg   Zsession_responserc   r1   r1   r2   _extract_format_for_quality   sZ    


z&NiconicoIE._extract_format_for_qualityc                sj  | j |}| jd| |\}}|jdr6| j |j }| j| jd|ddd| fdd}y d	 d
 d W n tk
rb   | jd| d |d}tj	|}d|kr
d|krt
dddnHd|krt
dddn2d|krt
d| j|d d f ddnt
d| jd| |ddfdd}|d d |d}	|	sLt}	|	|dg}
Y nX g }
 d	 jd }|r|d! }xX|d" D ]L}xD|d# D ]8}|d$  s|d$  rq|
j| j ||| qW qW | j|
 nd%|dg}
 fd&d}|d'}|s$| j|d d}|s8| jd(|d)}| jd*|d+d d}|r\| j||ni }|jd,i }|d-d.gp| jd/|d0d dp|jd0}|d1}t|d2pt|d3}|s| jd4|d5d d}|rt|jd6d7}| r|jd8rt|d8 jd9d:d;tjd<d=d>}t|d?d@g}|s\| jdA|dBd d}|r\t|jdCdD}|pj|jd@}t|dEp|jdFpt dGdH }|s| jdI|dJd d}|rt|jdCdD}t|dKp| jdL|dMd dp|jdKp|dN}|dOp|}t dPdH tpi }|dQdRgp2|jdS}|dTdUgpJ|jdV}|||
|||||||||dWS )XNzhttp://www.nicovideo.jp/watch/sozdata-api-data="([^"]+)"zAPI dataz{})defaultc                s    j drdS dS )NlowZeconomynormal)endswith)	video_url)video_real_urlr1   r2   _format_id_from_url  s    z5NiconicoIE._real_extract.<locals>._format_id_from_urlrG   Z	smileInfor$   z%http://flapi.nicovideo.jp/api/getflv/z?as3=1zDownloading flv infor+   zThe video has been deleted.T)expectedclosedz&Niconico videos now require logging inerrorz%s reports error: %sr   zUnable to find video URLz)http://ext.nicovideo.jp/api/getthumbinfo/zDownloading video info page)r5   c                s8   t | ts| g} x"| D ]}t d| }|r|S qW d S )Nz.//)
isinstancelistr   )itemsitemret)video_info_xmlr1   r2   get_video_info9  s    

z0NiconicoIE._real_extract.<locals>.get_video_infoZ
movie_type)r$   r   rg   rH   qualityaudiosvideos	availabler   c                s   t  d | S )NrG   )r	   )r   )ro   r1   r2   r   a  s    r   z6<span[^>]+class="videoHeaderTitle"[^>]*>([^<]+)</span>zvideo titlez6<div[^>]+id="watchAPIDataContainer"[^>]+>([^<]+)</div>zwatch api datavideoDetailthumbnail_urlthumbnailURLimager   r    Zfirst_retrieveZpostedDateTimedatePublishedzdate published+z:00+ZpostedAt/rJ    	   )hours)	delimitertimezoneZview_counter	viewCountz%>Views: <strong[^>]*>([^<]+)</strong>z
view count,rV   Zcomment_numcommentCountc             S   s   | d d S )Nthreadr   r1   )xr1   r1   r2   rL     s    z*NiconicoIE._real_extract.<locals>.<lambda>z(>Comments: <strong[^>]*>([^<]+)</strong>zcomment countlengthzvideo:durationzvideo durationr!   Z	watch_urlc             S   s
   | j dS )Nowner)r>   )r   r1   r1   r2   rL     s    Zch_iduser_idr   Zch_nameuser_nicknamenickname)r   r   formatsr   r    r   r   r   r"   r#   r!   webpage_url)	_match_id_download_webpage_handle
startswithr<   _parse_json_html_search_regexKeyError_download_webpager   parse_qsr
   IE_NAME_download_xmlr   r>   appendrs   _sort_formats_og_search_title_html_search_metar   r   replacedatetime	timedeltar   r   r   dict)r0   r$   rp   webpagehandler{   Zflv_info_webpageZflv_infor   	extensionr   Zdmc_infoZquality_inforq   rr   r   Zwatch_api_data_stringZwatch_api_dataZvideo_detailr   r    r   matchr"   r#   r!   r   r   r   r   r1   )ro   r   rz   r2   _real_extract  s    










zNiconicoIE._real_extract)__name__
__module____qualname__r   IE_DESCint_TESTS
_VALID_URL_NETRC_MACHINEr3   r/   rs   r   r1   r1   r1   r2   r      s   
Nr   c               @   s*   e Zd ZdZddddddZdd	 Zd
S )NiconicoPlaylistIEz3https?://(?:www\.)?nicovideo\.jp/mylist/(?P<id>\d+)z'http://www.nicovideo.jp/mylist/27411728Z27411728u&   AKB48のオールナイトニッポン)r   r      )r$   r&   playlist_mincountc             C   sT   | j |}| j||}| jd|d}tj|}dd |D }d| jd|d||dS )	Nz!Mylist\.preload\(\d+, (\[.*\])\);entriesc             S   s(   g | ] }d t j d|d d  dqS )r$   z http://www.nicovideo.jp/watch/%sZ	item_datarp   )_typeie_keyr$   )r   r   ).0entryr1   r1   r2   
<listcomp>  s   z4NiconicoPlaylistIE._real_extract.<locals>.<listcomp>playlistz\s+name: "(.*?)"r   )r   r   r   r   )r   r   _search_regexrN   loads)r0   r$   list_idr   Zentries_jsonr   r1   r1   r2   r     s    

z NiconicoPlaylistIE._real_extractN)r   r   r   r   _TESTr   r1   r1   r1   r2   r     s   r   )
__future__r   rN   r   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   s   8   