
    yf                        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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m Z m!Z!m"Z"m#Z#  G d d	e
      Z$ G d
 de
      Z% G d de%      Z& G d de
      Z' G d de%      Z( G d de
      Z) G d de)e      Z* G d de)      Z+ G d de)e      Z, G d de)      Z- G d de
      Z. G d de
      Z/y)     N   )InfoExtractorSearchInfoExtractor   )Request)	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmlfloat_or_noneint_or_nonejoin_nonemptyparse_durationparse_iso8601parse_resolution	qualitiesremove_startstr_or_nonetraverse_objtry_getunescapeHTMLupdate_url_queryurl_or_noneurlencode_postdataurljoinc                      e Zd ZdZdZdgZdZddddd	d
dddeddeedgg edddddddd
dddddeedgg deddd d!d"d#d$d
d%ed&ed'	d(d)d*d+dd,d-d
d.d/d0d1d2	d3d)d4d5d6dd7d8d
d9d:d;d<d=eed>gg ed?dd@dAddBdCdDdEdFdGd
dHeedIgg edJddKdLdMddNdOdPdQd
dReedSgg edTddUdVdWdXdYdVdZg	Z	d[Z
dZd\d]d^d_d`daZdb Zdc Zdd Zde Zdf Zdg Zdh Zyi)j
NiconicoIEniconicou   ニコニコ動画JPFz(http://www.nicovideo.jp/watch/sm22312215 d1a75c0823e2f629128c43e1212760f9
sm22312215mp4zBig Buck Bunnyzre:https?://.*
takuya0301269842020131123z=(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org!   u	   未設定)idexttitle	thumbnailuploaderuploader_idupload_date	timestampdescriptionduration
view_countcomment_countgenrestagsexpected_protocol)urlmd5	info_dictz(http://www.nicovideo.jp/watch/nm14296458
nm14296458u4   【Kagamine Rin】Dance on media【Original】take2!z$md5:9368f2b1f4178de64f2602c2f3d6cbf5u   りょうた1882255720110429i|wMg      j@u   音楽・サウンド)Translation_RequestKagamine_RinRin_Original)r'   r(   r)   r/   r*   r+   r,   r-   r.   r0   r2   r1   r3   r4   r5   )r6   r8   z%http://www.nicovideo.jp/watch/sm10000sm10000unknown_videodeleteduM   ドラえもんエターナル第3話「決戦第3新東京市」＜前編＞20071224i0  )	r'   r(   r/   r)   r*   r-   r.   r0   r1   zRequires an account)r6   r8   skipz(http://www.nicovideo.jp/watch/so22543406
1388129933u[   【第1回】RADIOアニメロミックス ラブライブ！～のぞえりRadio Garden～z$md5:b27d224bb0ff53d3c8269e9f8b561cf1i 0R20140104u   アニメロチャンネル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/sm1151009 f95a3d259172667b293530cc2e41ebda	sm1151009uZ   マスターシステム本体内蔵のスペハリのメインテーマ（ＰＳＧ版）z$md5:f95a3d259172667b293530cc2e41ebda   iF20070926denden21392194u	   ゲーム)r'   r(   r)   r/   r*   r0   r.   r-   r+   r,   r1   r2   r3   r4   r5   z(http://www.nicovideo.jp/watch/sm31464864
sm31464864uG   新作TVアニメ「戦姫絶唱シンフォギアAXZ」PV 最高画質z$md5:e52974af9a96e739196b2c1ca72b5febiQY20170626z
no-namamae40826363   u	   アニメ)r'   r(   r)   r/   r.   r-   r+   r,   r*   r0   r1   r2   r3   r4   r5   z(http://www.nicovideo.jp/watch/sm18238488 d265680a1f92bdcbbd2a507fc9e78a9e
sm18238488u0   【実写版】ミュータントタートルズz$md5:15df8988e47a86f9e978af2064bf6d8eiHO20120701i  u   エンターテイメント)r'   r(   r)   r/   r.   r-   r*   r0   r1   r2   r3   r4   r5   z<http://sp.nicovideo.jp/watch/sm28964488?ss_pos=1&cp_in=wt_tgTr6   only_matchingz0a video that is only served as an ENCRYPTED HLS.z)https://www.nicovideo.jp/watch/so38016254noter6   rU   z]https?://(?:(?:www\.|secure\.|sp\.)?nicovideo\.jp/watch|nico\.ms)/(?P<id>(?:[a-z]{2})?[0-9]+)60en-ushttps://www.nicovideo.jp/https://www.nicovideo.jp)X-Frontend-IDX-Frontend-VersionX-Niconico-LanguageRefererOriginc                    d}||d}| j                  dd d       | j                  dd ddt        |      dd	d
      }d|v r| j                  d|dd      }| j                  t	        d|      d ddt        d| j                  d      i      dd	i      }d|v sd|v r:| j                  d|ddt        j                        }| j                  d| d       yd|v}|s| j                  d        |S )!NT)mail_telpasswordz"https://account.nicovideo.jp/loginzAcquiring Login sessionrW   zhhttps://account.nicovideo.jp/login/redirector?show_button_twitter=1&site=niconico&show_button_facebook=1z
Logging inzUnable to log inz!application/x-www-form-urlencoded)r`   Content-Type)rW   errnotedataheaders	oneTimePwz&<form[^>]+action=(["\'])(?P<url>.+?)\1zpost urlr6   )groupzhttps://account.nicovideo.jpzPerforming MFAzUnable to complete MFAotpz6 digits coderf   	formErrorzformError["\']+>(.*?)</div>
form_errorz1There's an error but the message can't be parsed.)defaultflagsz)Unable to log in: MFA challenge failed, ""Fzclass="notice error"z*Unable to log in: bad username or password)
_request_webpage_download_webpager   _search_regexr   _get_tfa_info_html_search_regexreDOTALLreport_warning)selfusernamerd   login_oklogin_form_strspagepost_urlerr_msgs           ;/usr/lib/python3/dist-packages/yt_dlp/extractor/niconico.py_perform_loginzNiconicoIE._perform_login   sZ     
 	0$* 	 	, %%vx|'9#O4? C	 &  $))94SX * ZH))6A4%/G'4--o>)  #$G * D d"kT&9112D,Q)) 2 % ##&OPWyXY$Z[)5 LM    c                     |d   j                  d      d   j                  d      \  }}|d   }|j                  d      xs8  j                   j                  d j	                  dz         d	d
            t        d       t        d       } fd}d }|dk(  r(d}d |d   d   d          |d   d   d         di}	n|dk(  rd}t         j                  d      d       xs d}
 j                  d         }t        d      }d|
