Ë
    š„j¾2  ã                   óÎ   — d dl Z d dlZ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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  G d„ d	e«      Z G d
„ de«      Z G d„ de«      Zy)é    Né   )ÚInfoExtractoré   )Ú
websockets)ÚExtractorErrorÚUserNotLiveÚ
clean_htmlÚfloat_or_noneÚget_element_by_classÚget_element_by_idÚparse_durationÚ	qualitiesÚ
str_to_intÚtry_getÚunified_timestampÚupdate_url_queryÚurl_or_noneÚurlencode_postdataÚurljoin)Útraverse_objc                   óš   — e Zd ZdZdddœZddddd	d
dddddedœ
ddidœddddddddddedœ
dddœdœdd dd!d"d#d$d%dd&ed'œ
ddidœgZd(„ Zd)„ Zy*)+ÚTwitCastingIEz^https?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<uploader_id>[^/?#]+)/(?:movie|twplayer)/(?P<id>\d+)úhttps://twitcasting.tvúhttps://twitcasting.tv/)ÚOriginÚRefererz1https://twitcasting.tv/ivetesangalo/movie/2357609Ú 745243cad58c4681dc752490f7540d7fÚ2357609Úmp4zLive #2357609Úivetesangaloz4Twitter Oficial da cantora brasileira Ivete Sangalo.zre:^https?://.*\.jpg$Ú20110822i8¸QNé    )
ÚidÚextÚtitleÚuploader_idÚdescriptionÚ	thumbnailÚupload_dateÚ	timestampÚdurationÚ
view_countÚskip_downloadT)ÚurlÚmd5Ú	info_dictÚparamsz2https://twitcasting.tv/mttbernardini/movie/3689740Ú3689740zLive playing something #3689740Úmttbernardiniz$md5:1dc7efa2f1ab932fcd119265cebeec69Ú20120211i(Ý6Oi©  Úabc)r-   Úvideopassword)r.   r0   r1   z2https://twitcasting.tv/loft_heaven/movie/685979292Ú	685979292uv   ã€�ç„¡æ–™é…�ä¿¡ã€‘å�—æ³¢ä¸€æµ·ã�®hear/here â€œãƒŠã‚¿ãƒªãƒ¼æœ›æœˆå“²ã�•ã‚“ã�«è�žã��ç·¨é›†ã�¨ã€Œæ¸‹è°·ç³»ç‹‚é¨’æ›²ã€�â€�Úloft_heavenz$md5:3a0c7b53019df987ce545c935538bacfÚ20210604iÂþ¹`i4  )
r#   r$   r%   r&   r'   r)   r*   r(   r+   r,   c                 ó    — 	 | j                  ||«      S # t        $ r Y nw xY wt        j                  |d d d…   «      }| j                  ||«      S )Néÿÿÿÿ)Ú_parse_jsonr   Úbase64Ú	b64decode)ÚselfÚdmpÚvideo_idÚdecodeds       úS/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/twitcasting.pyÚ_parse_data_movie_playlistz(TwitCastingIE._parse_data_movie_playlistY   sY   € ð	Ø×#Ñ# C¨Ó2Ð2øÜò 	Ùð	úô ×"Ñ" 3¡t¨ t¡9Ó-ˆØ×Ñ ¨Ó2Ð2s   ‚ ”	 Ÿ c                 óÎ  ‡ ‡‡— ‰ j                  |«      j                  «       \  }Š‰ j                  |‰«      \  Š}‰ j                  d«      }d }|r;t	        d|i‰ j                  ‰«      ¥d¬«      }‰ j                  |‰|ddid¬«      \  Š}|j                  |k7  r$|r"‰ j                  |j                  ‰|ddid	¬«      Št        j                  d
‰«      rt        dd¬«      ‚t        t        d‰«      «      xs ‰ j                  ddg‰d¬«      }t        ‰ˆ ˆfd„t        «      }t!        |d«      xs ‰ j#                  ‰«      }t        t        d‰«      «      xs ‰ j                  g d¢‰«      }	t        |d„ «      xs t%        t        t'        d‰«      «      «      }
t)        ‰ j+                  d‰dd «      «      }t-        ‰ j+                  d‰dd «      «      }t/        ˆfd„dD «       «      }||	||||
||dœ}ˆ fd„}t        ‰|t        «      xs t!        |d «      }|�r:‰ j1                  d!‰d"|d#d$d%œ¬&«      }|r3d't3        j4                  |j7                  «       «      j9                  «       ind }g }t;        g d(¢«      }t!        |d)d*t<        j>                  hd+„ f«      D ]:  \  }}|jA                  tC        ||«      d,|› �d- ||«      d.‰ jD                  d/œ«       Œ< tF        r`t;        g d0¢«      }t!        |d1d*t<        j>                  hd2„ f«      D ]0  \  }}|jA                  tC        ||«      d3|› �d- ||«      d4d5d6œ«       Œ2 |s‰ jI                  «        |d7d8œ}n…|st        d9«      ‚tK        |«      d:k(  r2‰ jM                  |d;   ‰d-‰ jD                  ¬<«      }|‰ jD                  d=œ}n8d>tO        |«      D ��cg c]  \  }}‰› d?|› �|d-d.‰ jD                  d@œ|¥‘Œ  c}}dAœ}dB‰i|¥|¥S c c}}w )CNr6   Úpasswordzutf-8)Úencodingr   r   zTrying video password)ÚdataÚheadersÚnotezRetrying authenticationz7<form\s+method="POST">\s*<input\s+[^>]+?name="password"zFThis video is protected by a password, use the --video-password optionT)ÚexpectedÚ
movietitlezog:titleztwitter:title)Úfatalc                 óT   •— ‰j                  ‰j                  d| dd ¬«      ‰«      d   S )Nz!data-movie-playlist=\'([^\']+?)\'zmovie playlist©ÚdefaultÚ2)rD   Ú_search_regex)Úxr?   rA   s    €€rC   ú<lambda>z-TwitCastingIE._real_extract.<locals>.<lambda>€   s<   ø€ �d×5Ñ5°d×6HÑ6HØ4ØÐ#¨Tð 7Ió 73à4<ó>à>AñC€ ó    )r   ÚthumbnailUrlÚauthorcomment)r'   zog:descriptionztwitter:descriptionc                 ó,   — t        d„ | D «       «      dz  S )Nc              3   óP   K  — | ]  }t        |j                  d «      «      –— Œ  y­w)r+   N)r
   Úget)Ú.0Úys     rC   ú	<genexpr>z@TwitCastingIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>ˆ   s   è ø€ Ò8eÐ^_¼ÀqÇuÁuÈZÓGX×9YÑ8eùs   ‚$&iè  )Úsum)rS   s    rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>ˆ   s   € ´SÑ8eÐcdÔ8eÓ5eÐhlÑ5l€ rU   ztw-player-duration-time)zTotal\s*:\s*Views\s*([\d,]+)u    ç·�è¦–è�´è€…\s*:\s*([\d,]+)\s*</Úviewsz)data-toggle="true"[^>]+datetime="([^"]+)"Údatetimec              3   ó,   •K  — | ]  }d |› �‰v –— Œ y­w)zdata-N© )r[   rS   Úwebpages     €rC   r]   z.TwitCastingIE._real_extract.<locals>.<genexpr>�   s   øè ø€ Òr°˜˜a˜S�k WÔ,Ñrùs   ƒ)zis-onlive="true"zlive-type="live"zstatus="online")r%   r'   r(   r*   r&   r+   r,   Úis_livec                 ó<   •— ‰j                  d| ddd ¬«      }|r|gS y )Nz-data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1zm3u8 urlr.   )ÚgrouprP   )rR   )rS   Údata_movie_urlr?   s     €rC   Úfind_dmuz-TwitCastingIE._real_extract.<locals>.find_dmu�   s7   ø€ Ø!×/Ñ/Ø@Ø�: U°Dð 0ó :ˆNñ Ø&Ð'Ð'ð rU   ).Úsourcer.   z'https://twitcasting.tv/streamserver.phpzDownloading live infoÚclientÚpc_web)ÚtargetÚmodeÚplayer)ÚqueryÚword)ÚlowÚmediumÚhighztc-hlsÚstreamsc                 ó   — t        |d   «      S ©Nr   ©r   ©Ú_Úvs     rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>¸   s   € ÄÈAÈaÉDÓ@Q€ rU   zhls-r   Úm3u8)r.   Ú	format_idr$   ÚqualityÚprotocolÚhttp_headers)ÚbaseÚmobilesourceÚmainÚllfmp4c                 ó   — t        |d   «      S rv   rw   rx   s     rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>Æ   s   € ÄKÐPQÐRSÑPTÓDU€ rU   zws-iöÿÿÿÚwebsocket_frag)r.   r|   r$   r}   Úsource_preferencer~   )ri   )ÚformatsÚ_format_sort_fieldszFailed to get m3u8 playlistr   r   )rI   )r‡   r   Úmulti_videoú-)r#   r.   r$   r~   r   )Ú_typeÚentriesr#   )(Ú_match_valid_urlÚgroupsÚ_download_webpage_handleÚ	get_paramr   Ú_hidden_inputsr.   Ú_download_webpageÚreÚsearchr   r	   r   Ú_html_search_metar   Úlistr   Ú_og_search_thumbnailr   r   r   rR   r   ÚanyÚ_download_jsonÚhashlibr/   ÚencodeÚ	hexdigestr   ÚdictÚitemsÚappendr   Ú_M3U8_HEADERSr   Úraise_login_requiredÚlenÚ_extract_m3u8_formatsÚ	enumerate)r?   r.   r&   ÚurlhÚvideo_passwordÚrequest_datar%   Úvideo_js_datar(   r'   r+   r,   r*   rd   Ú	base_dictrh   Ú	m3u8_urlsÚstream_dataÚpassword_paramsr‡   Úqqr}   Úm3u8_urlrm   Úws_urlÚinfodictÚnumrA   rc   s   `                          @@rC   Ú_real_extractzTwitCastingIE._real_extractc   sÒ  ú€ Ø $× 5Ñ 5°cÓ :× AÑ AÓ CÑˆ�Xà×5Ñ5°c¸8ÓD‰ˆ�ØŸ™¨Ó8ˆØˆÙÜ-Ø˜Nð/à×%Ñ% gÓ.ð/ð  ô!ˆLð !×9Ñ9Ø�X LØ!Ð#;Ð<Ø,ð :ó .‰MˆG�Tð �8‰8�sŠ?™|Ø×,Ñ,Ø—‘˜(¨Ø!Ð#;Ð<Ø.ð -ó 0ˆGô
 �9‰9ÐOÐQXÔYÜ Ð!iÐtxÔyÐyäÔ-¨l¸GÓDÓEò _Ø×*Ñ*¨J¸Ð+HÈ'ÐY]Ð*Ó^ð 	ô  ØôCäDHó	Jˆô ! Ð0CÓDÒjÈ×HaÑHaÐbiÓHjˆ	Ü Ô!2Ø˜Wó"&ó 'ò OØ*.×*@Ñ*@ÚDÀgó+Oð 	ô ˜MÑ+lÓmò lÜ%¤jÔ1EÐF_ÐahÓ1iÓ&jÓkð 	ä × 2Ñ 2ØRÐT[Ð]dÐfjó!ló mˆ
