
    VGh                        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#m$Z$m%Z% ddl&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
      Z0 G d de0e      Z1 G d de0      Z2 G d de0e      Z3 G d de0      Z4 G d d e
      Z5 G d! d"e*      Z6y)#    N   )InfoExtractorSearchInfoExtractor   )Request)	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmldetermine_extfloat_or_noneint_or_noneparse_bitrateparse_durationparse_iso8601parse_qsparse_resolution	qualitiesremove_startstr_or_noneunescapeHTMLunified_timestampupdate_url_queryurl_basenameurl_or_noneurlencode_postdataurljoin)find_elementrequiretraverse_objc                   <    e Zd ZdZdgZdZdZed        Zd	dZ	d Z
y)
NiconicoBaseIEFJPzhttps://account.nicovideo.jpniconicoc                 T    t        | j                  d      j                  d            S )Nhttps://www.nicovideo.jpuser_session)bool_get_cookiesget)selfs    b/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/niconico.pyis_logged_inzNiconicoBaseIE.is_logged_in,   s$    D%%&@AEEnUVV    c                 "    t        d| |      )NzUnable to login: expected)r	   )r+   messager1   s      r,   _raise_login_errorz!NiconicoBaseIE._raise_login_error0   s    0	:XNNr.   c                    | j                   ry | j                  | j                   dd d       | j                  | j                   dd ddd| j                   ddt	        ||d      	      }| j                   ry t        |t        d
      ht        d      ht        hf      x}r| j                  |xs d       nd|v r| j                  d|dd      }| j                  t        | j                  |      d ddddit	        d| j                  d      i      	      \  }}| j                   ry dt        |j                        v r4t        |t        d      ht        hf      }| j                  |xs d       nCd|v r?t        |t        d      ht        d      ht        hf      }| j                  |xs d       | j                  dd !       y )"Nz/loginzRequesting session cookiesz/login/redirectorz
