o
    i9                     @   s  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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	 d	eZ%G d
d de%Z&G dd deZ'G dd de'Z(G dd de'Z)G dd de'Z*G dd deZ+G dd de+eZ,G dd de+Z-G dd de+eZ.G dd de+Z/G dd deZ0G d d! d!e%Z1dS )"    N   )InfoExtractorSearchInfoExtractor   )	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmldetermine_extextract_attributesfloat_or_noneint_or_noneparse_bitrateparse_iso8601parse_qsparse_resolution	qualitiesstr_or_nonetime_secondstruncate_stringunified_timestampupdate_url_queryurl_basenameurl_or_noneurlencode_postdataurljoin)find_elementrequiretraverse_objc                   @   sN   e Zd ZdZdZdZdgZdddZdZd	Z	e
d
d ZdddZdd ZdS )NiconicoBaseIEzhttps://nvapi.nicovideo.jphttps://www.nicovideo.jpFJP60X-Frontend-IDX-Frontend-Versionzhttps://account.nicovideo.jpniconicoc                 C   s   t | ddS )Nr    user_session)bool_get_cookiesget)self r-   M/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/niconico.pyis_logged_in3   s   zNiconicoBaseIE.is_logged_inTc                 C   s   t d| |d)NzUnable to login: expected)r   )r,   messager1   r-   r-   r.   _raise_login_error7   s   z!NiconicoBaseIE._raise_login_errorc                 C   sn  | j rd S | | j dd d | j| j dd ddd| j ddt||dd	}| j r0d S t|td
dhtddhthf }rK| |pHd ncd|v r| j	d|ddd}| j
t| j|d dddditd| did	\}}| j rwd S dt|jv rt|tddhthf}| |pd nd|v rt|tddhtddhthf}| |pd | jdd d! d S )"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 MFAr4   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,   usernamer7   webpageerr_msgpost_urlmfaurlhr-   r-   r.   _perform_login:   s\   




zNiconicoBaseIE._perform_loginN)T)__name__
__module____qualname__	_API_BASE	_BASE_URL_GEO_BYPASS_GEO_COUNTRIES_HEADERSrF   _NETRC_MACHINEpropertyr/   r3   rQ   r-   r-   r-   r.   r   '   s    