d |d   d   d          |d   d   d         d i}	d!|v r|r|d!   |d"   |d#   d$i|	d   d%<   nd&}nt        d'|        j                  |d   d(d)id*d+id,|d-   z  t        j                  d.d/j                  d0      it        fd1      j                  d2      d3j                  d4      d5j                  d6      d7d8|g|gd9igigd:dd;d<j                  d=      iid>   dd?d@|	iidAj                  dB      dCj                  dD      j                  d      dEidFdGi      j                         H      }|dI   d.   dJ   |d<   ||dK<   |d   dz   |dI   d.   dL   z   dMz   t        j                  |dI         t        j                  d=      dNO      |dP}||fS )QNr6   :r   /r5   	_api_datadata-api-data="([^"]+)"https://www.nicovideo.jp/watch/API data{}ro   c                     | d   d   d   d   S )Nmediadeliverymoviesession xs    r   <lambda>z0NiconicoIE._get_heartbeat_info.<locals>.<lambda>   s    qz*7Mg7VW`7a r   c                     | d   d   S )Nurlsr   r   r   s    r   r   z0NiconicoIE._get_heartbeat_info.<locals>.<lambda>   s    1V9Q< r   c                      t        d      } | rPt        dd| i      }j                  |ddj                        }t        |d      dk7  rj	                  d	       y y y )
N)r   r   
trackingIdz,https://nvapi.nicovideo.jp/v1/2ab0cbaa/watchtz*Acquiring permission for downloading videoF)rW   fatalri   )metastatus   zHFailed to acquire permission for playing video. Video download may fail.)r   r   _download_json_API_HEADERSry   )tracking_idtracking_urlwatch_request_responseapi_datarz   video_ids      r   pingz,NiconicoIE._get_heartbeat_info.<locals>.ping   s}    &x1TUK/0^adfq`rs)-)<)< (EU -- *= */&   68JKsR''(rs S r   c                     | rdS dS )Nyesnor   r   s    r   r   z0NiconicoIE._get_heartbeat_info.<locals>.<lambda>  s    1% $ r   httphttp_output_download_parametersr   r   isSslisWellKnownPort)use_ssluse_well_known_porthlsm3u8segment_durationc                     t        | d         S Nr   )intr   s    r   r   z0NiconicoIE._get_heartbeat_info.<locals>.<lambda>  s    ^abcdebf^g r   ip  token)r   r   
encryptionhls_parameters )r   transfer_presetr   r   hls_encryptionencryptedKeykeyUri)encrypted_keykey_urir   m3u8_nativezUnsupported DMC protocol: _formatjsonrf   zapplication/jsonz Downloading JSON metadata for %s	format_idr   	player_idplayerIdc                      | d   d   d      S )N	authTypes	protocolsr   r   )r   session_api_datas    r   r   z0NiconicoIE._get_heartbeat_info.<locals>.<lambda>1  s    ;XhitXuvwXxIy r   contentKeyTimeout	nicovideoserviceUserId)	auth_typecontent_key_timeout
service_idservice_user_id	contentIdcontent_src_idssrc_id_to_mux)audio_src_idsvideo_src_idsr   	heartbeatlifetimeheartbeatLifetimepriorityhttp_parameters
parameters)namer   recipeId#session_operation_auth_by_signature	signature)r   r   	unlimited)client_infocontent_auth
content_idcontent_src_id_setscontent_typecontent_urikeep_methodr   protocol	recipe_idsession_operation_authtiming_constraint)queryri   rW   rh   rh   r   r   r'   z?_format=json&_method=PUTi  scale)r6   rh   intervalr   )splitget_parse_jsonrv   rs   r   _configuration_argr   r	   r   r   dumpsencoder   )rz   r8   video_src_idaudio_src_iddmc_protocolsession_api_endpointr   yesnor   protocol_parametersr   parsed_tokenr   session_responseheartbeat_info_dictr   r   r   s   `              @@@r   _get_heartbeat_infozNiconicoIE._get_heartbeat_info   s
   /8/?/E/Ec/J1/M/S/STW/X,, !45 MM+& ''-**+Lx+WYab ( .  	 #8-ab&'79OP		t /6!H1$%5f%=a%@%IJ+01A&1I!1LM^1_+`4# U"H&t'>'>?Q'RTghplp++,<W,ExPL%h0STJ (8')$%5f%=a%@%IJ+01A&1I!1LM^1_+`	##  </J !12)3N)C#-h#75G#$45lC ) #=l^!LMM.. 'f%#%783i6LL#%5%9%9*%E$ &--=?y%z/?/C/CDW/X&1+;+?+?+P	% #3"6"6{"C)+2>2>.- ,- , %,#%#&(8(<(<=P(Q&$
 !1 < &- ,.A0'! "2!5!5j!A=)9)=)=k)J%5%9%9'%B@/ *5U+- -Z vxe / 2h ,F3I>}M	% (	* (.47G7OPY7Z[_7``c~~JJ/78%&6&:&:;N&OW[\
 ---r   c           
      D   |j                  d      r|j                  d      sy dj                  ||fD cg c]  }t        |d   d       c}|gz         }t        |d      }d|d|d   d|d   |t	        d||j                         d	
      ddddt        |ddt        j                  t        d      hfdt        hfdf      t        |ddt        j                  t        d      hfddt        hfddt        hfdf      d|d   v rdnd d|dd|z   ddS c c}w ) NisAvailable-r'   archive_)metadatalabelzniconico_dmc:r   DMC )delimr"   aach264)r6   r   format_noter(   acodecvcodecr  bitrate  r   samplingRate)abrasr