Logging inzUnable to log inz!application/x-www-form-urlencoded)Content-TypeReferer)mail_telpassword)headersdataznotice error)clsnotice__textzInvalid username or password	oneTimePwz&<form[^>]+action=(["\'])(?P<url>.+?)\1zpost urlurl)groupzPerforming MFAzUnable to complete MFAr5   otpz6 digit number shown on appz
error-codepageMainMsgzMFA session expired	formErrordiv)tagzMFA challenge failedzUnexpected login errorFr0   )r-   _request_webpage_LOGIN_BASE_download_webpager   r    r   r   r3   _search_regex_download_webpage_handler   _get_tfa_infor   r>   )r+   usernamer8   webpageerr_msgpost_urlmfaurlhs           r,   _perform_loginzNiconicoBaseIE._perform_login3   s    '/K	M((  12D, C"../v67 '$$(  )  $Wn-..1Q0RU_T`/
  W  ##G$M/MNG#))97JV[ * ]H55(((3T ":"$GE*4--.KL, 	 6 IC   $((!33&sl}.M-NQ[P\,]^''(H3HI#&s!k23lu6M5NQ[P\-^ _''(I3IJ 85Ir.   NT)__name__
__module____qualname___GEO_BYPASS_GEO_COUNTRIESrF   _NETRC_MACHINEpropertyr-   r3   rQ    r.   r,   r"   r"   &   s8    KVN0KNW WO*Jr.   r"   c                   j   e Zd ZdZdZddddddd	d
eddeedgg dddiddddddddddddeedgg ddddidddd d!d"dd#ed$ed%	d&d'd(d)dd*d+dd,d-d.d/d0	d1d'd2d3dd4d5dd6d7d8d9d:eed;gg d<ddidd=d>dd?d@dAdBdCdDddEeedFgg dGddiddHdIddJdKdLdMddNeedOgg dPddiddQdRdSdTdUdRdVg	ZdWZdX Zd]dYZ	dZ Z
d[ Zy\)^
NiconicoIEr$   u   ニコニコ動画z(http://www.nicovideo.jp/watch/sm22312215
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skip_downloadm3u8)r>   	info_dictparamsz(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)rc   rd   re   rk   rf   rg   rh   ri   rj   rl   rn   rm   ro   rp   z%http://www.nicovideo.jp/watch/sm10000sm10000unknown_videodeleteduM   ドラえもんエターナル第3話「決戦第3新東京市」＜前編＞20071224i0  )	rc   rd   rk   re   rf   ri   rj   rl   rm   zRequires an account)r>   rs   skipz(http://www.nicovideo.jp/watch/so22543406
1388129933u[   【第1回】RADIOアニメロミックス ラブライブ！～のぞえりRadio Garden～z$md5:b27d224bb0ff53d3c8269e9f8b561cf1i 0R20140104u   アニメロチャンネル312)	rc   rd   re   rk   rf   rj   ri   rg   rh   zCThe viewing period of the video you were searching for has expired.z'http://www.nicovideo.jp/watch/sm1151009	sm1151009uZ   マスターシステム本体内蔵のスペハリのメインテーマ（ＰＳＧ版）z$md5:f95a3d259172667b293530cc2e41ebda   iF20070926denden21392194u	   ゲーム)rc   rd   re   rk   rf   rl   rj   ri   rg   rh   rm   rn   ro   rp   z(http://www.nicovideo.jp/watch/sm31464864
sm31464864uG   新作TVアニメ「戦姫絶唱シンフォギアAXZ」PV 最高画質z$md5:e52974af9a96e739196b2c1ca72b5febiQY20170626z
no-namamae40826363   u	   アニメ)rc   rd   re   rk   rj   ri   rg   rh   rf   rl   rm   rn   ro   rp   z(http://www.nicovideo.jp/watch/sm18238488
sm18238488u0   【実写版】ミュータントタートルズz$md5:15df8988e47a86f9e978af2064bf6d8eiHO20120701i  u   エンターテイメント)rc   rd   re   rk   rj   ri   rf   rl   rm   rn   ro   rp   z<http://sp.nicovideo.jp/watch/sm28964488?ss_pos=1&cp_in=wt_tgTr>   only_matchingz0a video that is only served as an ENCRYPTED HLS.z)https://www.nicovideo.jp/watch/so38016254noter>   r   z]https?://(?:(?:www\.|secure\.|sp\.)?nicovideo\.jp/watch|nico\.ms)/(?P<id>(?:[a-z]{2})?[0-9]+)c              #     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                  ||d      }	t        |	d       D ]F  i t        |fddt        hfdt        d      hfdt        hfdt        hfdfd !      d"d#i H t        d$ |	D        d% &      }
| j                  |
       t        t        |d'dt        hf      d(      dz  }|
D ]Y  d)xx   |z  cc<   t!        d*         j#                  d+      d   d,<   t        |fd-dt        ht$        f      xs d.d/<    [ y w)0Nc                     |d   xr |d   S )NisAvailablerc   rZ   _vs     r,   <lambda>z/NiconicoIE._yield_dms_formats.<locals>.<lambda>   s    !M"2">qw r.   mediadomandvideosaudiosaccessRightKeyclientwatchTrackIdz$https://nvapi.nicovideo.jp/v1/watch/z/access-rights/hlsoutputsc              3   &   K   | ]	  }|d      ywrc   NrZ   ).0r   s     r,   	<genexpr>z0NiconicoIE._yield_dms_formats.<locals>.<genexpr>   s     2Kq1T72K   c              3   &   K   | ]	  }|d      ywr   rZ   )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)r:   queryr9   r:   
contentUrlr^   c                     |d   dk(  S )NvcodecnonerZ   r   s     r,   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    Qx[F=R r.   c                 2    d   j                  |d         S )N	format_idrc   
startswith)r   r   	audio_fmts     r,   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>	  s    Y{5K5V5VWXY]W^5_ r.   rc   bitRate  )scalesamplingRatequalityLevel)r   abrasrqualityF)get_allacodecaacc              3   2   K   | ]  }|d    dk7  s|  yw)r   r   NrZ   )r   fmts     r,   r   z0NiconicoIE._yield_dms_formats.<locals>.<genexpr>  s     PSH8OSPs   c                     | d   S )NtbrrZ   )fs    r,   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    `abg`h r.   )key.defaultr   r>   .r   c                     |d   d   k(  S )Nrc   r   rZ   )r   r   	video_fmts     r,   r   z/NiconicoIE._yield_dms_formats.<locals>.<lambda>  s    QtW	+(>> r.   r   )r    strall_download_jsonjsondumpslist	itertoolsproductencode_extract_m3u8_formatsr   r   sorted_remove_duplicate_formatsminr   
rpartitionany)r+   api_datavideo_id
fmt_filterr   r   
access_keytrack_iddms_m3u8_urldms_fmts
video_fmtsmin_abrr   r   s               @@r,   _yield_dms_formatszNiconicoIE._yield_dms_formats   sd    >
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	 + 	 	 $	% --lHeL &h0RS 
	I		v(_"&%D(A'BC*[M: .>	b (
 "#	 %	 	
	 PHPVhi
&&z2l6C]O+LMWXY\``# 	Ie'%1)E2B%C%N%Ns%STU%VIk"#/>Q\P]_b9d $e $khj i O	s   G"G&c           	          	 t        | j                  | j                  d|      xs d|      ddt        ht	        d      hf      S # t
        $ r |si cY S  w xY w)Nzserver-response r:   responsezserver response)r    _parse_json_html_search_metadictr   r	   )r+   rL   r   fatals       r,   _extract_server_responsez#NiconicoIE._extract_server_response  sn    	  !7!78I7!S!YWY[cddVg6G.H-IJL L  			s   AA AAc                 	   | j                  |      }	 | j                  d| || j                               \  }}|j                  d      r| j                  |j                        }| j                  ||       | j&                  d_i t)        dddt*        hfdt*        hfd f      xs d!di}t-        | j/                  |            }|st1        | j3                  d"d#d d$%            }	|	r| j5                  d&|	        |	r$d'|	v r d }| j#                  | j$                  d(       nI|d)k(  r| j7                  d*d+       n0|d,k(  r| j7                  d-d+       n|d!k(  r| j7                  d+       d }