r   c                   @   s  e Zd ZdZdZdZdddddd	d
dddd
ddiddidddddiddidZddddZdi dddddddd d!d"d#d$d%ed&d'd(d)d*d+d,d-gd.ed/d0d1d2d3d4d5d6d7d"d$ed8d9d:id;d<i dd=dddd>dd d!d?d#d@d%ed&dAd(d=d*dBd,dCgd.ed/dDd1d2d3dEd5dFd7d?d@ed8d9d:id;dGi ddHddddIdd d!dJd#dKd%ed&dLd(dHd*dMd,dNgd.ed/dOd1d2d3dPd5dQd7dJdKed8d9d:id;dRi ddSddddTdd d!dUd#dVd%ed&dWd(dSd*dXd,dYgd.ed/dDd1d2d3dZd5d[d7dUdVed8d9d:id;d\i dd]dddd^dd d!d_d#d`d%ed&dad(d]d*dbd,dcgd.ed/ddd1d2d3ded5dfd7d_d`ed8d9d:id;dgi ddhddddiddjd!dkd#dld%ed&dmd(dhd*dnd,dYgd.ed/dod1d2d3dpd5dqd7dkdled8d9d:iddrdsi ddtdddduddvd!dwd#dxd%ed&dyd(dtd*dzd,dNgd.ed/d0d1d2d3d{d5d|d7dwdxed8d9d:iddrd}i dd~ddddddjd!dd#dd%ed&dd(d~d*dd,dgd.ed/d0d1d2d3dd5dd7dded8d9d:iddrdi ddddddddjd!dd#dd%ed&dd(dd*dd,dgd.ed/dd1d2d3dd5dd7dded8d9d:iddrg	Z	dd Z
dd Zdd ZdS )
NiconicoIEr'   u   ニコニコ動画zLhttps?://(?:(?:embed|sp|www)\.)?nicovideo\.jp/watch/(?P<id>(?:[a-z]{2})?\d+)z-Video unavailable, possibly removed by adminszChannel members onlyz%Video unavailable, channel was closedz/Video unavailable, community deleted or missingzPage unavailable, check the URLz!Sensitive content, login requiredz!Video unavailable, set to privatezNo permissionz'PPV video, payment information requiredzPremium members only)
ADMINISTRATOR_DELETE_VIDEOCHANNEL_MEMBER_ONLYDELETED_CHANNEL_VIDEODELETED_COMMUNITY_VIDEODEFAULTHARMFUL_VIDEOHIDDEN_VIDEONOT_ALLOWED	PPV_VIDEOPREMIUM_ONLYra   z/Video unavailable, may not exist or was deletedzMaintenance is in progressz Removed by rights-holder request)ra   RIGHT_HOLDER_DELETE_VIDEOz"Invalid session, re-login requiredzFailed to fetch content)	FORBIDDENINVALID_PARAMETERMAINTENANCE	NOT_FOUNDUNAUTHORIZEDUNKNOWN)
needs_authpremium_onlysubscriber_onlyz)https://www.nicovideo.jp/watch/1173108780idsm9extmp4titleuA   新・豪血寺一族 -煩悩解放 - レッツゴー！陰陽師availabilitypublicchannelu   中の
channel_id4comment_countdescriptionz$md5:b7f6d3e6c29552cc19fdea6a4b7dc194
display_id
1173108780durationi@  genresu	   未設定
like_counttagsz
mincount:5	thumbnailz8re:https?://img\.cdn\.nimg\.jp/s/nicovideo/thumbnails/.+	timestampi,8Eupload_date20070305uploader)uploader_id
view_countskip_downloadm3u8r>   	info_dictparamsz(https://www.nicovideo.jp/watch/sm8628149	sm8628149u,   【東方】Bad Apple!!　ＰＶ【影絵】u	   あにら10731211z$md5:1999669158cb77a45bab123c4fafe1d7   u	   ゲームz
mincount:3iJ20091026z)https://www.nicovideo.jp/watch/nm14296458
nm14296458u;   【鏡音リン】Dance on media【オリジナル】take2!u   りょうた18822557z$md5:9368f2b1f4178de64f2602c2f3d6cbf5   u   音楽・サウンドz
mincount:1i|wM20110429z(https://www.nicovideo.jp/watch/nl1872567	nl1872567u_   【12/25放送分】『生対談!!ひろゆきと戀塚のニコニコを作った人 』前半nicolive394z$md5:79fc3a54cfdc93ecc2b883285149e548iJ  u   エンターテイメントiqG20071226z)https://www.nicovideo.jp/watch/so38016254
so38016254u1   「のんのんびより のんすとっぷ」 PVu(   のんのんびより のんすとっぷ	ch2647028z$md5:6e2ff55b33e3645d59ef010869cde6a2r   u	   アニメz
mincount:4i_20201228z)https://www.nicovideo.jp/watch/so37602536
so37602536uN   田中有紀とゆきだるまと！ 限定放送アーカイブ（第12回）rp   u   あみあみ1691072761z$md5:2ee357ec4e76d7804fb59af77107ab67i  zcount:4is_20200929)r>   r   r   skipz)https://www.nicovideo.jp/watch/so41370536
so41370536u+   ZUN【出演者別】超パーティー2022ro   u$   ニコニコ超会議チャンネル	ch2607134z$md5:5692db5ac40d3a374fc5ec182d0249c3?   i0qc20221114z)https://www.nicovideo.jp/watch/so37574174
so37574174u2   ひぐらしのなく頃に 廿回し編　第1回uB   「ひぐらしのなく頃に」オフィシャルチャンネル	ch2646036z$md5:5296196d51d9c0b7272b73f9a99c236ai  u	   ラジオim_20200925z)https://www.nicovideo.jp/watch/so44060088
so44060088ud   松田的超英雄電波。《仮面ライダーガッチャード 放送終了記念特別番組》u   あみあみチャンネル	ch2638921z$md5:9dec5bb9a172b6d20a255ecb64fbd03eiY  z
mincount:7i0f20240903zEChannel members only; specified continuous membership period requiredc                    s  d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s3d S | j| j d
| d|dd|| jd| jd|itdt	t
dd |D dd |D i dd d }| ||d}	g }
t |	dd D ]- |
i  t | fdddtddhfdthfdthfdthfd tfd!d"i qztd#d |	D d$d d%}| | t |d&dtddhtthfpd'}|D ])td( d)d' d*< t |fd+ddthtfpd,d-< d.  |8  < q|
| |
S )/Nc                 S   s   |d o|d S )NisAvailablerq   r-   _vr-   r-   r.   <lambda>o      z-NiconicoIE._extract_formats.<locals>.<lambda>mediadomandvideosaudiosaccessRightKeyclientwatchTrackIdz
/v1/watch/z/access-rights/hlszapplication/json;charset=utf-8zapplication/json)Acceptr4   zX-Access-Right-KeyzX-Request-WithactionTrackIdoutputsc                 s       | ]}|d  V  qdS rq   Nr-   ).0r   r-   r-   r.   	<genexpr>      z.NiconicoIE._extract_formats.<locals>.<genexpr>c                 s   r   r   r-   )r   ar-   r-   r.   r     r   )r8   queryr9   r9   
contentUrlrt   c                 S   s   |d dkS )Nvcodecnoner-   r   r-   r-   r.   r     s    c                    s    d  |d S )N	format_idrq   
startswithr   )a_fmtr-   r.   r     s    bitRate  )scalesamplingRaterq   qualityLevel)abrasrr   qualityacodecaacc                 s   s     | ]}|d  dkr|V  qdS )r   r   Nr-   )r   fmtr-   r-   r.   r     s    c                 S   s   | d S )Ntbrr-   )fr-   r-   r.   r     s    )key.r   r>   .r   c                    s   |d  d kS )Nrq   r   r-   r   )v_fmtr-   r.   r     r   r   r   )r   strall_download_jsonrU   rV   rY   jsondumpslist	itertoolsproductencode_extract_m3u8_formatsappendr   r   anysorted_remove_duplicate_formatsminr   
rpartitionextend)r,   api_datavideo_id
fmt_filterr   r   
access_keytrack_idm3u8_urlraw_fmtsformatsv_fmtsmin_abrr-   )r   r   r.   _extract_formatsn  st   $