resolutionheightwidth)vbrr  r  lowniconico_dmcr\   r   )ra   r`   )qualityr   r5   http_headers)
r   joinr   r   r   upper	functoolspartialr   r   )rz   r   audio_qualityvideo_qualityr   sr   vid_qual_labels           r   _extract_format_for_qualityz&NiconicoIE._extract_format_for_qualityh  sj     /}7H7H7WHH9F8VW1\!D':.W[gZhhj	 &m5JK /7d8K][_M`a"(@R@R@T\_`
 =:!I$5$5m4$P#QR&68 + 
 =:!I$5$5m4$P#QR'K=A&+?8 + 
  #mD&99rt&!-4<xG'
 	
	 Xs   Dc              #   2  K   t        |d      }t        |ddt        hf      }t        |ddt        hf      }t        |dddt        hf      }t        |||f      sy t	        j
                  |||      D ]!  \  }}}	| j                  ||||	      x}
s|
 # y w)N)r   r   r   audios.videosr   r   )r   dictstrall	itertoolsproductr$  )rz   r   r   dmc_datar&  r'  r   r   r!  r   fmts              r   _yield_dmc_formatszNiconicoIE._yield_dmc_formats  s     *HIh3(?@h3(?@ I{C#+OP	FFI./6?6G6GPVXa6b 	2M=(66xP]_ghhsh		s   BBBc              #   h  K   d }t        |ddd|f      }t        |ddd|f      }t        |dddt        hf      }t        |ddt        hf      }t        ||||f      sy | j                  d	| d
|t	        j
                  dt        t        j                  d |D        d |D                    i      j                         d|i|dddd      d   d   }| j                  ||      }	t        |	d       D ]N  i t        |fddt        hfdt        j                  t        d      hfdt        hfdfd      d d!d" P t        d# |	D        d$ %      }
| j!                  |
       t#        t        |d&dt        hf      d'      dz  }|