rkt9        j:                  d.|      }t-        t=        d d/ |D                    }
|
s7| j?                  d0|d 1      }|r!|jA                  d2      D cg c]  }|s|	 }
}|
st)        d3      }
tC        g d4      }dd5fd6
}i d7|d8d9 |d:      xs | jE                  |d 1      d;|d<|d= |d>      xs i jG                         D cg c]!  \  }}|r||d? ||      d@tI        |dA      # c}}dBt1         |dB            dCt)        dDdEdF      dGtK        t)        dHdIdJ            dKtM         |dL            xs tM        | j?                  dM|dNd 1            dOt)        dEdF      dPt)        dIdJ      dQtO         |dRdS            dT|
dUt)        dVdW      dX |dRdYtP        Z      d[tS        | j?                  d\|d]d 1            xs  |d[      tU              xs d| | jW                  |      d^S # t        $ r2}	 | j                  d| |ddddd	t        t        j                         d
z         d| j                               d   n# t        $ r t        |j                  t              s |j                  j                  j                         j                  dd      }| j                  ||d      j!                  d      }|s |dv r| j#                  | j$                         n$|dk(  rt        dd      |dk(  rt        dd      t        d|       w xY wY d }~=d }~ww xY wc c}w c c}}w )`Nhttps://www.nicovideo.jp/watch/r9   soz&https://www.nicovideo.jp/api/watch/v3/zDownloading API JSONzUnable to fetch data60AAAAAAAAAA_r   )_frontendId_frontendVersionr   r   r9   r:   zutf-8replaceFr   
reasonCode)DOMESTIC_VIDEOHIGH_RISK_COUNTRY_VIDEO)	countriesHIDDEN_VIDEOz,The viewing period of this video has expiredTr0   DELETED_VIDEOzThis video has been deletedzNiconico says: paymentvideo	isPremiumisAdmission)needs_premiumneeds_subscription
needs_authz3<p[^>]+\bclass="fail-message"[^>]*>(?P<msg>.+?)</p>zfail messagemsg)r   r?   zNiconico said: u?   された地域と同じ地域からのみ視聴できます。)r   metadata_availablepremium_onlyzThis video requires premium)r  subscriber_onlyzThis video is for members onlyz2<meta\s+property="og:video:tag"\s*content="(.*?)">c              3   P   K   | ]  }t        |j                  d                yw)r   N)r   r?   )r   xs     r,   r   z+NiconicoIE._real_extract.<locals>.<genexpr>j  s     %Tj&<%Ts   $&keywordsr   ,)rD   items.name)r>   	middleUrllargeUrlplayerogp)	get_firstc                 ,    t        dg|fd|  i|S )Nr  r   )r    )r  r  kwargsr   s      r,   get_video_infoz0NiconicoIE._real_extract.<locals>.get_video_infov  s%    7*;U*;]]]V\]]r.   rc   	_api_datare   )originalTitlere   formatsavailability
thumbnailsrf   jpg)rc   r>   rd   
preferencelenientrk   rg   )ownernickname)channelr  )	communityr  rh   )r"  rc   )r$  rc   )r%  rc   rj   registeredAtzvideo:release_datezdate publishedr$  
channel_idrm   countviewrp   genre)r*  label)r*  r   rn   comment)expected_typerl   zvideo:durationzvideo duration)webpage_url	subtitlesrZ   ),	_match_idrI   geo_verification_headersr   r>   r   r	   r   roundtime
isinstancecauser   r   readdecoder*   raise_geo_restrictedrW   _availabilityr    r(   r   r   r   _html_search_regex	to_screenraise_login_requiredrefinditerfilterr   splitr   _og_search_titler  r   r   r   r   intr   r   extract_subtitles)r+   r>   r   rL   handleereason_coder  r  fail_msgrp   og_video_tagskwdsr  thumb_prefsr  r   r   s                    @r,   _real_extractzNiconicoIE._real_extract(  s   >>#&"	F";;1(<h557 < 9OGV ""4(>>&**544WhGH: *t)) &\(YPW)D62#04&"9Z
 E . .$ d#&
 t..xBC!$"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
 	
M  	FF..<XJG*,B'*,/+6uTYY[4=O7P6Q)RK  $<<> / @ AGH " F!!''95''**//188)L";;XU < 447C4E ""OO--8K8K-L N2(FQUW W O3()FQUVV${m%DEE#F 	Fx = Rs>   A&N  R?R?&S
 
R<AOR7CR..R77R<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/threadsrt   	threadKey)additionalsrt   rO  Fzhttps://www.nicovideo.jp/r&   ztext/plain;charset=UTF-8othersr   r   )r6   Originr5   zx-client-os-typer   r   zDownloading commentszFailed to download comments)r:   r   r9   r   errnote)r:   threads.comments.rU  r   )rd   r:   )r    r   r*   r   r   r   r   )r+   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.   NrR   )rS   rT   rU   IE_NAMEIE_DESCrB  _TESTS
_VALID_URLr   r   rK  rX  rZ   r.   r,   r\   r\   `   s   G"G :%*$$%Z "m
  #F+%, :KA*&%%# ./K
  #F+)0 7"$d*%

 &" :rA*#%5 

 V  9qA*#%!$ "m
  #F+', :^A#%$%* "m
  #F+', :GA#%* 45
 #F+#& N C:GGFR rJ-^n
`
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   r   r   zen-us)X-Frontend-IDX-Frontend-VersionzX-Niconico-Languagec                     t        d      )Nz!Must be implemented in subclasses)NotImplementedErrorr+   list_idresourcer   s       r,   	_call_apiz NiconicoPlaylistBaseIE._call_api  s    !"EFFr.   c                 ^    t        | ddt        ht        f      t        | ddt        hf      dS )Nr"  )r  )userr#  rc   )rg   rh   )r    r   r   )items    r,   _parse_ownerz#NiconicoPlaylistBaseIE._parse_owner  s:     %TG5SVYUZ\_+`a'wse.DE
 	
