
    V|h;                         S SK r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
   " S S\5      r " S	 S
\5      r " S S\5      rg)    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_nonejoin_nonemptyparse_age_limittraverse_objc                   N    \ rS rSrSrSrSSSSSSSS	S
SSSSSS.r0 rS rS r	Sr
g)ViewLiftBaseIE   zhttps://prod-api.viewlift.com/a&  (?:(?:main\.)?snagfilms|snagxtreme|funnyforfree|kiddovid|winnersview|(?:monumental|lax)sportsnetwork|vayafilm|failarmy|ftfnext|lnppass\.legapallacanestro|moviespree|app\.myoutdoortv|neoufitness|pflmma|theidentitytb|chorki)\.com|(?:hoichoi|app\.horseandcountry|kronon|marquee|supercrosslive)\.tvlax	snagfilms	hoichoitvlnpz
marquee-tvzmonumental-network	bingeflixpfltampabay
prothomalo)ftfnextfunnyforfreehoichoikiddovidlaxsportsnetworklegapallacanestromarqueemonumentalsportsnetwork
moviespreepflmma
snagxtremetheidentitytbvayafilmchorkic                 ^   U R                   R                  U5      (       a  g U R                  U5      nU(       aC  UR                  S5      (       a-  U R                  SUS   R                  S5      U R                   U'   U R                   R                  U5      (       d  U R                  SSS9  g g )Ntokenz)22authorizationToken\%22:\%22([^\%]+)\%22zLCookies (not necessarily logged in) are needed to download from this websitecookiesmethod)_TOKENSget_get_cookies_search_regexvalueraise_login_required)selfsiteurlr'   s       S/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/viewlift.py_fetch_tokenViewLiftBaseIE._fetch_token#   s    <<D!!##C(w{{7++!%!3!34`bijqbrbxbx  {B  "CDLL||%%%%&t  ~G%  H &    c                    U R                  X5         U R                  U R                  U-   USU R                  R	                  U5      0US9$ ! [
         a  n[        UR                  [        5      (       a  UR                  R                  S:X  a  UR                  R                  R                  5       R                  5       n [        [        R                  " U5      SS5      nO1! [        R                    a    [        U SU 3UR                  S9ef = fU(       a  SU;   a  U R#                  S	S
9  [        USS9ee S nAff = f)NAuthorization)headersqueryi  errorMessagemessagez said: )causezhas not purchasedr'   r(   T)expected)r4   _download_json	_API_BASEr*   r+   r   
isinstancer=   r   statusresponsereaddecoder   jsonloadsJSONDecodeErrorr/   )	r0   r1   pathvideo_idr2   r:   ewebpageerror_messages	            r3   	_call_apiViewLiftBaseIE._call_api-   s%   $$	&&%x/4<<K[K[\`Ka9bjo ' q q 	!''9--!''..C2G''**//188:S$0G1DnV_$`M++ S(D6	)B!''RRS *m;111C(FF	s0   9A 
EA+D=!C%$D=%.D*D==E N)__name__
__module____qualname____firstlineno__r@   _DOMAINS_REGEX	_SITE_MAPr*   r4   rN   __static_attributes__rP   r6   r3   r   r      sR    0I N#!"#7!!#I  GHr6   r   c            	           \ rS rSrSrS\R                   S3rS\R                   S3/rSSS	S
SSSSS.SS.SSSS
SS.SS.SSS./r	SS	S
SS.SS./r
S rSrg )!ViewLiftEmbedIE@   zviewlift:embedz(https?://(?:(?:www|embed)\.)?(?P<domain>zK)/embed/player\?.*\bfilmId=(?P<id>[\da-f]{8}-(?:[\da-f]{4}-){3}[\da-f]{12})z=<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:embed\.)?(?:z)/embed/player.+?)\1zYhttp://embed.snagfilms.com/embed/player?filmId=74849a00-85a9-11e1-9660-123139220831&w=500 2924e9215c6eff7a55ed35b72276bd93z$74849a00-85a9-11e1-9660-123139220831mp4z#whilewewatchz$md5:b542bef32a6f657dadd0df06e26fb0c8iO20120413)idexttitledescription	timestampupload_dateInvalid URLr2   md5	info_dictskipzQhttp://www.snagfilms.com/embed/player?filmId=17ca0950-a74a-11e0-a92a-0026bb61d036 882fca19b9eb27ef865efeeaed376a48z$17ca0950-a74a-11e0-a92a-0026bb61d036zLife in Limbo)r^   r_   r`   zThe video does not existzQhttp://www.snagfilms.com/embed/player?filmId=0000014c-de2f-d5d6-abcf-ffef58af0017Tr2   only_matchingzOhttp://whilewewatch.blogspot.ru/2012/06/whilewewatch-whilewewatch-gripping.htmlzDead embed URLr2   rg   rh   c                    U R                  U5      R                  5       u  p#UR                  S5      S   nX@R                  ;   a  U R                  U   nU R	                  USX1SU05      S   nUS   nUS   nUS   S	   nUR                  S
5      n	/ 0 pU	(       a  U R                  XSSS
SS9u  pUR                  S5      =(       d    /  H  nUR                  S5      nU(       d  M  [        UR                  S5      5      n[        U R                  SUR                  S5      SS S95      nU
R                  U[        SU5      UUUR                  S5      S.5        M     0 n[        US5      =(       d    /  HP  nUR                  S5      nU(       d  M  UR                  UR                  SS5      / 5      R                  SU05        MR     UUUR                  S5      UR                  S5      [        UR                  S5      5      [        UR                  S5      5      [        UR                  S 5      S!5      U
U R                  UU5      [        US"5      [        US#5      S$.$ )%N.zentitlement/video/statusr^   videogistr`   streamingInfovideoAssetshlsr\   m3u8_nativeF)m3u8_idfatalmpegr2   bitratez^_?(\d+)[pP]$renditionValueheight)defaulthttpcodec)r2   	format_idtbrr{   vcodec)contentDetailsclosedCaptionslanguageEnglishra   videoImageUrlruntimeparentalRatingpublishDatei  )
categories.r`   )tags.r`   )r^   r`   ra   	thumbnailduration	age_limitrb   formats	subtitlesr   r   )_match_valid_urlgroupssplitrV   rN   r+   #_extract_m3u8_formats_and_subtitlesr   r-   appendr	   r   
setdefaultr
   _merge_subtitles)r0   r2   domainfilm_idr1   content_datarq   r`   video_assetshls_urlr   r   video_assetvideo_asset_urlry   r{   subssubsub_urls                      r3   _real_extractViewLiftEmbedIE._real_extracth   sm   //4;;=||C $>>!>>$'D~~,gg=  F#W#O4]C""5)!%!I!I%U "J "TG (++F39r9K)ooe4O"!+//)"<=G !3!3 +//2B"C$ "4 "( )F NN&*67; %//'2  :  .RSYWYYCggenGOOCGGJ	:B?FFwH 	 Z 88M2/2#DHHY$78()9)9:J)KL$TXXm%<dC..tY?&|5QR /EF
 	
r6   rP   N)rQ   rR   rS   rT   IE_NAMEr   rU   
_VALID_URL_EMBED_REGEX_TESTS_WEBPAGE_TESTSr   rW   rP   r6   r3   rY   rY   @   s    G<^=Z=Z<[  \o  pJTUcUrUrTs  tH  I  JLj18$A#%
  c18$

 +
 c-F6 a8$

 ! N9
r6   rY   c                     ^  \ rS rSrSrSrS\R                   S3rSSSS	S
SSSSSSSSS.SS.SSSSS
SSSSSSS.	SS.S S!S"S
S#S$SS%S&S'S(S).
SS*.S+S,S-.S.S,S-.S/S,S-.S0S,S-.S1S,S-.S2S,S-.S3S4S
S5S6SS7S8.S9S*.S:S;S
S<S=SS>S8.S9S*.S?S@S
SASBSSCSDSE.SS*.SFSGS
SHSISS7SJSE.SS*.SKSLS
SMSNSSOSPSE.SS*.SQSRSSST0S9SU.SVSSSSW0S9SU.SXS,S-.SYSZSSS[0S9SU.S\S]S^S
S_S`SaSb/ScSdSeSfSgSh.SS*.SiS,S-./r	\
U 4Sj j5       rSk rSl rSmrU =r$ )n
ViewLiftIE   viewliftz'https://prod-api-cached-2.viewlift.com/zhttps?://(?:www\.)?(?P<domain>zL)(?P<path>(?:/(?:films/title|show|(?:news/)?videos?|watch))?/(?P<id>[^?#]+))z2http://www.snagfilms.com/films/title/lost_for_life 19844f897b35af219773fd63bdec2942z$0000014c-de2f-d5d6-abcf-ffef58af0017lost_for_lifer\   zLost for Lifez$md5:ea10b5a50405ae1f7b5269a6ec594102zre:https?://.+\.jpgi  z
mincount:3r   20150421i6U)r^   
display_idr_   r`   ra   r   r   r   r   rc   rb   rd   re   z9http://www.snagfilms.com/show/the_world_cut_project/india e6292e5b837642bbda82d7f8bf3fbdfdz$00000145-d75c-d96e-a9c7-ff5c67b20000zthe_world_cut_project/indiaIndiaz$md5:5c168c5a8f4719c146aad2e0dfac6f5fi  iXjS20140507)	r^   r   r_   r`   ra   r   r   rb   rc   z4http://main.snagfilms.com/augie_alone/s_2_ep_12_lovez$00000148-7b53-de26-a9fb-fbf306f70020zaugie_alone/s_2_ep_12_lovezS. 2 Ep. 12 - LovezAugie finds love.k   20141012iD:T   )
r^   r   r_   r`   ra   r   r   rc   rb   r   rl   z1http://main.snagfilms.com/films/title/the_freebieTrj   z1http://www.snagfilms.com/films/title/inside_meccaz2http://www.snagfilms.com/show/augie_alone/flirtingz.http://www.winnersview.com/videos/the-good-sonzLhttps://www.monumentalsportsnetwork.com/videos/john-carlson-postgame-2-25-15z8https://www.marquee.tv/watch/sadlerswells-sacredmonstersz/https://www.hoichoi.tv/bn/films/title/shuyopokaz$7a7a9d33-1f4c-4771-9173-ee4fb6dbf196	Shuyopokaz$md5:e28f2fb8680096a69c944d37c1fa5ffc20211006)r^   r_   r`   ra   r   rc   zSubscription requiredz+https://www.hoichoi.tv/films/title/dadu-no1z$0000015b-b009-d126-a1db-b81ff3780000z	Dadu No.1z$md5:605cba408e51a79dafcb824bdeded51e20210827z6https://www.hoichoi.tv/webseries/case-jaundice-s01-e01z$f779e07c-30c8-459c-8612-5a834ab5e5bazHumans Vs. Coronaz$md5:ca30a682b4528d02a3eb6d0427dd0f8720210830zCase Jaundice)r^   r_   r`   ra   r   rc   seriesz@https://www.hoichoi.tv/videos/1549072415320-six-episode-02-hindiz$b41fa1ce-aca6-47b6-b208-283ff0a2de30zWoman in red - Hindiz$md5:9d21edc1827d32f8633eb67c2054fc31zSix (Hindi)zWhttps://www.hoichoi.tv/shows/watch-asian-paints-moner-thikana-online-season-1-episode-1z$1f45d185-8500-455c-b88d-13252307c3ebzJisshu Senguptaz$md5:ef6ffae01a3d83438597367400f824ed20211004zAsian Paints Moner ThikanazJhttps://www.hoichoi.tv/shows/watch-moner-thikana-bengali-web-series-online   r^   z-watch-moner-thikana-bengali-web-series-online)r2   playlist_mincountrg   rh   zEhttps://www.hoichoi.tv/shows/watch-byomkesh-bengali-web-series-onlinez(watch-byomkesh-bengali-web-series-onlinez,https://www.hoichoi.tv/movies/detective-2020z(https://www.chorki.com/bn/series/sinpaat   zbn/series/sinpaatz5https://www.chorki.com/bn/videos/bangla-movie-bikkhovz$564e755b-f5c7-4515-aee6-8959bee18c93Bikkhov20230824i dzAction MovieszSalman Specialzcount:14z~https://snagfilms-a.akamaihd.net/dd078ff5-b16e-45e4-9723-501b56b9df0a/images/2023/08/24/1692860450729_1920x1080_16x9Images.jpgzbn/videos/bangla-movie-bikkhovz$md5:71492b086450625f4374a3eb824f27dciB  )r^   r`   r_   rc   rb   r   r   r   r   ra   r   z@https://www.chorki.com/bn/videos/something-like-an-autobiographyc                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)rY   suitablesuper)clsr2   	__class__s     r3   r   ViewLiftIE.suitableS  s(    '0055uP57;KC;PPr6   c              #      #    U H^  nUR                  S5      =(       d    /  H=  n[        US5      nU(       d  M  U R                  SU U 3U R                  5       S9v   M?     M`     g 7f)Nepisodes)rq   	permalinkzhttps://www.)ie)r+   r   
url_resultie_key)r0   r   seasonsseasonepisoderI   s         r3   _show_entriesViewLiftIE._show_entriesW  s`     F!::j17R7#G-BC4//L*GDKKM/ZZ 8 s
   4A(.A(c                    U R                  U5      R                  5       u  p#nUR                  S5      S   nXPR                  ;   a  U R                  U   nU R	                  USXASSUUS.5      S   n[        S U 5       S 5      nU(       a!  U R                  U R                  X'5      U5      $ [        S	 U 5       5      nS
SU SU 3UUSS.$ )Nrn   ro   zcontent/pagestruer   )includeContentmoduleOffsetrI   r1   modulesc              3   d   #    U  H&  oR                  S 5      S:X  d  M  US   S   S   v   M(     g7f)
moduleTypeShowDetailModulecontentDatar   r   Nr+   .0ms     r3   	<genexpr>+ViewLiftIE._real_extract.<locals>.<genexpr>k  s2     u155Q]K^btKt6-(+I6s   00c              3   j   #    U  H)  oR                  S 5      S:X  d  M  US   S   S   S   v   M+     g7f)r   VideoDetailModuler   r   rq   r^   Nr   r   s     r3   r   r   o  s7     x'QUUS_M`dwMw8q'*6248's   33url_transparentzhttp://z/embed/player?filmId=ViewLiftEmbed)_typer2   r^   r   r   )r   r   r   rV   rN   nextplaylist_resultr   )	r0   r2   r   rI   r   r1   r   r   r   s	            r3   r   ViewLiftIE._real_extract^  s    #'#8#8#=#D#D#F j||C $>>!>>$'D../:"( !	5  uuw{|''(:(:6(KZXXx'xx&VH$9'C$%
 	
r6   rP   )rQ   rR   rS   rT   r   r@   r   rU   r   r   classmethodr   r   r   rW   __classcell__)r   s   @r3   r   r      s   G9I2>3P3P2Q  R^  _JC18)$A/&%#
 !$ K187A/#%

   F86)./%#
   C
 C D
 @
 ^
 J A8 A/%
 ( =8 A/%
 ( H8(A/%%
  R8+A/%#
  i8&A/%2
  \A
 ( W<
 ( > :%
 ( G8%#*,<= Z:A
 " RMiFV Q Q[
 
r6   r   )rF   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   rY   r   rP   r6   r3   <module>r      sB     ! - /] /da
n a
HR
 R
r6   