D ]  }|d(xx   |z  cc<   d)|d(   d*|d+<   | ! y w),Nc                     |d   xr |d   S )Nr  r'   r   _vs     r   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    !M"2">qw r   r   domandr'  r&  accessRightKeyclientwatchTrackIdz$https://nvapi.nicovideo.jp/v1/watch/z/access-rights/hlsoutputsc              3   &   K   | ]	  }|d      ywr'   Nr   ).0r4  s     r   	<genexpr>z0NiconicoIE._yield_dms_formats.<locals>.<genexpr>  s     2Kq1T72K   c              3   &   K   | ]	  }|d      ywr;  r   )r<  as     r   r=  z0NiconicoIE._yield_dms_formats.<locals>.<genexpr>  s     MfZ[aPTgMfr>  actionTrackId   r   r\   )zx-access-right-keyx-frontend-idx-frontend-versionzx-request-with)rh   r   ri   rh   
contentUrlc                     |d   dk(  S )Nr  noner   r2  s     r   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    Qx[F=R r   c                 2    d   j                  |d         S )Nr   r'   )
startswith)r3  r4  	audio_fmts     r   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    Y{5K5V5VWXY]W^5_ r   r'   bitRater  r   r  )r   r  r  F)get_allr	  m4a)r  r(   c              3   2   K   | ]  }|d    dk7  s|  yw)r  rG  Nr   )r<  r.  s     r   r=  z0NiconicoIE._yield_dms_formats.<locals>.<genexpr>  s     PSH8OSPs   c                     | d   S )Ntbrr   )fs    r   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    `abg`h r   )key.r   rP  zvideo-z.0fr   )r   r)  r*  r   r   r   listr+  r,  r   _extract_m3u8_formatsr  r  r   r   sorted_remove_duplicate_formatsmin)rz   r   r   
fmt_filterr'  r&  
access_keytrack_iddms_m3u8_urldms_fmts
video_fmtsmin_abr	video_fmtrJ  s                @r   _yield_dms_formatszNiconicoIE._yield_dms_formats  s#    >
h(Hj(QRh(Hj(QR!(Wh@PSVRW,XY
8^cU*KLFFJ9:**28*<NOQY4	 1 12KF2KMf_eMf gh vx:&0!"&'"<	E	 + 	 	 $	% --lHE &h0RS 
	I		v(_"&%	(9(9-t(T'UV*[M:b ( "	#	  	 	
	 PHPVhi
&&z2l6C]O+LMWXY\``# 	Ie''-i.>s-C%DIk"O	s   F/F2c                    | j                  |      }	 | j                  d|z   |      \  }}|j                  d      r| j                  |j                        }| j	                  | j                  d|dd      |       | j"                  dVi t%        dddt&        hfdt&        hfdf      xs ddi}g | j)                  |      | j+                  |      }|st!        | j                  ddd d            }	|	r| j-                  d|	        |	r$d|	v r d }| j/                  | j0                  d       nI|d k(  r| j3                  d!d"       n0|d#k(  r| j3                  d$d"       n|dk(  r| j3                  d%"       d }
rkt5        j6                  d&|      }t9        t;        d d' |D                    }
|
s7| j=                  d(|d       }|r!|j?                  d)      D cg c]  }|s|	 }
}|
st%        d*      }
tA        g d+      }dd,fd-
}i d.|d/d0 |d1      xs | jC                  |d       d2|d3|d4 |d5      xs i jE                         D cg c]!  \  }}|r||d6 ||      d7tG        |d8      # c}}d9t!         |d9            d:t%        d;d<d=      d>tI        t%        d?d@dA            dBtK         |dC            xs tK        | j=                  dD|dEd             dFt%        d<d=      dGt%        d@dA      dHtM         |dIdJ            dK|
dLt%        dMdN      dO |dIdPtN        Q      dRtQ        | j=                  dS|dTd             xs  |dR      tS              xs d| | jU                  |      dUS # t        $ r}	 | j                  d|t        t        j                         dz        fz  |d	d
      d   n# t        $ r~ t        |j                  t              s |j                  j                  j                         j                  dd      }| j                  d|dd       }|s t        t!        |      d      w xY wY d }~d }~ww xY wc c}w c c}}w )WNr   sor   r   r   r   zehttps://www.nicovideo.jp/api/watch/v3/%s?_frontendId=6&_frontendVersion=0&actionTrackId=AAAAAAAAAA_%dr  zDownloading API JSONzUnable to fetch data)rW   rg   rh   zutf-8replacezZ(?s)<section\s+class="(?:(?:ErrorMessage|WatchExceptionPage-message)\s*)+">(.+?)</section>zerror reasonTexpectedpaymentvideo	isPremiumisAdmission)needs_premiumneeds_subscription