r.   c              #     K   |dz  }| j                  |d| || 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 )pagepageSize)r  .)r  Nrc   r(  c                 8    t        j                  |             S N)r   r*   )r  r(  s    r,   r   z4NiconicoPlaylistBaseIE._fetch_page.<locals>.<lambda>  s    +eiil"; r.   r>   re   r   shortDescriptionrl   r)  r,  )rf   )nHdUrlr  
listingUrlr>   )
_typerc   re   r>   rk   rl   rm   rn   rf   ie_key)rg  
_PAGE_SIZEr    r*   r   r\   ru  rk  )r+   re  rm  respr  r   	get_countr(  s          @r,   _fetch_pagez"NiconicoPlaylistBaseIE._fetch_page  s     	~~gtf~8
 
 "$(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 rp  )r
   	functoolspartialry  rv  )r+   re  s     r,   _entrieszNiconicoPlaylistBaseIE._entries  s&     !2!243C3CW!Mt__r.   N)
rS   rT   rU   rv  _API_HEADERSrg  staticmethodrk  ry  r}  rZ   r.   r,   r^  r^    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rc   re   rk   rg   rh   i#  r>   rs   playlist_mincountz4https://www.nicovideo.jp/user/805442/mylist/27411728Tr   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   r:   mylistr   r~  rd  s       r,   rg  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 )Nr   rn  r   r  rk   r0  rg  playlist_resultr}  r*   rk  )r+   r>   re  r  s       r,   rK  z NiconicoPlaylistIE._real_extract  s~    ..%2
  $t##MM'"GJJv