"
zNiconicoIE._extract_formatsc                    s  |  |}| jr
dnd}| j| j d| d| |ddi | j|  ddtt d	  id
dgd}|d }t|dt	hf}t|ddt
hf}|dkrt|ddt	jhf}t|dthf}	t| j||	dft	htf}
|	dv rx| j| jd n'|	dkrt|ddthfdu rd}
n|	dkr|rd| }
n	|	dv r| |
 |
rt|
dd |r|d!krtd"dd td#| | jdFi t|d$d%d&thtfd'thfd(thfd)fpd*}| ||}| j|}
|s|
r| j|
dd+ tg d, |||t|d-d.t	htttft|| ||t|d/d0d1d2t	htttf fd3d4t|d%d5thfi d6 D d7t|d8td9t	htfd:thfd9t	htfd:thfd;ft|d%d:thfd<t	hfd=thtfd>t hfd?thfd@ft|d%dAdBt hfdCt hfdDt hfdEfS )GNv3v3_guestz/api/watch//zDownloading API JSONzUnable to fetch datar   AAAAAAAAAA_r       )r8   r   expected_statusr9   publishScheduledAtmetastatus   	errorCode
reasonCodera   )DOMESTIC_VIDEOHIGH_RISK_COUNTRY_VIDEO)	countriesrb   viewerallowSensitiveContentsFz3Sensitive content, adjust display settings to watchrc   z,This content is scheduled to be released at )r^   rb   rc   re   rf   Tr0   i  zService temporarily unavailablezAPI returned error status paymentvideo)isContinuationBenefitisPpvisAdmission	isPremium)rn   needs_subscriptionneeds_premiumrw   )metadata_available)r>   	middleUrllargeUrlplayerogpgenrelabelrD   items.namec                    s.   g | ]\}}d | ||dt |ddqS )jpg)rs   rq   
preferencer>   Tlenient)r   )r   r   r>   thumb_prefsr-   r.   
<listcomp>  s    
z,NiconicoIE._real_extract.<locals>.<listcomp>r   default)rv   r}   r   r   release_timestamp	subtitlesr   
thumbnails)rx   owner)r  nicknamerq   )rx   ry   r   r   ru   r|   r   registeredAt)rq   ru   r|   r   r   countcommentlikeview)r{   r   r   r-   )!	_match_idr/   r   rV   rY   geo_verification_headersroundr   r   r   intupperr   
_ERROR_MAPr   raise_geo_restrictedrX   r)   raise_login_requiredr   _availabilityr   _STATUS_MAPr+   r   filterr   r   extract_subtitlesdictr  r	   r   )r,   r>   r   pathapi_respr   scheduled_timer  err_codereason_coderM   rv   r   r-   r  r.   _real_extract  s   
	