needs_authz3<p[^>]+\bclass="fail-message"[^>]*>(?P<msg>.+?)</p>zfail messagemsg)ro   rk   zNiconico said: u?   された地域と同じ地域からのみ視聴できます。)	countriesmetadata_availablepremium_onlyzThis video requires premium)ro  subscriber_onlyzThis video is for members onlyFz2<meta\s+property="og:video:tag"\s*content="(.*?)">c              3   P   K   | ]  }t        |j                  d                yw)r   N)r   rk   )r<  r   s     r   r=  z+NiconicoIE._real_extract.<locals>.<genexpr>  s     %Tj&<%Ts   $&keywords,)tagitems.r   )r6   	middleUrllargeUrlplayerogp)	get_firstc                 ,    t        dg|fd|  i|S )Nrg  rL  r   )r{  rv  kwargsr   s      r   get_video_infoz0NiconicoIE._real_extract.<locals>.get_video_info  s%    7*;U*;]]]V\]]r   r'   r   r)   )originalTitler)   formatsavailability
thumbnailsr*   jpg)r'   r6   r(   
preferencelenientr/   r+   )ownernickname)channelr   )	communityr   r,   r  r'   )r  r'   )r  r'   r.   registeredAtzvideo:release_datezdate publishedr  
channel_idr1   countviewr4   genre)r  r  )r  rR  r2   comment)expected_typer0   zvideo:durationzvideo duration)webpage_url	subtitlesr   )+	_match_id_download_webpage_handlerI  r6   r   rv   r	   r   roundtime
isinstancecauser   responsereaddecoder   _availabilityr   boolr/  r`  	to_screenraise_geo_restricted_GEO_COUNTRIESraise_login_requiredrw   finditerrS  filter_html_search_metar   r   _og_search_titlerv  r   r   r   r   r   r   r   extract_subtitles)rz   r6   r   webpagehandlee	error_msgr  r  fail_msgr4   og_video_tagskwdsr   thumb_prefsr  rR  r   s                    @r   _real_extractzNiconicoIE._real_extract  s   >>#&	K";;1H<hHOGV""4(>>&**5''(?(?)7D )@ )*+35H& *t)) &\(YPW)D62#04&"9Z
 E . .$ d#&AD++Hh? A++Hh?A!$"9"9FU #: #D EH 
;<]aii#))D4G4G\`)a/))*G\`)a!22))*J_c)d-))U)C KK(]_fgMt%Tm%TUVD--j'4-P'+zz#<!!A<D<*GHD QR-1 	^
(

 ^$>?o4CXCXY`jnCXCo
 w	

 L
   .k:@bGGIR #sS )#.	
 #35 R
 :n]&CD
 X/DFY[pq
 ;|HoO`bu'vw
  ~n'EF g-&&';WFV`d&eKg!
$ |H.ACXY%
& ,x1BDWX'
( +nWf&EF)
* D+
, \(,>@PQ-
. ^GYcR/
0 t556FQako5pq .!*-5
6 's+[1PQYPZ/[//(C9
 	
u  	KK..{  @H  JO  PT  PY  PY  P[  ^b  Pb  Jc  d  d  fn/9O / QQWY " 	K!!''95''**//188)L 33q^T 4 ;	 !$Z	%:TJJ	K 	K` = Rs=   A)N  Q,(Q,&Q1
	Q);OQ$BQQ$$Q)c                 p   t        |ddt        hf      xs i }|j                  d      sy t        | j                  |d    d|t	        j
                  i |j                  d      |j                  d      d      j                         dd	d
ddddddd      d      }ddt	        j
                  |      dgiS )Nr  	nvCommentserverz/v1/threadsparams	threadKey)additionalsr  r  Fr[   r\   ztext/plain;charset=UTF-8othersrX   rY   )r`   ra   rf   zx-client-os-typerC  rD  zDownloading commentszFailed to download comments)rh   r   ri   rW   rg   )rh   threads.comments.r  r   )r(   rh   )r   r(  r   r   r   r   r   )rz   r   r   comments_infodanmakus        r   _get_subtitleszNiconicoIE._get_subtitles)  s    $X	;/OPVTV  *t22X&'{3XDJJ!'++H5*..{;P E vxu64 :$,!$&) (1N  3  P 67$ 

7+ 
 	
r   N)__name__
__module____qualname__IE_NAMEIE_DESCr  _GEO_BYPASSr   r)  _TESTS
_VALID_URL_NETRC_MACHINEr   r   r   r$  r/  r`  r  r  r   r   r   r   r   #   s(   G"GVNK :1%*$$%Z "m!$
. :KA*&%%# ./K!$
	0 7"$d*%

 &" :rA*#%5 

 V  91qA*#%!$ "m!$
	0 :^A#%$%* "m!$
	. :1GA#%* 45!$
	( N C:OKFZ rJN!&.,L&P~.@!
F
+Zc
J
r   r   c                   >    e Zd ZdZddddZd Zed        Zd Zd	 Z	y
)NiconicoPlaylistBaseIEd   rX   rY   rZ   )r]   r^   r_   c                     t        d      )Nz!Must be implemented in subclasses)NotImplementedErrorrz   list_idresourcer   s       r   	_call_apiz NiconicoPlaylistBaseIE._call_apiP  s    !"EFFr   c                 4    t        | d      t        | d      dS )N)r  r   r  )r+   r,   r}  )items    r   _parse_ownerz#NiconicoPlaylistBaseIE._parse_ownerS  s#     %T+<='o>
 	
r   c              #     K   |dz  }| j                  |d|z  || j                  d      }t        |d      xs g D ]  }|j                  d      }|s|j                  d      xs i fd}d||j                  d	      d
| |j                  d      t	        |j                  d             |d       |d      t        |d      t
        j                         d
| j                  |        y w)Nr   zpage %d)r~   pageSize)rv  .)rg  Nr'   r  c                 8    t        j                  |             S N)r   r   )r   r  s    r   r   z4NiconicoPlaylistBaseIE._fetch_page.<locals>.<lambda>g  s    +eiil"; r   r6   r)   r   shortDescriptionr0   r  r  )r*   )nHdUrlrx  
listingUrlr6   )
_typer'   r)   r6   r/   r0   r1   r2   r*   ie_key)r  
_PAGE_SIZEr   r   r   r   r  r  )rz   r  r~   resprg  r   	get_countr  s          @r   _fetch_pagez"NiconicoPlaylistBaseIE._fetch_pageZ  s     	~~gy4'7:
 
 "$(GHNB 	EyyHIIg&,"E;I7+8
C$yy);<'		*(=>'/!*9!5)%1kl$++- ##E* 	s   C.C1c                 j    t        t        j                  | j                  |      | j                        S r  )r
   r  r  r  r  )rz   r  s     r   _entrieszNiconicoPlaylistBaseIE._entriesv  s&     !2!243C3CW!Mt__r   N)
r  r  r  r  r   r  staticmethodr  r  r  r   r   r   r  r  G  s>    J !&LG 
 