ä% d×&8Ñ&8Ø8Ø�Z ó''ó (ˆ	ô ÓrÐ6qÔrÓrˆð Ø&Ø"Ø"Ø&Ø Ø$Øñ	
ˆ	ô	(ô ˜W h´Ó5ò LÜ$ ]Ð4JÓKð 	ò Ø×-Ñ-Ø9ØÐ1Ø)Ø$Ø&ñ:ð .ó ˆKñ  ð œŸ™ N×$9Ñ$9Ó$;Ó<×FÑFÓHñà%)ð ð ˆGäÒ4Ó5ˆBÜ%1°+Ø˜)¤d§j¡j \Ñ3Qð@ó &ò 
Ñ!�˜ð —‘Ü+¨H°oÓFØ#'¨ yÐ!1Ø Ù! '›{Ø &Ø$(×$6Ñ$6ñ õ ð
õ ÜÒ?Ó@�Ü$0°Ø˜i¬$¯*©*¨Ñ7Uð?ó %ò ‘L�D˜&ð —N‘NÜ/°¸ÓHØ'*¨4¨& \Ø$Ù#% d£8Ø-0à$4ñ$õ ðñ Ø×)Ñ)Ô+ð #Ø'3ñ‰Hñ Ü Ð!>Ó?Ð?Ü�‹^˜qÒ Ø×0Ñ0Ø˜!‘˜h¨°t×7IÑ7Ið 1ó KˆGð #Ø $× 2Ñ 2ñ‰Hð 'ô *3°9Ó)=÷	?ñ &�s˜Hð &˜J a¨ uÐ-Ø#Ø ð !'Ø$(×$6Ñ$6ñ	ð  ò	ó 	?ñˆHð �(ð
àð
ð ð
ð 	
ùó	?s   Î0#O!N)	Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLr    ÚintÚ_TESTSrD   r²   rb   rU   rC   r   r      sÝ   „ Ør€Jà*Ø,ñ€Mð
 CØ1àØØ$Ø)ØQØ1Ø%Ø#ØØñ
