
    Ği{*                     r    d dl Z d dlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ  G d d	e          ZdS )
    N   )
FragmentFD   )	HTTPError)RegexNotFoundErrorRetryManagerdict_getint_or_nonetry_get)HTTPHeaderDictc                   .    e Zd ZdZd Zed             ZdS )YoutubeLiveChatFDz3 Downloads YouTube live chats fragment by fragment c           
      6    d                               d j         d            j                            d          s!d         dk    r                     d            j                            dd	          }|d
d dddlm}  | j                  t          t          j	                    dz            d/ fd	 fd fdd fdd/ f	d	} 
                                d                   }|sd	S                                }	                     |                    dd                    }n# t          $ r Y d	S w xY wt          |d           }	                     d                               |                    dd                    }
|
sd	S t          |
d           }t          |
d           }|r|sd	S t          |d t$                    }d         dk    rd|z   }d|	z   }nd         dk    r
d |z   }d!|	z   }dx}}d }|	|d"z  }||	d#}|d"k    rd$t%          t'          |d%z
  d                    i|d&<   |rd'|i|d(         d)<                       |
|*          }|                    d+d,i           t-          j        |d	-                                          d.z   } |||||          \  }}	}}n |||          \  }}	}}|sd	S |rn|	ˉ                               S )0Nvideo_id[z] Downloading live chatskip_downloadprotocolyoutube_live_chatzLive chat download runs until the livestream ends. If you wish to download the video simultaneously, run a separate yt-dlp instancetestFT)filenamelivetotal_fragsr   )YoutubeBaseInfoExtractor  c                 |    t                              d          |          }                    | ||          S )Nhttp_headers)r   get_download_fragment)urldataheadersr   ctx	info_dictselfs       hC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/downloader/youtube_live_chat.pydl_fragmentz4YoutubeLiveChatFD.real_download.<locals>.dl_fragment(   s:    ))--*G*GQQL**3YdSSS    c                    d x}x}}t                      }|                     dg           D ]a}d|v r|d         }t          |d                   }|                    t	          j        |d                                          dz              b|Ct          | d t                    }|r*|                    d          }|                    d	          }		                    |           |||fS )
NactionsreplayChatItemActionvideoOffsetTimeMsecFensure_ascii   
c                 *    | d         d         d         S )Ncontinuationsr   liveChatReplayContinuationData xs    r%   <lambda>zOYoutubeLiveChatFD.real_download.<locals>.parse_actions_replay.<locals>.<lambda>8   s    a034TU r'   continuationclickTrackingParams)
	bytearrayr   intextendjsondumpsencoder   dict_append_fragment)
live_chat_continuationoffsetcontinuation_idclick_tracking_paramsprocessed_fragmentactionreplay_chat_item_actionr6   r"   r$   s
           r%   parse_actions_replayz=YoutubeLiveChatFD.real_download.<locals>.parse_actions_replay,   s(   ?CCFC_'<!*044YCC M M)V33.45K.L+ !89N!OPPF"))JvE:::AACCeKM M M M!&*UUW[ ]  ]   T&2&6&6~&F&FO,8,<,<=R,S,S)!!#'9:::"F,AAAr'   c                     t          | d t                    }|rG                    d           |                    d          }d}|                    d          }|||fS  |           S )Nc                 f    | d         d         d         d         d         d         d         d         S )	NheaderliveChatHeaderRendererviewSelectorsortFilterSubMenuRenderersubMenuItemsr   r6   reloadContinuationDatar2   r3   s    r%   r5   zWYoutubeLiveChatFD.real_download.<locals>.try_refresh_replay_beginning.<locals>.<lambda>C   sA    !H+&>?OPklm{|}~  AO  P  Qi  j r'   r'   r6   r   trackingParams)r   r>   r?   r   )r@   refresh_continuationrefresh_continuation_idrA   rC   r"   rG   r$   s        r%   try_refresh_replay_beginningzEYoutubeLiveChatFD.real_download.<locals>.try_refresh_replay_beginning?   s    #*& j  j  lp$q $q  $ N%%c3///*>*B*B>*R*R'(<(@(@AQ(R(R%.8MMM''(>???r'   r   c                 v   d x}}t                      }|                     dg           D ]r}                    |          }||z
  d|git                    dd}|                    t          j        |d                                          dz              sd d g}t          | |t                    }|re|                    d	          }|                    d
          }t          |                    d                    }	|	t          j        |	dz                                 
