
    ĞiF                         d dl Z d dl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  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dS )    N   )InfoExtractor   )	ExtractorErrorOnDemandPagedListfilter_dictint_or_noneparse_qsstr_or_nonetraverse_objunified_timestampurl_or_nonec                   *    e Zd ZdZd Zd Zd Zd ZdS )NiconicoChannelPlusBaseIEhttps://nicochannel.jpc                 (     | j         d| fd|i|S )Nz"https://nfc-api.nicochannel.jp/fc/video_id)_download_json)selfpathitem_idkwargss       iC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/niconicochannelplus.py	_call_apiz#NiconicoChannelPlusBaseIE._call_api   s?    "t"777U UBIUMSU U 	U    c                                            dd dd          d         d         }t          | fdd	fd
          }|st          d dd          |S )Nzcontent_providers/channelsz	channels/zFetching channel listzUnable to fetch channel list)r   noteerrnotedatacontent_providersc                 0    |d         j          d k    S )Ndomain/)_WEBPAGE_BASE_URL)_vchannel_namer   s     r   <lambda>zANiconicoChannelPlusBaseIE._find_fanclub_site_id.<locals>.<lambda>   s!    84+A(R(RL(R(RR r   idFget_allzChannel z does not existT)expected)r   r   r   )r   r'   fanclub_list_json
fanclub_ids   ``  r   _find_fanclub_site_idz/NiconicoChannelPlusBaseIE._find_fanclub_site_id   s     NN(2Ll2L2L(2P + 
 
  &' ""3RRRRRTX6Z  
  	Z !IL!I!I!ITXYYYYr   c           	      v    t          |                     d| dd| ddd          ddt          hf          pi S )	Nfanclub_sites/z/page_base_infozFetching channel base infoz!Unable to fetch channel base infoF)r   r   r   fatalr   fanclub_site)r   r   dictr   fanclub_site_ids     r   _get_channel_base_infoz0NiconicoChannelPlusBaseIE._get_channel_base_info%   sd    DNN=_===GiXgGiGi-7Zbg + 
 
 NTF+- - 3 13	3r   c                     t          |                     d| dd| dddt          j        d                              d                    d	d
t
          hf          pi S )Nr1   z
/user_infozFetching channel user infoz!Unable to fetch channel user infoFnullascii)r   r   r   r2   r   r   r3   )r   r   jsondumpsencoder4   r5   s     r   _get_channel_user_infoz0NiconicoChannelPlusBaseIE._get_channel_user_info+   s    DNN8_888BdSbBdBd-7ZbgF##**733 + 
 
 NTF+	- - 3 13		3r   N)__name__
__module____qualname__r$   r   r/   r7   r>    r   r   r   r      sY        0U U U
 
 
3 3 33 3 3 3 3r   r   c                       e Zd ZdZdZdZdddddd	d
dddddeeg ddddiddddddddddddeeg dd ddidgZd! Zd" Z	d# Z
d$S )%NiconicoChannelPlusIENiconicoChannelPlusu$   ニコニコチャンネルプラスzLhttps?://nicochannel\.jp/(?P<channel>[\w.-]+)/(?:video|live)/(?P<code>sm\w+)z<https://nicochannel.jp/kaorin/video/smsDd8EdFLcVZk9yyAhD6H7HsmsDd8EdFLcVZk9yyAhD6H7Hu*   前田佳織里はニコ生がしたい！mp4u$   前田佳織里の世界攻略計画kaorinzhttps://nicochannel.jp/kaorinnot_livezIhttps://nicochannel.jp/public_html/contents/video_pages/74/thumbnail_pathu|   ２０２１年１１月に放送された
「前田佳織里はニコ生がしたい！」アーカイブになります。i+ai  20220105)r)   titleextchannel
channel_idchannel_urllive_status	thumbnaildescription	timestampdurationcomment_count
view_counttagsupload_dateskip_downloadT)url	info_dictparamsz=https://nicochannel.jp/testman/video/smDXbcrtyPNxLx9jc4BW69VesmDXbcrtyPNxLx9jc4BW69Veztest oshirou-   本番チャンネルプラステストマンtestmanzhttps://nicochannel.jp/testman   was_liveifRciQ 20221021)r)   rK   rL   rM   rN   rO   	age_limitrP   rS   rT   rU   rV   rW   rX   c                    |                      |                              dd          \  }}|                     |          }|                     d| |ddidd          d	         d
         }|                     ||          \  }}|                    d          }g }	|dk    r$|rd| d}