8`r   r  c                   J    e Zd ZdZdZddddddd	d
dddddddgZd Zd Zy)NiconicoPlaylistIEzniconico:playlistzbhttps?://(?:(?:www\.|sp\.)?nicovideo\.jp|nico\.ms)/(?:user/\d+/)?(?:my/)?mylist/(?:#/)?(?P<id>\d+)z'http://www.nicovideo.jp/mylist/2741172827411728u&   AKB48のオールナイトニッポンz$md5:d89694c5ded4b6c693dea2db6e41aa08u	   のっく805442)r'   r)   r/   r+   r,   i#  r6   r8   playlist_mincountz4https://www.nicovideo.jp/user/805442/mylist/27411728TrT   z-https://www.nicovideo.jp/my/mylist/#/68048635c                 Z    | j                  d| |d| || j                        d   d   S )Nz&https://nvapi.nicovideo.jp/v2/mylists/Downloading r   ri   rh   mylistr   r   r  s       r   r  zNiconicoPlaylistIE._call_api  sO    ""4WI>8*%U%% # ' (./ 089 	9r   c                     | j                  |      }| j                  |dddi      } | j                  | j                  |      ||j	                  d      |j	                  d      fi | j                  |      S )NrS  r  r   r   r/   )r  r  playlist_resultr  r   r  )rz   r6   r  r  s       r   r  z NiconicoPlaylistIE._real_extract  s~    ..%2
  $t##MM'"GJJv

= 9X=A=N=Nv=VX 	Xr   N)r  r  r  r  r  r  r  r  r   r   r   r  r  z  s\    !GvJ 9=A##
 !
 F ?F$9Xr   r  c                   F    e Zd ZdZdZddddddd	d
dddddddgZd Zy)NiconicoSeriesIEzniconico:serieszShttps?://(?:(?:www\.|sp\.)?nicovideo\.jp(?:/user/\d+)?|nico\.ms)/series/(?P<id>\d+)z4https://www.nicovideo.jp/user/44113208/series/110226110226u   ご立派ァ！のシリーズr'   r)   
   r  z&https://www.nicovideo.jp/series/12312/12312u>   バトルスピリッツ　お勧めカード紹介(調整中)g   zhttps://nico.ms/series/203559TrT   c                    | j                  |      }| j                  ||      }| j                  d|dd      }|rt        |      }t	        | j                  |d d            }| j                  t        |d      ||t              S )N)u   <title>「(.+)（全z:<div class="TwitterShareButton"\s+data-text="(.+)\s+https:r)   Fr   )itemListElement.r6   ie)	r  rs   rt   r   next_yield_json_ldplaylist_from_matchesr   r   )rz   r6   r  r  r)   	json_datas         r   r  zNiconicoSeriesIE._real_extract  s    ..%((g6""LWE # +  'E,,Wd%,HI	))$CDguYc * e 	er   N)r  r  r  r  r  r  r  r   r   r   r  r    s[    GgJ F5
   8U
 ! /F&er   r  c            	       d    e Zd ZdZdZdZdd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 Zd Zy)NiconicoHistoryIEzniconico:historyz1NicoNico user history or likes. Requires cookies.zBhttps?://(?:www\.|sp\.)?nicovideo\.jp/my/(?P<id>history(?:/like)?)zPC page, with /videoz)https://www.nicovideo.jp/my/history/videoTrV   zPC page, without /videoz#https://www.nicovideo.jp/my/historyzmobile page, with /videoz(https://sp.nicovideo.jp/my/history/videozmobile page, without /videoz"https://sp.nicovideo.jp/my/historyzPC pagez(https://www.nicovideo.jp/my/history/likezMobile pagez'https://sp.nicovideo.jp/my/history/likec                 f    |dk(  rdnd}| j                  d| |d| || j                        d   S )Nzhistory/likelikeszwatch/historyz'https://nvapi.nicovideo.jp/v1/users/me/r  r  rh   r  )rz   r  r  r   paths        r   r  zNiconicoHistoryIE._call_api  sS    !^3w""5dV<g8*%UD<M<M # OOUW 	Wr   c                 `   | j                  |      }	 | j                  |dddi      } | j                  | j                  |      |fi | j                  |      S # t        $ rJ}t        |j                  t
              r*|j                  j                  dk(  r| j                  d        d }~ww xY w)NrS  r  r   i  z,You have to be logged in to get your history)r  r  r	   r  r  r   r   r  r  r  r  )rz   r6   r  r  r  s        r   r  zNiconicoHistoryIE._real_extract  s    ..%	^^GVj!_EF
 $t##DMM'$:GatGXGXY_G`aa	  	!''9-!''..C2G))*XY	s   A 	B-#AB((B-N)	r  r  r  r  r  r  r  r  r  r   r   r   r  r    s     GAGVJ ':
 *4
 +9
 .3
 9
 8)F4Wbr   r  c                       e Zd ZdZddZd Zy)NicovideoSearchBaseIEsearchNc           	   #   &  K   |xs i }d|v r|d   gnt        j                  d      }|D ]c  }t        |      |d<   | j                  ||||d|iz        }t	        j
                  d|      }|D ]  }	| j                  d|	 d|	        |rc y  y w)Nr~   r   r   rW   z2(?<=data-video-id=)["\']?(?P<videoid>.*?)(?=["\'])r   Niconico)r+  r  r)  rs   rw   findall
url_result)
rz   r6   item_idr   rW   pagespage_numr  resultsr  s
             r   r  zNicovideoSearchBaseIE._entries  s     #)U?v	8J 	HME&M,,S'TU[]eTfMf,gGjj!VX_`G boo(Gv&NPZ\`aab	s   B