zNiconicoIE._real_extractc                 C   s   t |ddthfp
i }|dsd S t | j|d  d|ddd| j| j dd	d
| jti |d|dd ddd}ddt|dgiS )Nr+  	nvCommentserverz/v1/threadszDownloading commentszFailed to download commentsztext/plain;charset=UTF-8r   others)r4   Originr5   zX-Client-Os-Typer   	threadKey)additionalsr   rE  F)r8   r9   fatal)r9   threads.comments.rI  r   )rs   r9   )	r   r:  r+   r   rV   rY   r   r   r   )r,   r   r   comments_infodanmakur-   r-   r.   _get_subtitles  s6   

zNiconicoIE._get_subtitlesN)rR   rS   rT   IE_NAMEIE_DESC
_VALID_URLr3  r7  r1  _TESTSr   r@  rL  r-   r-   r-   r.   r\   g   s4   	
	
	
	
	
	
	
	
	
  `4Xr\   c                   @   s@   e Zd ZdZddddZdd Zedd	 Zd
d Zdd Z	dS )NiconicoPlaylistBaseIEd   r"   r#   zen-us)r%   r&   zX-Niconico-Languagec                 C   s   t d)Nz!Must be implemented in subclasses)NotImplementedErrorr,   list_idresourcer   r-   r-   r.   	_call_api  s   z NiconicoPlaylistBaseIE._call_apic                 C   s(   t | ddthtft | ddthfdS )Nr'  )r  )userr(  rq   )r   r   )r   r   r   )itemr-   r-   r.   _parse_owner"  s   z#NiconicoPlaylistBaseIE._parse_ownerc                 #   s    |d7 }|  |d| || jd}t|dpg D ]A}|d}|s$q|dp*i   fdd}d	||d
d| |dt|d|d|dt|dt d
| |V  qd S )Nr   zpage )pagepageSize)r  .)r  Nrq   r*  c                    s   t  | S N)r   r+   )xr*  r-   r.   r   6  s    z4NiconicoPlaylistBaseIE._fetch_page.<locals>.<lambda>r>   ru   https://www.nicovideo.jp/watch/shortDescriptionr   r-  r+  )r   )nHdUrlr  
listingUrlr>   )
_typerq   ru   r>   r|   r   r   r{   r   ie_key)rW  
_PAGE_SIZEr   r+   r   r\   re  rZ  )r,   rU  r[  respr  r   	get_countr-   r_  r.   _fetch_page)  s4   
z"NiconicoPlaylistBaseIE._fetch_pagec                 C   s   t t| j|| jS r]  )r   	functoolspartialri  rf  )r,   rU  r-   r-   r.   _entriesE  s   zNiconicoPlaylistBaseIE._entriesN)
rR   rS   rT   rf  _API_HEADERSrW  staticmethodrZ  ri  rl  r-   r-   r-   r.   rQ    s    
rQ  c                   @   sN   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d Zdd ZdS )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rq   ru   r|   r   r   i#  r>   r   playlist_mincountz4https://www.nicovideo.jp/user/805442/mylist/27411728Tr>   only_matchingz-https://www.nicovideo.jp/my/mylist/#/68048635c                 C   s*   | j d| |d| || jdd d S )Nz&https://nvapi.nicovideo.jp/v2/mylists/Downloading r   r8   r9   mylistr   rm  rT  r-   r-   r.   rW  _  s   

zNiconicoPlaylistIE._call_apic                 C   sL   |  |}| |dddi}| j| |||d|dfi | |S )Nr   r\  r   r  r|   r.  rW  playlist_resultrl  r+   rZ  )r,   r>   rU  ry  r-   r-   r.   r@  e  s   

z NiconicoPlaylistIE._real_extractNrR   rS   rT   rM  rO  rP  rW  r@  r-   r-   r-   r.   ro  I  s*    ro  c                   @   s\   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d Zdd ZdS )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   アルファるふぁ44113208rr  
   rs  z&https://www.nicovideo.jp/series/12312/12312u>   バトルスピリッツ　お勧めカード紹介(調整中) u   野鳥2275360g   zhttps://nico.ms/series/203559Tru  c                 C   s&   | j d| |d| || jdd S )Nz%https://nvapi.nicovideo.jp/v2/series/rw  rx  r9   rz  rT  r-   r-   r.   rW    s   

zNiconicoSeriesIE._call_apic                 C   sP   |  |}| |dddid }| j| |||d|dfi | |S )Nr   r\  r   detailru   r|   r{  )r,   r>   rU  seriesr-   r-   r.   r@    s   

zNiconicoSeriesIE._real_extractNr}  r-   r-   r-   r.   r~  o  s6    r~  c                	   @   sh   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d Zdd ZdS )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/videoT)noter>   rv  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                 C   s6   |dkrdnd}| j d| |d| || jdd S )Nzhistory/likelikeszwatch/historyz'https://nvapi.nicovideo.jp/v1/users/me/rw  rx  r9   rz  )r,   rU  rV  r   r;  r-   r-   r.   rW    s   
zNiconicoHistoryIE._call_apic              
   C   s~   |  |}z| |dddi}W n ty. } zt|jtr)|jjdkr)| d  d }~ww | j| 	||fi | 
|S )Nr   r\  r   i  z,You have to be logged in to get your history)r.  rW  r   
isinstancecauser   r  r5  r|  rl  rZ  )r,   r>   rU  ry  er-   r-   r.   r@    s   

 zNiconicoHistoryIE._real_extractN)	rR   rS   rT   rM  rN  rO  rP  rW  r@  r-   r-   r-   r.   r    s>    r  c                   @   s"   e Zd ZdZdddZdd ZdS )	NicovideoSearchBaseIEsearchNDownloading page %(page)sc           
      c   s    |pi }d|v r|d gnt d}|D ]0}t||d< | j||||d|i d}td|}|D ]}	| d|	 d|	V  q2|sE d S qd S )Nr[  r   r   r  z2(?<=data-video-id=)["\']?(?P<videoid>.*?)(?=["\'])r`  Niconico)r   r*  r   rG   refindall