nd}
|                     |
d|           n7|                     |d         d                             |          |          }	||	d| 	                    |                              d          || j
         d| t          |                     |          d          |t          |          d	t          |dt          hfdt          hfdt          hfdt          hfdd t           hfd!d"t           hfd!d#t           hfd$d%d&t          hfd'          d(|                     |t          |d)          *          iS )+NcoderM   video_pages/fc_use_devicer9   zFetching video page infozUnable to fetch video page info)r   headersr   r   r   
video_pagelive_scheduled_start_atis_upcomingzThis live event will begin at z UTCzThis event has not started yetT)r,   r   video_streamauthenticated_url)
session_id)m3u8_urlr   )tbrvcodecacodecfanclub_site_namer#   )content_providerrb   )	r)   formats_format_sort_fieldsrM   rN   rO   rb   rP   release_timestamprK   thumbnail_urlrR   released_atactive_video_filenamelengthvideo_aggregate_infonumber_of_commentstotal_views
video_tags.tag)rK   rQ   rR   rS   rT   rU   rV   rW   __post_extractor)video_comment_settingcomment_group_id)content_coder   )_match_valid_urlgroupr/   r   _get_live_status_and_session_idgetraise_no_formats_extract_m3u8_formatsformatr7   r$   r   r>   r   strr   r	   extract_comments)r   rZ   r   rN   r6   	data_jsonrP   rm   release_timestamp_strrt   msgs              r   _real_extractz#NiconicoChannelPlusIE._real_extracte   ss   #'#8#8#=#=#C#CFI#V#V j44Z@@NN)<))</[aIb+5V # 
 
   	
 #'"F"F|U^"_"_Z ).G H H-''$ 7R7LRRR6!!#|!LLLL00">23FGNNZdNee% 1 ' 'G #>22?CCGGH[\\$"4CCzCC%d&A&A/&R&RTuvv&!23H!I!I
 
 9!C5)-}= -u5+.?-@A4hN"8:NQ\P]!^5}{mT%sEC59	' 	' 	 	
(  5 5)!-i9f!g!g !6 !i !i)
 
 	
r   c              #     K   | d}|sd S |                      d| d|dd          d         d         }|                     d	|d
dddidt          |                     ddg          d                   pddt	          j        ||d                              d                    }t          |d          D ]I}t          |dt          hfdt          hfdt          hfdt          hfdt          hfdd hfdd           V  Jd S )!Nz	/commentsre   z/comments_user_tokenzGetting comment tokenzUnable to get comment token)r   r   r   access_tokenz,https://comm-api.sheeta.com/messages.historyzFetching commentszUnable to fetch commentsContent-Typeapplication/jsonascmax_comments r   x   )sort_directionlimit)tokengroup_idr:   )r   r   r   rg   queryr   .nickname	sender_idr)   message)
updated_atsent_at
created_atc                     | dk    S )Nz-1rB   )xs    r   r(   z5NiconicoChannelPlusIE._get_comments.<locals>.<lambda>   s
    qDy r   )author	author_idr)   textrS   author_is_uploaderFr*   )r   r   r	   _configuration_argr;   r<   r=   r   r   r   r   )r   r   r   r   comment_access_tokencomment_listcomments          r   _get_commentsz#NiconicoChannelPlusIE._get_comments   s     !,,, 	4#~~=<===w(2O  .  
  
   ! "
 **:W$.H#%78"'$T%<%<^bT%R%RST%UVV]Z]  -,    vg +     $L#66 	 	Gw%u-)K=9k]+"SE*EHYGZ['25H5H4I&J) )       	 	r   c           	         |                     d          }|                     d          }i }|dk    r|rd}nd}n|dk    ru|                     d          sdS |sd	}nnd}d