BBc                 d    | j                  | j                  d| j                   d|       |      S )Nz//www.nicovideo.jp/r   )r  _proto_relative_url_SEARCH_TYPE)rz   r   s     r   _search_resultsz%NicovideoSearchBaseIE._search_results  s;    }}$$':4;L;L:MQug%VWY^` 	`r   )NzDownloading page %(page)s)r  r  r  r  r  r  r   r   r   r  r    s    L
`r   r  c                       e Zd ZdZdZdZy)NicovideoSearchIEzNico video searchznicovideo:search
nicosearchN)r  r  r  r  r  _SEARCH_KEYr   r   r   r  r  
  s    !G GKr   r  c                   \    e Zd Zej                   dZdZdZddddddd	dddd
dgZd Zy)NicovideoSearchURLIE_urlzNico video search URLsz8https?://(?:www\.)?nicovideo\.jp/search/(?P<id>[^?#&]+)?z"http://www.nicovideo.jp/search/sm9sm9r  (   r  zRhttps://www.nicovideo.jp/search/sm9?sort=h&order=d&end=2020-12-31&start=2020-01-01   )r6   r8   playlist_countc                 j    | j                  |      }| j                  | j                  ||      ||      S r  r  r  r  rz   r6   r   s      r   r  z"NicovideoSearchURLIE._real_extract$  0    s###DMM#u$=ueLLr   N)	r  r  r  r  r  r  r  r  r  r   r   r   r  r    s_    "**+40G&GLJ3
   d
 F Mr   r  c                        e Zd ZdZej
                   dZdZddddddgZ ej                  d	d
d
      Z
dZdZddZd fd	Z xZS )NicovideoSearchDateIEzNico video search, newest firstz:datenicosearchdateznicosearchdateall:ar@  r  iJ  r  i  r       2   c              #   (  K   |xs | j                   |xs, t        j                  j                         j	                         }}t        t        | j                  ||||| j                  d| d|                   }|| j                  k(  rI||k7  rD|||z
  dz  z   }| j                  ||||      E d {    | j                  ||||      E d {    y | j                  | d| d|        | j                  ||||d      E d {    y 7 Y7 ?7 	w)NzChecking number of videos from z to re   r   z: Downloading results from z    Downloading page %(page)s)_START_DATEdtdatetimenowdatelenrS  _get_entries_for_date
_MAX_PAGES_RESULTS_PER_PAGEr  r  )rz   r6   r  
start_dateend_datelast_page_lenmidpoints          r   r  zNicovideoSearchDateIE._entries:  s2    )=T-=-=x?c2;;??K\KaKaKcH
 D!;!;*h2:,d8*M "< "O P Q T333
h8N!h&;%ABH}}S'8XFFF}}S':xHHHNNgY&A*TRZQ[\]11Wj(9X 2 Z Z Z	 GHZs6   B0D2D3DD7DDDDDc              #      K   t        |      t        |xs |      ddd}|rt        |      |d<   t        | 	  ||||      E d {    y 7 w)NrQ  d)startendsortorderr~   r  )r)  superr  )	rz   r6   r  r5  r6  r  rW   r   	__class__s	           r   r2  z+NicovideoSearchDateIE._get_entries_for_dateJ  sV     _x-:.	
 ME&M7#CD#IIIs   AAAA)NN)NNN)r  r  r  r  r  r  r  r  r-  r0  r,  r4  r3  r  r2  __classcell__)r@  s   @r   r'  r'  )  sr    /G"**+51G"K$
 " F "''$1%KJZ 
J 
Jr   r'  c                   6    e Zd ZdZdZdZdZdddddd	gZd
 Zy)NicovideoTagURLIEzniconico:tagzNicoNico video tag URLsru  z5https?://(?:www\.)?nicovideo\.jp/tag/(?P<id>[^?#&]+)?u;   https://www.nicovideo.jp/tag/ドキュメンタリー淫夢u   ドキュメンタリー淫夢r  i  r  c                 j    | j                  |      }| j                  | j                  ||      ||      S r  r#  r$  s      r   r  zNicovideoTagURLIE._real_extracte  r%  r   N)	r  r  r  r  r  r  r  r  r  r   r   r   rC  rC  W  s;    G'GLIJL25
 ! FMr   rC  c                   >    e Zd ZdZdddiddZdZdZd	d
dZd Zd Z	y)NiconicoUserIEz=https?://(?:www\.)?nicovideo\.jp/user/(?P<id>\d+)/?(?:$|[#?])z$https://www.nicovideo.jp/user/419948r'   419948e   r  zehttps://nvapi.nicovideo.jp/v1/users/%s/videos?sortKey=registeredAt&sortOrder=desc&pageSize=%s&page=%sr  rX   rY   )r]   r^   c              #   Z  K   d}dx}}||k  r| j                  | j                  || j                  |dz   fz  || j                  d|rd|z  ndz        }|st	        |d   j                  d            }|d   d	   D ]   }|dz  }| j                  d
|d   z         " |dz  }||k  ry y w)Nr   r   zDownloading JSON metadata%sz page %dr   )ri   rW   rh   
totalCountrv  z!https://www.nicovideo.jp/watch/%sr'   )r   _API_URLr  r   r   r   r  )rz   r  total_countr  r  json_parsedentrys          r   r  zNiconicoUserIE._entries{  s     k!--$//8a< HH'))2xj86K]_` . bK )+f*=*A*A,*OP$V,W5 Y
oo&IERVK&WXXY MH k!s   B&B+)B+c                     | j                  |      }| j                  | j                  |      |t        j	                               S )Nr  )r  r  r  r   r  )rz   r6   r  s      r   r  zNiconicoUserIE._real_extract  s:    ..%##DMM'$:G
HYHYH[#\\r   N)
r  r  r  r  _TESTrK  r  r   r  r  r   r   r   rF  rF  j  sG    QJ5(
 !E wHJ !L
]r   rF  c                   b    e Zd ZdZdZdZddd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Zd Zy)NiconicoLiveIEzniconico:liveu   ニコニコ生放送zDhttps?://(?:sp\.)?live2?\.nicovideo\.jp/(?:watch|gate)/(?P<id>lv\d+)zJthis test case includes invisible characters for title, pasting them as-isz+https://live.nicovideo.jp/watch/lv339533123lv339533123uW   激辛ペヤング食べます‪( ;ᯅ; )‬（歌枠オーディション参加中）i  i  u[   初めましてもかって言います❕
のんびり自由に適当に暮らしてますu   もかu$   ゲストさんのコミュニティ	co5776900z,https://com.nicovideo.jp/community/co5776900iPcT)r'   r)   r1   r2   r/   r+   r  r  channel_urlr.   is_live
livestream)rW   r6   r8   rC   z,https://live2.nicovideo.jp/watch/lv339533123rT   z.https://sp.live.nicovideo.jp/watch/lv339533123z/https://sp.live2.nicovideo.jp/watch/lv339533123)highr  c                    | j                  |      }| j                  d| |      \  }}| j                  t        | j	                  d|d            |      }t        |d      }|st        dd      t        |dt        |d	      xs d
i      }t        t        j                  j                  |j                        j                  d      }t        | j                  d      d       }|| j                   vrd}| j#                  t%        |dd| i      |d      }	| j'                  d       |	j)                  t+        j,                  ddd|dddddddd             	 |	j/                         }
|
st+        j0                  |
      }t3        |t4              s:|j7                  d      dk(  r|d    d!   }|d    d"   }n|j7                  d      d#k(  r| j'                  |
       t        d$      |j7                  d      d%k(  r,| j'                  |
       t        |d&      xs |
}t        |      | j9                  d'd      r*t;        |
      d(kD  r|
d d( d)z   }
| j'                  d*|
z         t        |d+      xs | j=                  d,|d-d.      }t        |d/      xs i }g }|j?                         D ]  \  }}t3        |t4              s"|jA                  ||d0tC        |d1             8|j?                         D ]a  \  }}tC        |d1      xs tC        |d1      }|j7                  d2      |j7                  d3      }}|jA                  | d4| d5| |d0|       c  | jE                  ||d6d7      }tG        |tI        |d8d              D ]  \  }}|jK                  |d9|	|||d:        ||d;t        |d<d=d>d?d@dAdB      tM        t        |dC            tO        t        |dD            d||dES )FNz https://live.nicovideo.jp/watch/z1<script\s+id="embedded-data"\s*data-props="(.+?)"zembedded data)siterelivewebSocketUrlz-The live hasn't started yet or already ended.Trd  frontend_id)rZ  
frontendId9zsp.latencyc                     | d   S r   r   r   s    r   r   z.NiconicoLiveIE._real_extract.<locals>.<lambda>  s
    ! r   rX  ra   zhttps://)ri   zConnecting to WebSocket server)r   rW   z"[debug] Sending HLS server requeststartWatchingr  zhls+fmp4F)r  r   r`  	chasePlay	webSocket)r   commentable)streamroom	reconnect)typerh   ri  rf  rh   uriavailableQualities