= 9X=A=N=Nv=VX 	Xr.   NrS   rT   rU   rY  r\  r[  rg  rK  rZ   r.   r,   r  r    s\    !GvJ 9=A##
 !
 F ?F$9Xr.   r  c                   X    e 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gZd 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   ご立派ァ！のシリーズur   楽しそうな外人の吹き替えをさせたら終身名誉ホモガキの右に出る人はいませんね…u   アルファるふぁ44113208r  
   r  z&https://www.nicovideo.jp/series/12312/12312u>   バトルスピリッツ　お勧めカード紹介(調整中)r   u   野鳥2275360g   zhttps://nico.ms/series/203559Tr   c                 T    | j                  d| |d| || j                        d   S )Nz%https://nvapi.nicovideo.jp/v2/series/r  r   r:   r  rd  s       r,   rg  zNiconicoSeriesIE._call_api,  sE    ""3G9=w8*%U%% # ' (./ 	/r.   c                     | j                  |      }| j                  |dddi      d   } | j                  | j                  |      ||j	                  d      |j	                  d      fi | j                  |      S )Nr   rn  r   detailre   rk   r  )r+   r>   re  seriess       r,   rK  zNiconicoSeriesIE._real_extract2  s    ..%2
  $t##MM'"GJJwM!:Y>B>O>OPV>WY 	Yr.   Nr  rZ   r.   r,   r  r    su    GgJ F5 P/%
  
 8U $
 !
 /)F2/Y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/videoTr   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   r:   r  )r+   re  rf  r   paths        r,   rg  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)Nr   rn  r   i  z,You have to be logged in to get your history)r0  rg  r	   r4  r5  r   statusr<  r  r}  rk  )r+   r>   re  r  rE  s        r,   rK  zNiconicoHistoryIE._real_extractb  s    ..%	^^GVj!_EF
 $t##DMM'$:GatGXGXY_G`aa	  	!''9-!''..C2G))*XY	s   A 	B-#AB((B-N)	rS   rT   rU   rY  rZ  r\  r[  rg  rK  rZ   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)Nrm  r   r   r   z2(?<=data-video-id=)["\']?(?P<videoid>.*?)(?=["\'])r   Niconico)r   r(  r   rG   r=  findall
url_result)
r+   r>   item_idr   r   pagespage_numrL   resultsrj  s
             r,   r}  zNicovideoSearchBaseIE._entriesp  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}  _proto_relative_url_SEARCH_TYPE)r+   r   s     r,   _search_resultsz%NicovideoSearchBaseIE._search_results|  s;    }}$$':4;L;L:MQug%VWY^` 	`r.   )NzDownloading page %(page)s)rS   rT   rU   r  r}  r  rZ   r.   r,   r  r  m  s    L