|           ||fS )Nr)   T)r*   r+   isLiveFr,   r.   c                 *    | d         d         d         S )Nr0   r   invalidationContinuationDatar2   r3   s    r%   r5   zMYoutubeLiveChatFD.real_download.<locals>.parse_actions_live.<locals>.<lambda>`   s    !O,Q/0NO r'   c                 *    | d         d         d         S )Nr0   r   timedContinuationDatar2   r3   s    r%   r5   zMYoutubeLiveChatFD.real_download.<locals>.parse_actions_live.<locals>.<lambda>a   s    !O,Q/0GH r'   r6   r7   	timeoutMsr   )r8   r   parse_live_timestampstrr:   r;   r<   r=   r   r>   r
   timesleepr?   )r@   rB   rC   rD   rE   	timestamppseudo_actioncontinuation_data_getterscontinuation_data
timeout_msr"   live_offsetr$   
start_times             r%   parse_actions_livez;YoutubeLiveChatFD.real_download.<locals>.parse_actions_liveO   s   6::O3!*044YCC T T 55f==	("+j"8K .7,A+.{+;+;"! !
 #))J}5AAAHHJJURT T T T POHH)% !((>@Y[_ ` `  2"3"7"7"G"G(9(=(=>S(T(T%():)>)>{)K)KLL
)JzD0111!!#'9:::"K1FFFr'   c                 "  	 t          j                            d          j        |          D ]}	  | ||          }|s dS                               }	                     |                    dd                    }n# t          $ r d }Y nw xY w|st          j	        |          }t          |d t                    pi }d         dk    rp	|d	k    op}	d
g |	|          R c S # t          $ r}
|
|_        Y d }
~
d }
~
ww xY wdS )Nfragment_retries)
frag_index)FNNNutf-8replacec                     | d         d         S )NcontinuationContentsliveChatContinuationr2   r3   s    r%   r5   zVYoutubeLiveChatFD.real_download.<locals>.download_and_parse_fragment.<locals>.<lambda>|   s    !$:";<R"S r'   r   r   r   T)r   paramsr   report_retry_read_fragmentextract_yt_initial_datadecoder   r;   loadsr   r>   r   error)r   ri   request_datar!   retrysuccessraw_fragmentr    r@   funcerrr"   r&   ier#   rf   rG   r$   rS   r   s              r%   download_and_parse_fragmentzDYoutubeLiveChatFD.real_download.<locals>.download_and_parse_fragmentm   s   %dkoo6H&I&I4K\isttt  )k#|WEEG" 7666#'#6#6s#;#;L$!99(LDWDWX_ajDkDkll- $ $ $#$ 8#z,77-4SSUY.[ .[ .a^` + 'z26II`N` 4 *a P4P43  !@44(>#?#?@@@@@    "%EKHHHH +*sB   C1C1*BC1BC1BAC11
D;DDr   rj   rk   c                 f    | d         d         d         d         d         d         d         d         S )	NcontentstwoColumnWatchNextResultsconversationBarliveChatRendererr0   r   rO   r6   r2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>   sB    a
m$?@ARSTfghwxyz{  }U  V  We  f r'   r'   c                     | d         S )NINNERTUBE_API_KEYr2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>   s    1-@+A r'   c                     | d         S )NINNERTUBE_CONTEXTr2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>   s    Q7J5K r'   c                     | d         d         S )NclientvisitorDatar2   r3   s    r%   r5   z1YoutubeLiveChatFD.real_download.<locals>.<lambda>   s    AhK<V r'   youtube_live_chat_replayzGhttps://www.youtube.com/youtubei/v1/live_chat/get_live_chat_replay?key=z6https://www.youtube.com/live_chat_replay?continuation=z@https://www.youtube.com/youtubei/v1/live_chat/get_live_chat?key=z/https://www.youtube.com/live_chat?continuation=r   )contextr6   playerOffsetMsi  currentPlayerStater7   r   clickTracking)ytcfgvisitor_datazcontent-typezapplication/jsonr,   r.   )NN)	to_screenFD_NAMEro   r   report_warningextractor.youtuber   ydlr9   r]    _prepare_and_start_frag_downloadrq   rr   rs   r   r   r?   extract_ytcfgr\   maxgenerate_api_headersupdater;   r<   r=   _finish_frag_download)r$   r   r#   r   r   r}   rx   ry   r    rB   r   api_keyinnertube_contextr   r   chat_page_urlri   rA   rC   rv   r!   fragment_request_datar"   r&   r|   rd   rf   rG   re   rS   r   s   ` `                   @@@@@@@@@r%   real_downloadzYoutubeLiveChatFD.real_download   s   Z(@4<@@@AAA{// 	tIj4IM`4`4` !s t t t {vu-- !
 
 	A@@@@@%%dh//t+,,
	T 	T 	T 	T 	T 	T 	T 	T	B 	B 	B 	B 	B 	B&	@ 	@ 	@ 	@ 	@ 	@ 	@ 	G 	G 	G 	G 	G 	G 	G 	G<	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+4 	--c9===+i.// 	5**3//	--h8K8KGU^8_8_``DD! 	 	 	55	! f  fg g 	c3'''  <+>+>w	+R+RSS 	5%!A!ABB#E+K+KLL 	/ 	502V2VX[\\Z $>>>[^eeCTWffMMz"&999TW^^CMP__M