disconnectz$Disconnected at middle of extractionerror)bodycodeverboser  z...zServer said: %s)programr)   )zog:titleztwitter:titlez
live titler  )rq  r*   )r'   r6   r  r  r  r3  r   r"   )r(   liver   niconico_live)r   r   wsr   live_latencyoriginr  )rq  
statistics
watchCount)rq  rw  commentCount)rq  supplierr   )socialGroupr   )r{  r'   )r{  socialGroupPageUrl)r1   r2   r+   r  r  rU  )rq  r/   )rq  openTime)r/   r.   rV  r  r  )(r  r  r   r   rt   r   r	   r   r   urllibparseurlparser6   hostnamer   r   _KNOWN_LATENCYrr   r   write_debugsendr   r   recvloadsr  r(  r   	get_paramr1  r  rv  appendr   rT  zipreversedupdater   r   )rz   r6   r   r  urlhembedded_dataws_urlr  r`  rt  r  rh   m3u8_urlr   messager)   
raw_thumbsr  r   valuekimg_urlresr  r  r  r.  qs                               r   r  zNiconicoLiveIE._real_extract  s   >>#&558XYaXb6cemn((d6H6H@'?7\ *]^fh m-OP !Q\`aa!&<7MNURU+
    5 5dhh ? H H%P$11)<nM$---G""FX(/D$EF$D # F 	=>


#  % *&!&	 !,#' #
  	" 779D::d#DdD)xx8+<. L)=>	&!\1  &$%KLL&!W,  &&t-=>F$$W--	51t9s?:-D  !2T!9:+ . ],@A OTE[E[)7L F\ FO "-1IJPb

%++- 	KD%eT*!! # 'ud;# 
 #kkm 
7&q$7b;KG]a;b # 0#''(2Cv!!!F!E7!F84"# # 		& ,,XxUQU,V'8IabM#:; 	FCJJ+$ '" 	 
 =E!J;23D+ 
 &l=B\&]^$\-AX%YZ$
 	
r   N)	r  r  r  r  r  r  r  r  r  r   r   r   rR  rR    s    G%GXJ\<n!y =%I#
 !$ > @ A/F8 %Ns
r   rR  )0r.  r-  r  r+  r   rw   r  urllib.parser~  commonr   r   
networkingr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r'  rC  rF  rR  r   r   r   <module>r     s        	   6   -     .a
 a
H0`] 0`f#X/ #XL#e} #eL-b. -b``M `(-/B M0 M2+J13F +J\M- M&"]] "]JU
] U
r   