url_result)
r,   r>   item_idr   r  pagespage_numrL   resultsrY  r-   r-   r.   rl    s   zNicovideoSearchBaseIE._entriesc                 C   s    |  | d| j d| |S )Nz//www.nicovideo.jp/r   )rl  _proto_relative_url_SEARCH_TYPE)r,   r   r-   r-   r.   _search_results  s   z%NicovideoSearchBaseIE._search_results)Nr  )rR   rS   rT   r  rl  r  r-   r-   r-   r.   r    s    
r  c                   @   s   e Zd ZdZdZdZdS )NicovideoSearchIEzNico video searchznicovideo:search
nicosearchN)rR   rS   rT   rN  rM  _SEARCH_KEYr-   r-   r-   r.   r    s    r  c                   @   sL   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d ZdS )NicovideoSearchURLIE_urlzNico video search URLsz8https?://(?:www\.)?nicovideo\.jp/search/(?P<id>[^?#&]+)?z"http://www.nicovideo.jp/search/sm9rr   rq   ru   (   rs  zRhttps://www.nicovideo.jp/search/sm9?sort=h&order=d&end=2020-12-31&start=2020-01-01   )r>   r   playlist_countc                 C       |  |}| | ||||S r]  r.  r|  rl  r,   r>   r   r-   r-   r.   r@       
z"NicovideoSearchURLIE._real_extractN)	rR   rS   rT   r  rM  rN  rO  rP  r@  r-   r-   r-   r.   r    s$    r  c                       sf   e Zd ZdZej dZdZddddddgZe	d	d
d
Z
dZdZdddZd fdd	Z  ZS )NicovideoSearchDateIEzNico video search, newest firstz:datenicosearchdateznicosearchdateall:ar   r  iJ  rs  i  r       2   Nc                 c   s    |p| j |ptj  }}tt| j||||| jd| d| d}|| j	krO||krO||| d  }| 
||||E d H  | 
||||E d H  d S | | d| d|  | j||||ddE d H  d S )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_PAGErl  	to_screen)r,   r>   r  
start_dateend_datelast_page_lenmidpointr-   r-   r.   rl    s   