di}t          |d          }t          |d          }|                     d| d| d           |r|st          d|d          nt          d| |d          |                     | d| d|            |                     d| d| dt          j        |                              d          ddddd d!"          d#         d$         }	||	fS )%Ntypelive_finished_atvodr`   rI   livelive_started_at)rj   r   is_livebroadcast_typedvr)videoallow_dvr_flg)r   convert_to_vod_flgzallow_dvr_flg = z, convert_to_vod_flg = .z/Live was ended, there is no video for download.T)r   r,   zUnknown type: Fz: video_type=z, live_status=re   z/session_idsz/sessionr:   r   r9   r   )r   rf   originzGetting session idzUnable to get session id)r   r   rg   r   r   r   rm   )r   r   write_debugr   r   r;   r<   r=   )
r   r   r   
video_typer   payloadrP   video_allow_dvr_flgvideo_convert_to_vod_flgrm   s
             r   r   z5NiconicoChannelPlusIE._get_live_status_and_session_id   s   ]]6**
$==);<< )((6!!==!233 )((# q'(+U3&29>X&Y&Y#+7	Cb+c+c(  !{4G!{!{`x!{!{!{|||+ q0H q(IT`koq q q qq !!>*!>!>`effffL^^z^^Q\^^___^^5<555,?X?X?XG$$++G44 2!'2? ?
 &/I $ 
 
   
 J&&r   N)r?   r@   rA   IE_NAMEIE_DESC
_VALID_URLint_TESTSr   r   r   rB   r   r   rD   rD   3   s        #G4G`JM,A=":%d [# %
 
$ T
' 0 O,"F#;%# %
 
" T
' -,F\2
 2
 2
h     D+' +' +' +' +'r   rD   c                       e Zd ZdZd ZdS ) NiconicoChannelPlusChannelBaseIE   c           
   #      K   |                      ||i ||dz   | j        dddid|dz    dd|dz    d          }t          |d	          D ],}|                     | j         d
| d| t
                    V  -d S )Nr   )pageper_pagerf   r9   zGetting channel info (page )z!Unable to get channel info (page )r   rg   r   r   )r   video_pageslist.r   r#   z/video/)r   
_PAGE_SIZEr   
url_resultr$   rD   )r   r   r   r'   r   r   responser   s           r   _fetch_paged_channel_video_listz@NiconicoChannelPlusChannelBaseIE._fetch_paged_channel_video_list   s      >>' "" O" " "
 %f-:tax:::CqCCC " E E )3ghh 	h 	hL//)OOLOOOOQfh h h h h h	h 	hr   N)r?   r@   rA   r   r   rB   r   r   r   r      s-        Jh h h h h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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dddd	dddddd	g
Zd ZdS )"NiconicoChannelPlusChannelVideosIEz"NiconicoChannelPlus:channel:videosug   ニコニコチャンネルプラス - チャンネル - 動画リスト. nicochannel.jp/channel/videosz=https?://nicochannel\.jp/(?P<id>[a-z\d\._-]+)/videos(?:\?.*)?z%https://nicochannel.jp/testman/videosztestman-videosu4   本番チャンネルプラステストマン-videosr)   rK   r_   rZ   r[   playlist_mincountz'https://nicochannel.jp/testtarou/videosztesttarou-videosu.   チャンネルプラステスト太郎-videosr   z'https://nicochannel.jp/testjirou/videosztestjirou-videosu.   チャンネルプラステスト二郎-videosr   zEhttps://nicochannel.jp/testman/videos?tag=%E6%A4%9C%E8%A8%BC%E7%94%A8   z/https://nicochannel.jp/testman/videos?vodType=1z7https://nicochannel.jp/testman/videos?sort=-released_atzOhttps://nicochannel.jp/testman/videos?tag=%E6%A4%9C%E8%A8%BC%E7%94%A8&vodType=1zWhttps://nicochannel.jp/testman/videos?tag=%E6%A4%9C%E8%A8%BC%E7%94%A8&sort=-released_atzAhttps://nicochannel.jp/testman/videos?vodType=1&sort=-released_atzahttps://nicochannel.jp/testman/videos?tag=%E6%A4%9C%E8%A8%BC%E7%94%A8&vodType=1&sort=-released_atc                    |                      |          }|                     |          }|                     |                              d          }t	          |          }|                     t          t          j        | j	        d| dt          t          |d          t          |dd          t          |dd	          d
          || d          | j                  | d| d          S )u  
        API parameters:
            sort:
                -released_at         公開日が新しい順 (newest to oldest)
                 released_at         公開日が古い順 (oldest to newest)
                -number_of_vod_views 再生数が多い順 (most play count)
                 number_of_vod_views コメントが多い順 (most comments)
            vod_type (is "vodType" in "url"):
                0 すべて (all)
                1 会員限定 (members only)
                2 一部無料 (partially free)
                3 レンタル (rental)
                4 生放送アーカイブ (live archives)
                5 アップロード動画 (uploaded videos)
        rr   r1   z/video_pages)r   r   )sortr   z-released_at)default)vodTyper   0)r   r   vod_typez/videosz-videosplaylist_idplaylist_title)	_match_idr/   r7   r   r
   playlist_resultr   	functoolspartialr   r   r   r   )r   rZ   rN   r6   r'   qss         r   r   z0NiconicoChannelPlusChannelVideosIE._real_extractS  s   " ^^C((