V $)!OJ, / L A~~6FCPVY]P]_`LaLaHbHb5c12( n@UWl?mL+O<11L1YY0BCDDD(,
<e(T(T(T([([(](]`e(e%JeJe%:GKE KEG&2G2G KfJe!:K/ K/G&2G u + ). ))#y999s   5*E   
E.-E.c                    t          | g d          }t          |t                    sd S t          |ddg          }t          |t                    sd S t          |g d          }t          |t                    sd S d d g}t          ||t                    }|r)t          |g d          }t          |t                    sd S t	          |                    d          d	          S )
N)addChatItemActionaddLiveChatTickerItemActionaddBannerToLiveChatCommanditembannerRenderer)liveChatTextMessageRendererliveChatPaidMessageRendererliveChatMembershipItemRendererliveChatPaidStickerRenderer%liveChatTickerPaidMessageItemRenderer!liveChatTickerSponsorItemRendererliveChatBannerRendererc                 *    | d         d         d         S )NshowItemEndpointshowLiveChatItemEndpointrendererr2   r3   s    r%   r5   z8YoutubeLiveChatFD.parse_live_timestamp.<locals>.<lambda>   s    a*+,FG
S r'   c                     | d         S )Nr   r2   r3   s    r%   r5   z8YoutubeLiveChatFD.parse_live_timestamp.<locals>.<lambda>   s
    a
m r'   )r   r   r   r   timestampUsecr   )r	   
isinstancer>   r   r
   r   )rE   action_contentr   r   parent_item_gettersparent_items         r%   r[   z&YoutubeLiveChatFD.parse_live_timestamp   s"   !^^^` ` .$// 	41A(BCC$%% 	4D 	#
 	#
 	#
 	 	 (D)) 	4SS##
 h(;TBB 	 . . .  H h-- t8<<88$???r'   N)__name__
__module____qualname____doc__r   staticmethodr[   r2   r'   r%   r   r      sM        ==m: m: m:^ !@ !@ \!@ !@ !@r'   r   )r;   r]   fragmentr   networking.exceptionsr   utilsr   r   r	   r
   r   utils.networkingr   r   r2   r'   r%   <module>r      s                  - - - - - -              . - - - - -T@ T@ T@ T@ T@
 T@ T@ T@ T@ T@r'   