ð ˜Tð
ñð& DàØØ6Ø*ØAØ1Ø%Ø#ØØñ
ð "Ø"ñ
ñð& DàØð NØ(ØAØ%Ø#Ø1ØØñ
ð ˜Tð
ñðI5€Fòn3óS
rU   r   c                   ó*   — e Zd ZdZdddœdddœgZd„ Zy	)
ÚTwitCastingLiveIEzBhttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/?(?:[#?]|$)z#https://twitcasting.tv/ivetesangaloT©r.   Úonly_matchingz#https://twitcasting.tv/c:unusedliver   )r.   Úexpected_exceptionc           	      ó¬  — | j                  |«      }| j                  d|› d|› d�«       t        | j                  d|› �|ddd¬«      d	t        hf«      }|du rt        |¬
«      ‚| j                  d|› d�|d«      }|xs | j                  d|dd¬«      }| j                  d|dd d¬«      }|r|st        |¬
«      ‚| j                  d|› d|› �t        «      S )NzDownloading live video of user z. Pass "https://twitcasting.tv/z/show" to download the historyz.https://frontendapi.twitcasting.tv/watch/user/zChecking live statusrU   F)rH   rM   rd   )rA   r   z/show/zDownloading live historyzL(?s)(<span\s*class="tw-movie-thumbnail2-badge"\s*data-status="live">\s*LIVE)zis live?rO   zM(?s)<a\s+class="tw-movie-thumbnail2"\s+href="/[^/"]+/movie/(?P<video_id>\d+)"zcurrent live IDrA   )rP   rf   z/movie/)
Ú	_match_idÚ	to_screenr   r™   Úboolr   r’   rR   Ú
url_resultr   )r?   r.   r&   rd   rc   Úcurrent_lives         rC   r²   zTwitCastingLiveIE._real_extract  s-  € Ø—n‘n SÓ)ˆØ�‰Ø-¨k¨]ð ;,Ø,7¨=Ð8VðXô	Yô ˜t×2Ñ2Ø<¸[¸MÐJØÐ/°cÀð  3ó  HàJSÔVZÐU[ÐI\ó^ˆð �eÑÜ {Ô3Ð3ð ×(Ñ(Ø% k ]°&Ð9¸;ÐHbódˆàò 0˜T×/Ñ/Ø[Ø�Z¨ð 0ó 0ˆð ×)Ñ)Ø\ØÐ&°¸Jð *ó Hˆñ ™lÜ {Ô3Ð3à�‰Ð!8¸¸ÀWÈ\ÈNÐ[Ô]jÓkÐkrU   N)r³   r´   rµ   r¶   r¸   r²   rb   rU   rC   rº   rº   ù   s,   „ ØV€Jà4Øñð 5Ø+ñð€FólrU   rº   c                   ó8   — e Zd ZdZddddœddœdd	d
œgZd„ Zd„ Zy)ÚTwitCastingUserIEzShttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/(?:show|archive)/?(?:[#?]|$)z/https://twitcasting.tv/natsuiromatsuri/archive/Únatsuiromatsuriznatsuiromatsuri - Live History)r#   r%   éë   )r.   r0   Úplaylist_mincountz'https://twitcasting.tv/noriyukicas/showTr»   c           
   #   ó�  K  — d|› d�x}}t        j                  d«      D ]¢  }| j                  ||ddid|› �¬«      }t        j                  d|«      }|D ].  }| j                  t        ||j                  d	«      «      «      –— Œ0 | j                  d
t        j                  |«      |fz  |dd ¬«      }t        ||«      }|rŒ¢ y  y ­w)Nr   z/showr   ÚfilterÚ	watchablezDownloading page )ro   rJ   zH(?s)<a\s+class="tw-movie-thumbnail2"\s+href="(?P<url>/[^/"]+/movie/\d+)"r.   z<a href="(/%s/show/%d-\d+)[?"]znext urlrO   )
Ú	itertoolsÚcountr’   r“   ÚfinditerrÂ   r   rf   rR   Úescape)r?   r&   Úbase_urlÚnext_urlÚpage_numrc   ÚmatchesÚmobjs           rC   Ú_entrieszTwitCastingUserIE._entries-  sì   è ø€ Ø 7¸°}ÀEÐJÐJˆ�8Ü!Ÿ™¨Ó*ò 	ˆHØ×,Ñ,Ø˜+¨h¸Ð-DÐM^Ð_gÐ^hÐKið -ó kˆGä—k‘kØ[Ð]dófˆGàò L�Ø—o‘o¤g¨h¸¿
¹
À5Ó8IÓ&JÓKÓKðLð ×)Ñ)Ø1´R·Y±Y¸{Ó5KÈXÐ4VÑVØ˜¨Tð *ó 3ˆHô ˜x¨Ó2ˆHÚÙñ	ùs   ‚B?CÃCc                 ón   — | j                  |«      }| j                  | j                  |«      ||› d�«      S )Nz - Live History)r¿   Úplaylist_resultrÕ   )r?   r.   r&   s      rC   r²   zTwitCastingUserIE._real_extract>  s<   € Ø—n‘n SÓ)ˆØ×#Ñ#Ø�M‰M˜+Ó&¨¸°}ÀOÐ5TóVð 	VrU   N)r³   r´   rµ   r¶   r¸   rÕ   r²   rb   rU   rC   rÅ   rÅ     s>   „ Øg€Jà@à#Ø5ñ
ð !ñð 9Øñð
€Fòó"VrU   rÅ   )r=   rš   rÌ   r“   Úcommonr   Údependenciesr   Úutilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Úutils.traversalr   r   rº   rÅ   rb   rU   rC   ú<module>rÜ      sa   ðÛ Û Û Û 	å !Ý %÷÷ ÷ ÷ ñ õ" +ôZ
�Mô Z
ôz#l˜ô #lôL"V˜õ "VrU   