zNicovideoSearchDateIE._entriesc                 #   sJ    t |t |p|ddd}|rt ||d< t j||||dE d H  d S )Nr   d)startendsortorderr[  r  )r   superrl  )r,   r>   r  r  r  r  r  r   	__class__r-   r.   r  !  s   
z+NicovideoSearchDateIE._get_entries_for_date)NN)NNN)rR   rS   rT   rN  r  rM  r  rP  r  r  r  r  r  rl  r  __classcell__r-   r-   r  r.   r     s    	
r  c                   @   s8   e Zd ZdZdZdZdZdddddd	gZd
d ZdS )NicovideoTagURLIEzniconico:tagzNicoNico video tag URLsrD   z5https?://(?:www\.)?nicovideo\.jp/tag/(?P<id>[^?#&]+)?u;   https://www.nicovideo.jp/tag/ドキュメンタリー淫夢u   ドキュメンタリー淫夢r  r   rs  c                 C   r  r]  r  r  r-   r-   r.   r@  <  r  zNicovideoTagURLIE._real_extractN)	rR   rS   rT   rM  rN  r  rO  rP  r@  r-   r-   r-   r.   r  .  s    	r  c                   @   sB   e Zd ZdZdddiddZdZdZd	d
dZdd Zdd Z	dS )NiconicoUserIEzHhttps?://(?:www\.)?nicovideo\.jp/user/(?P<id>\d+)(?:/video)?/?(?:$|[#?])z$https://www.nicovideo.jp/user/419948rq   419948e   rs  zehttps://nvapi.nicovideo.jp/v2/users/%s/videos?sortKey=registeredAt&sortOrder=desc&pageSize=%s&page=%srR  r"   r#   r$   c                 c   s    d}d }}||k rX| j | j|| j|d f || jd|r"d| nd d}|s2t|d d}|d d	 D ]}|d7 }| jd
|d d  tdV  q8|d7 }||k sd S d S )Nr   r   zDownloading JSON metadata%sz page r  )r8   r  r9   
totalCountr  r`  	essentialrq   )ie)r   _API_URLrf  rm  r   r+   r  r\   )r,   rU  total_countr*  r  json_parsedentryr-   r-   r.   rl  R  s$   
zNiconicoUserIE._entriesc                 C   s   |  |}| | ||S r]  r  )r,   r>   rU  r-   r-   r.   r@  b  s   
zNiconicoUserIE._real_extractN)
rR   rS   rT   rO  _TESTr  rf  rm  rl  r@  r-   r-   r-   r.   r  A  s    r  c                   @   s~   e Zd ZdZdZdZdddeddd	ed
dddddedddiddddeddddeddddddedddidgZdd Z	d S )!NiconicoLiveIEzniconico:liveu   ニコニコ生放送zDhttps?://(?:sp\.)?live2?\.nicovideo\.jp/(?:watch|gate)/(?P<id>lv\d+)z+https://live.nicovideo.jp/watch/lv329299587lv329299587rt   u'   ニコニコエンタメチャンネル	ch2640322z)https://ch.nicovideo.jp/channel/ch2640322z$md5:281edd7f00309e99ec46a87fb16d7033is_livezre:https?://.+iHd_20201224u   株式会社ドワンゴ)rq   rs   ru   rx   ry   channel_urlr{   r|   live_statusr   r   r   r   r   r   Tr   z+https://live.nicovideo.jp/watch/lv331050399lv331050399   u   みんなのおもちゃ REBOOT	ch2642088z)https://ch.nicovideo.jp/channel/ch2642088z$md5:8d0bb5beaca73b911725478a1e7c7b91ia`20210329)rq   rs   ru   	age_limitrx   ry   r  r{   r|   r  r   r   r   r   r   c           "      C   s  |  |}| j||dd\}}t|tddhthf }r#t|ddd|jv r*dnd }|re| js6| d	 | 	d
d d}t|tdddht
hdtjhdthfr_| ddd | 	||}ntdddt|tddddht
hdtjhf}t|ddthfdd}	t|dddthtdhf}
t|
d|	i}
| j|
|dd d!id"}| d# |td$dd%d&d'd$d(d)d*d+d,d-d. 	 | }|sqt|}t|tsq|d/d0kr|d1 d2 }|d1 d3 }|d1 d4 }n?|d/d5kr| | td6|d/d7kr| | t|d8d9thf|d}t|| d:d$r*| d;t|d<  qt|d=p9| jd>|d?d$d@}t|dAdBthfpEi }g }| D ]\\}}t|tsf|||dCt |ddD qL| D ]<\}}t |ddDpzt |ddD}|dE|dF}}|| dG| dH| |tt!|dIdJt"dKdLhfdM| qjqL|D ]}| j|dN |dO |dP t#|dQ|dR |dS dT qdUdV |dWd  D }dXdYdZ}| j$||d[dd\}|D ]9} d]| d^< | d_d`krt%|| da | da< q| dbd`krt&| dc ' }!| (|!dd||!| da de q|||t|dAd0dft)hfp-dg||
dhdit|djdkdldmdndodptt|dqt*t|drd||dsS )tNr   )r   r2   r:   Tr0   age_authr  z2Login is required to access age-restricted contentzhttps://www.nicovideo.jp/myzChecking age verificationzjs-initial-userpage-data)rq   htmlzdata-environmentr	  z.nicovideo.jp1z)Sensitive content setting must be enabledscriptzembedded-data)rD   rq   r  z
data-propssite
frontendId9r"  relivewebSocketUrlzwebsocket URLfrontend_idzConnecting to WebSocket serverrD  zhttps://live.nicovideo.jp)r8   zSending HLS server requestF	webSocket)commentableprotocolsingle_cookiehighhlsr   )accessRightMethod	chasePlaylatencyr  r   )	reconnectroomstreamstartWatching)r9   typer  r  r9   uriavailableQualitiescookies
disconnectz$Disconnected at middle of extractionerrorbodycodeverbosezServer response: rR  )programru   )zog:titleztwitter:titlez
live title)rG  r  r   )rq   r>   r  widthheightr   r^  imager   r  )default_ext)rq   r>   rs   domainr  valueexpiresr;  secure)expire_timer;  r  c                 s   s    | ]
}| d s|V  qdS )audio_Nr   )r   qr-   r-   r.   r     s    z/NiconicoLiveIE._real_extract.<locals>.<genexpr>r   	audio_low
audio_high)`      rt   )rs   liveniconico_liver  r   r   r   r   r>   z	mp4a.40.2)r   r   r   
maxQualitynormal)max_qualitywsws_url)rq   ru   r  downloader_options)r  
statistics
watchCount)r  r  commentCount)r  supplierr  )socialGroupr  )r  rq   )r  socialGroupPageUrl)r   r{   r   rx   ry   r  )r  r|   )r  openTime)r|   r   r  r&  r   )+r.  rI   r   r   r	   r   r>   r/   r5  rG   r   r   loadsr)   _set_cookier   r   r   r   rE   write_debugsendr   recvr  r:  r+   	get_paramr   _html_search_metar  r   r   r   r
   r   r   nextr   lowerupdater   r   )"r,   r>   r   rL   rP   rM   r  myembedded_datar  r  r  r   r9   r   r   r  r2   ru   
raw_thumbsr&  r  r  kimg_urlresr  r  cookieq_itera_mapr   r   r   r-   r-   r.   r@    s  











	zNiconicoLiveIE._real_extractN)
rR   rS   rT   rM  rN  rO  r   r1  rP  r@  r-   r-   r-   r.   r  g  sV    )r  )2r  r  rj  r   r   r  commonr   r   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\   rQ  ro  r~  r  r  r  r  r  r  r  r  r-   r-   r-   r.   <module>   s2    \@   23&.0.&