`r.   r  c                       e Zd ZdZdZdZy)NicovideoSearchIEzNico video searchznicovideo:search
nicosearchN)rS   rT   rU   rZ  rY  _SEARCH_KEYrZ   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sm9rc   re   (   r  zRhttps://www.nicovideo.jp/search/sm9?sort=h&order=d&end=2020-12-31&start=2020-01-01   )r>   rs   playlist_countc                 j    | j                  |      }| j                  | j                  ||      ||      S rp  r0  r  r}  r+   r>   r   s      r,   rK  z"NicovideoSearchURLIE._real_extract  0    s###DMM#u$=ueLLr.   N)	rS   rT   rU   r  rY  rZ  r\  r[  rK  rZ   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 )r   r   z: Downloading results from z    Downloading page %(page)s)_START_DATEdtdatetimenowdatelenr   _get_entries_for_date
_MAX_PAGES_RESULTS_PER_PAGEr}  r;  )r+   r>   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)Nr   d)startendsortorderrm  r  )r   superr}  )	r+   r>   r  r  r  r  r   r   	__class__s	           r,   r  z+NicovideoSearchDateIE._get_entries_for_date  sV     _x-:.	
 ME&M7#CD#IIIs   AAAA)NN)NNN)rS   rT   rU   rZ  r  rY  r  r[  r  r  r  r  r  r}  r  __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 URLsrD   z5https?://(?:www\.)?nicovideo\.jp/tag/(?P<id>[^?#&]+)?u;   https://www.nicovideo.jp/tag/ドキュメンタリー淫夢u   ドキュメンタリー淫夢r  i  r  c                 j    | j                  |      }| j                  | j                  ||      ||      S rp  r  r  s      r,   rK  zNicovideoTagURLIE._real_extract  r  r.   N)	rS   rT   rU   rY  rZ  r  r\  r[  rK  rZ   r.   r,   r  r    s;    G'GLIJL25
 ! FMr.   r  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)NiconicoUserIEzHhttps?://(?:www\.)?nicovideo\.jp/user/(?P<id>\d+)(?:/video)?/?(?:$|[#?])z$https://www.nicovideo.jp/user/419948rc   419948e   r  zehttps://nvapi.nicovideo.jp/v2/users/%s/videos?sortKey=registeredAt&sortOrder=desc&pageSize=%s&page=%sr_  r   r   )r`  ra  c              #   l  K   d}dx}}||k  r| j                  | j                  || j                  |dz   fz  || j                  d|rd| ndz        }|st	        |d   j                  d            }|d   d	   D ])  }|dz  }| j                  d
|d   d    t               + |dz  }||k  ry y w)Nr   r   zDownloading JSON metadata%sz page r   )r9   r   r:   
totalCountr  r   	essentialrc   )ie)r   _API_URLrv  r~  r   r*   r  r\   )r+   re  total_countr(  r  json_parsedentrys          r,   r}  zNiconicoUserIE._entries  s     k!--$//8a< HH'))2Xxj6I[]^ . `K )+f*=*A*A,*OP$V,W5 a
oo5eK6H6N5OPU_ & a aa MH k!s   B/B42B4c                 f    | j                  |      }| j                  | j                  |      |      S rp  r  )r+   r>   re  s      r,   rK  zNiconicoUserIE._real_extract  s,    ..%##DMM'$:GDDr.   N)
rS   rT   rU   r\  _TESTr  rv  r~  r}  rK  rZ   r.   r,   r  r    sG    \J5(
 !E wHJ !L
 Er.   r  c                   ^    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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)rc   re   rm   rn   rk   rg   r$  r'  channel_urlrj   is_live
