U
    y^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   |    d S )N)_login)self r1   PC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\niconico.py_real_initialize   s    zNiconicoIE._real_initializec                 C   s   |   \}}|sdS d}||d}| jdd ddt|d}|dkrHd}n.t| }t|jdd gd	 d
krvd}|s| 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 td	d
 ||g}| j|d |ddiddid| t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 d3}	|d4i }
|	d5 d d6 |d7t|d8d9t|d8d9|
d:|
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>       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_typerS   Z
service_idrT   
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)namer[   	recipe_idZ#session_operation_auth_by_signature	signaturetoken)r^   r_   Z	unlimited)Zclient_infoZcontent_authrU   Zcontent_src_id_setscontent_typecontent_uriZkeep_methodrY   protocolr]   Zsession_operation_authZtiming_constraint)r=   headersr5   r7   
resolutionr7   ra   r   bitratei  heightwidth)r$   	format_idr   abrvbrrf   rg   )joinmap_download_jsonrO   dumpsencoder>   r   )r0   api_datavideo_idaudio_qualityvideo_qualityrF   Zsession_api_dataZsession_api_endpointrh   Zsession_responserd   r1   r1   r2   _extract_format_for_quality   s       

9z&NiconicoIE._extract_format_for_qualityc                    s\  |  |}| d| |\}}|dr6|  | }| | jd|ddd| fdd}z d	 d
 d W n tk
rb   | d| d |d}t	|}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	 d }|r|d! }|d" D ]D}|d# D ]4}|d$ r|d$ sq|
|  ||| qq| |
 nd%|dg}
 fd&d}|d'}|s| j|d d}|s,| d(|d)}| jd*|d+d d}|rP| ||ni }|d,i }|d-d.gp| jd/|d0d dp|d0}|d1}t|d2pt|d3}|s| jd4|d5d d}|rt|d6d7}|s|d8rt|d8 d9d:d;tjd<d=d>}t|d?d@g}|sN| jdA|dBd d}|rNt|dCdD}|p\|d@}t|dEp|dFpt dGdH }|s| jdI|dJd d}|rt|dCdD}t|dKp| jdL|dMd dp|dKp|dN}|dOp|}t dPdH tpi }|dQdRgp$|dS}|dTdUgp<|dV}|||
|||||||||dWS )XNzhttp://www.nicovideo.jp/watch/sozdata-api-data="([^"]+)"zAPI dataz{})defaultc                    s     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} | D ]}t d| }|r|  S q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   rh   rH   qualityaudiosvideos	availabler   c                    s   t  d | S )NrG   )r	   )r   )rp   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,rW   Zcomment_numcommentCountc                 S   s   | d d S )Nthreadr   r1   xr1   r1   r2   rL     rM   z*NiconicoIE._real_extract.<locals>.<lambda>z(>Comments: <strong[^>]*>([^<]+)</strong>zcomment countlengthzvideo:durationzvideo durationr!   Z	watch_urlc                 S   s
   |  dS )Nowner)r>   r   r1   r1   r2   rL     rM   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>   appendrt   _sort_formats_og_search_title_html_search_metar   r   replacedatetime	timedeltar   r   r   dict)r0   r$   rq   webpagehandler|   Zflv_info_webpageZflv_infor   	extensionr   Zdmc_infoZquality_inforr   rs   r   Zwatch_api_data_stringZwatch_api_dataZvideo_detailr   r    r   matchr"   r#   r!   r   r   r   r   r1   )rp   r   r{   r2   _real_extract  sN   
 
  
 


 
       
 
    
   zNiconicoIE._real_extract)__name__
__module____qualname__r   IE_DESCint_TESTS
_VALID_URL_NETRC_MACHINEr3   r/   rt   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   |  |}| ||}| d|d}t|}dd |D }d| d|d||dS )	Nz!Mylist\.preload\(\d+, (\[.*\])\);entriesc                 S   s(   g | ] }d t  d|d d  dqS )r$   z http://www.nicovideo.jp/watch/%sZ	item_datarq   )_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_regexrO   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   rO   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   