44Z@@22?CCGGH[\\c]]##!8:h?:h:h:h+B
;; ,Rn U U U$0^S$Q$Q$Q! !  
 : 6 6 68 8 	! 	! &...,?W?W?W $ Y Y 	Yr   Nr?   r@   rA   r   r   r   r   r   rB   r   r   r   r      s       2GwGQJ 7"K
 
    9$E
 
   9$E
 
    W"K
 
   A"K
 
    I"K
 
    a"K
 
   i"K
 
   S"K
 
    s"K
 
  QPFd!Y !Y !Y !Y !Yr   r   c                   T    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	gZd ZdS )!NiconicoChannelPlusChannelLivesIEz!NiconicoChannelPlus:channel:livesui   ニコニコチャンネルプラス - チャンネル - ライブリスト. nicochannel.jp/channel/livesz3https?://nicochannel\.jp/(?P<id>[a-z\d\._-]+)/livesz$https://nicochannel.jp/testman/livesztestman-livesu3   本番チャンネルプラステストマン-livesr   r_   r   z&https://nicochannel.jp/testtarou/livesztesttarou-livesu-   チャンネルプラステスト太郎-livesr   z&https://nicochannel.jp/testjirou/livesztestjirou-livesu-   チャンネルプラステスト二郎-livesr   c                 P   |                      |          }|                     |          }|                     |                              d          }|                     t          t          j        | j        d| dddi|| d          | j	                  | d| d          S )	u  
        API parameters:
            live_type:
                1 放送中 (on air)
                2 放送予定 (scheduled live streams, oldest to newest)
                3 過去の放送 - すべて (all ended live streams, newest to oldest)
                4 過去の放送 - 生放送アーカイブ (all archives for live streams, oldest to newest)
            We use "4" instead of "3" because some recently ended live streams could not be downloaded.
        rr   r1   z/live_pages	live_type   z/livesz-livesr   )
r   r/   r7   r   r   r   r   r   r   r   )r   rZ   rN   r6   r'   s        r   r   z/NiconicoChannelPlusChannelLivesIE._real_extract  s     ^^C((
44Z@@22?CCGGH[\\##!8:g?:g:g:g#Q : 5 5 57 7 ! ! &--->U>U>U $ 	W 	W 		Wr   Nr   rB   r   r   r   r   w  s        1GyGGJ5!J
 
    8#D
 
   8#D
 
  F.W W W W Wr   r   )r   r;   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   rD   r   r   r   rB   r   r   <module>r      s        ! ! ! ! ! !
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3 3 3 3 3 3 3 3Bs' s' s' s' s'5 s' s' s'lh h h h h'@ h h h(wY wY wY wY wY)I wY wY wYt3W 3W 3W 3W 3W(H 3W 3W 3W 3W 3Wr   