livestream)r   r>   rs   r   z,https://live2.nicovideo.jp/watch/lv339533123r   z.https://sp.live.nicovideo.jp/watch/lv339533123z/https://sp.live2.nicovideo.jp/watch/lv339533123c                 X	   | 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      }| j                  t        |dd| i      |d      }| j!                  d       |j#                  t%        j&                  ddddddddddddd             	 |j)                         }	|	st%        j*                  |	      }
t-        |
t.              s:|
j1                  d      dk(  r|
d   d    }|
d   d!   }|
d   d"   }n|
j1                  d      d#k(  r| j!                  |	       t        d$      |
j1                  d      d%k(  r,| j!                  |	       t        |
d&      xs |	}t        |      | j3                  d'd      r*t5        |	      d(kD  r|	d d( d)z   }	| j!                  d*|	        t        |d+      xs | j7                  d,|d-d.      }t        |d/      xs i }g }|j9                         D ]  \  }}t-        |t.              s"|j;                  ||d0t=        |d1             8|j9                         D ]  \  }}t=        |d1      xs t=        |d1      }|j1                  d2      |j1                  d3      }}|j;                  | d4| d5| |t        t?        |      d6d7tA        d89      hf      d:|         |D ]@  }| jC                  |d;   |d<   |d=   tE        |j1                  d>            |d?   |d@   A       B d|dB||dC}dD |dEd  D        }dFdGdH}| jG                  ||dIdJ      }|D ]  }|j1                  dK      dLk(  rtI        ||dM         |dM<   nW|j1                  dN      dLk(  rCtK        |dO   jM                               }|jO                  ||j1                  ||dM         dP       |jO                  |        ||dQt        |dRdSdTdUdVdWdX      tQ        t        |dY            tS        t        |dZ            d||d[S )\Nz 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.Tr0   frontend_id)r  
frontendId9zsp.rR  zhttps://r   zConnecting to WebSocket server)r   r   zSending HLS server requeststartWatchingr   hlshighsingle_cookieF)r   protocollatencyaccessRightMethod	chasePlay	webSocket)r  commentable)streamroom	reconnect)typer:   r  r  r:   uriavailableQualitiescookies
disconnectz$Disconnected at middle of extractionerror)bodycodeverboser_  z...zServer said: )programre   )zog:titleztwitter:titlez
live titler   )r  rf   )rc   r>   r   widthheightr   r  imager   r  )default_ext)rc   r>   rd   domainr  valueexpiresr  secure)expire_timer  r  niconico_live)live_latencyoriginr  r   wsc              3   D   K   | ]  }|j                  d       r|  yw)audio_Nr   )r   qs     r,   r   z/NiconicoLiveIE._real_extract.<locals>.<genexpr>  s     I!,,x2H!Is     r   	audio_low
audio_high)`      r^   )rd   liver   r   r   r   r>   )r   r   r  )r  
statistics
watchCount)r  r*  commentCount)r  supplierr  )socialGroupr  )r.  rc   )r.  socialGroupPageUrl)rm   rn   rg   r$  r'  r  )r  rk   )r  openTime)rk   rj   r  r  r  )*r0  rI   r   r   rH   r    r	   r   r   urllibparseurlparser>   hostnamerE   r   write_debugsendr   r   recvloadsr4  r   r*   	get_paramr  r   r  appendr   r   r   _set_cookier   r   nextr   lowerupdater   r   ) r+   r>   r   rL   rP   embedded_dataws_urlr4  r!  r7  r:   m3u8_urlr   r  r2   re   
raw_thumbsr  r  r  kimg_urlresr  r  cookie
fmt_commonq_itera_mapr  r   r   s                                    r,   rK  zNiconicoLiveIE._real_extract'  sb   >>#&558XYaXb6cemn((d6H6H@'?7\ *]^fh m-OP !Q\`aa!&<7MNURU+
    5 5dhh ? H H%P""FX(/D$EF$D # F 	56


#  % %%)8!& !,#' #
  	$ 779D::d#DdD)xx8+<. L)=>	v,y1&!\1  &$%KLL&!W,  &&t-=>F$$W--	51t9s?:-D  =!78- 0 ],@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"'(9GQchIiHj;kl# 	# 			(  	tFx &.&/-fjj.CD6RX>bhiqbr  t	t #' 

 JYqr]I |4,,XxUQU,V 		#Cwwx F*#'K0@#AK "f,#CJ$4$4$67

!&3K0@!A  JJz"		# 
 =E!J;23D+ 
 &l=B\&]^$\-AX%YZ$
 	
r.   N)rS   rT   rU   rY  rZ  r\  r[  rK  rZ   r.   r,   r  r    s}    G%GXJ\<t!y =%I#
 !$ > @ A/F8C
r.   r  )7r  r  r{  r   r   r=  r3  urllib.parser1  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   utils.traversalr   r   r    r"   r\   r^  r  r  r  r  r  r  r  r  r  r  rZ   r.   r,   <module>rP     s       	   6   -     . B A7J] 7JtS
 S
l
0`] 0`f#X/ #XL+Y- +Y\-b. -b``M `(-/B M0 M2+J13F +J\M- M&#E] #ELc
^ c
r.   