Ë
    š„jšK  ã                   óŒ   — 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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y)é    Né   )ÚInfoExtractoré   )ÚExtractorErrorÚdetermine_extÚfilter_dictÚint_or_noneÚparse_iso8601Ú
update_urlÚurl_or_none)Útraverse_objc                   óÆ  — e Zd ZdZdZde› d�g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.id/gd0œd1d2d3dd4d5d6d7d8dœd9d:id/gd;œd<d=d>dd?d@dAdBdCdœdDdEid/gd;œgZdFdGdHddIdJdKdLdMdNœdOdPœgZdQdRg dS¢iiZ e	j                  dT«       e	j                  dU«       e	j                  dV«       e	j                  dW«      dXœZdYZd`d[„Zd\„ Zd]„ Zd^„ Zd_„ ZyZ)aÚLoomIEÚloomz@https?://(?:www\.)?loom\.com/(?:share|embed)/(?P<id>[\da-f]{32})z<iframe[^>]+\bsrc=["\'](?P<url>ú)z;https://www.loom.com/share/43d05f362f734614a2e81b4694a3a523Ú bfc2d7e9c2e0eb4813212230794b6f42Ú 43d05f362f734614a2e81b4694a3a523Úmp4z#A Ruler for Windows - 28 March 2022zwILLIAM PIPÚ20220328i^jAbé   )ÚidÚextÚtitleÚuploaderÚupload_dateÚ	timestampÚduration)ÚurlÚmd5Ú	info_dictz;https://www.loom.com/share/c43a642f815f4378b6f80a889bb73d8dÚ 70f529317be8cf880fcc2c649a531900Ú c43a642f815f4378b6f80a889bb73d8dÚwebmzLilah Nielsen Intro VideozLilah NielsenÚ20200826iLáF_é   z;https://www.loom.com/share/9458bcbf79784162aa62ffb8dd66201bÚ 7b6bfdef8181c4ffc376e18919a4dcc2Ú 9458bcbf79784162aa62ffb8dd66201bzSharing screen with gpt-4zUSharing screen with GPT 4 vision model and asking questions to guide through blender.zSuneel Mathamzcount:3Ú20231109išLeé]   )	r   r   r   Údescriptionr   Úchaptersr   r   r   z;https://www.loom.com/share/24351eb8b317420289b158e4b7e96ff2Ú 24351eb8b317420289b158e4b7e96ff2z
OMFG clownz$md5:285c5ee9d62aa087b7e3271b08796815zBrailey BraggÚ20210924iÂENaéÒ   )r   r   r   r*   r   r   r   r   Úskip_downloadÚdashzFailed to parse JSON)r   r    ÚparamsÚexpected_warningsz;https://www.loom.com/share/50e26e8aeb7940189dff5630f95ce1f4Ú 5cc7655e7d55d281d203f8ffd14771f7Ú 50e26e8aeb7940189dff5630f95ce1f4ziOS Mobile UploadzSimon CurranÚ20200520iûyÅ^é#   ÚvideopasswordÚseniorinfants2)r   r   r    r1   r2   z;https://www.loom.com/embed/ddcf1c1ad21f451ea7468b1e33917e4eÚ f983a0f02f24331738b2f43aecb05256Ú ddcf1c1ad21f451ea7468b1e33917e4ezCF Reset User's PasswordzAimee HeintzÚ20220707iËÇbéµ   ÚformatÚ	bestvideozBhttps://www.loom.com/community/e1229802a8694a09909e8ba0fbb6d073-pgÚ ec838cd01b576cf0386f32e1ae424609Ú e1229802a8694a09909e8ba0fbb6d073z.Rexie Jane Cimafranca - Founder's PresentationzRexie CimafrancaÚ20230213é÷   inééc)r   r   r   r   r   r   r   z404 Not Found)r   r   r    ÚskipÚGetVideoSourceÚacceptableMimes)ÚDASHÚM3U8ÚMP4ÚWEBMaº              query GetVideoSSR($videoId: ID!, $password: String) {
              getVideo(id: $videoId, password: $password) {
                __typename
                ... on PrivateVideo {
                  id
                  status
                  message
                  __typename
                }
                ... on VideoPasswordMissingOrIncorrect {
                  id
                  message
                  __typename
                }
                ... on RegularUserVideo {
                  id
                  __typename
                  createdAt
                  description
                  download_enabled
                  folder_id
                  is_protected
                  needs_password
                  owner {
                    display_name
                    __typename
                  }
                  privacy
                  s3_id
                  name
                  video_properties {
                    avgBitRate
                    client
                    camera_enabled
                    client_version
                    duration
                    durationMs
                    format
                    height
                    microphone_enabled
                    os
                    os_version
                    recordingClient
                    recording_type
                    recording_version
                    screen_type
                    tab_audio
                    trim_duration
                    width
                    __typename
                  }
                  playable_duration
                  source_duration
                  visibility
                }
              }
            }
aº              query GetVideoSource($videoId: ID!, $password: String, $acceptableMimes: [CloudfrontVideoAcceptableMime]) {
              getVideo(id: $videoId, password: $password) {
                ... on RegularUserVideo {
                  id
                  nullableRawCdnUrl(acceptableMimes: $acceptableMimes, password: $password) {
                    url
                    credentials {
                      Policy
                      Signature
                      KeyPairId
                      __typename
                    }
                    __typename
                  }
                  __typename
                }
                __typename
              }
            }
a              query FetchVideoTranscript($videoId: ID!, $password: String) {
              fetchVideoTranscript(videoId: $videoId, password: $password) {
                ... on VideoTranscriptDetails {
                  id
                  video_id
                  source_url
                  captions_source_url
                  __typename
                }
                ... on GenericError {
                  message
                  __typename
                }
                __typename
              }
            }
aª              query FetchChapters($videoId: ID!, $password: String) {
              fetchVideoChapters(videoId: $videoId, password: $password) {
                ... on VideoChapters {
                  video_id
                  content
                  __typename
                }
                ... on EmptyChaptersPayload {
                  content
                  __typename
                }
                ... on InvalidRequestWarning {
                  message
                  __typename
                }
                ... on Error {
                  message
                  __typename
                }
                __typename
              }
            }
)ÚGetVideoSSRrD   ÚFetchVideoTranscriptÚFetchChaptersÚ45a5bd4Nc                 óH  — | j                  d«      }| j                  d||xs d|xs dddd| j                  › �d| j                  |dd	œt        j                  |||d
œ| j
                  j                  |i «      ¥| j                  |   dœd¬«      j                  «       |¬«      S )Nr7   zhttps://www.loom.com/graphqlzDownloading GraphQL JSONzFailed to download GraphQL JSONúapplication/jsonÚ	loom_web_Úwebzhttps://www.loom.com)ÚAcceptúContent-Typezx-loom-request-sourcezapollographql-client-namezapollographql-client-versionzgraphql-operation-nameÚOrigin)ÚvideoIdÚpassword)ÚoperationNameÚ	variablesÚquery©ú,ú:©Ú
separators)ÚheadersÚdataÚfatal)	Ú	get_paramÚ_download_jsonÚ_APOLLO_GRAPHQL_VERSIONÚjsonÚdumpsÚ_GRAPHQL_VARIABLESÚgetÚ_GRAPHQL_QUERIESÚencode)ÚselfÚoperation_nameÚvideo_idÚnoteÚerrnotera   rV   s          úL/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/loom.pyÚ_call_graphql_apizLoomIE._call_graphql_apiü   sË   € Ø—>‘> /Ó2ˆØ×"Ñ"Ø*¨H°dÒ6XÐ>XØÒ8Ð8Ø,Ø 2Ø+4°T×5QÑ5QÐ4RÐ)SØ-2Ø04×0LÑ0LØ*8Ø0ñCô —J‘JØ!/à'Ø (ñð ×-Ñ-×1Ñ1°.À"ÓEðð
 ×.Ñ.¨~Ñ>ñ ð %ô&÷ '-¡f£h°eð% #ó =ð 	=ó    c                 ó  — | j                  d|› d|› �|d|› d�d|› d�ddddœt        j                  t        t	        j
                  «       «      d d| j                  d	«      d
œd¬«      j                  «       ¬«      }t        |dt        hf«      S )Nz,https://www.loom.com/api/campaigns/sessions/ú/zDownloading z JSONzFailed to download FrO   )rR   rS   r7   )ÚanonIDÚdeviceIDÚforce_originalrV   rZ   r]   )ra   r_   r`   r   )
rc   re   rf   ÚstrÚuuidÚuuid4rb   rj   r   r   )rk   Úendpointrm   Úresponses       rp   Ú_call_url_apizLoomIE._call_url_api  s£   € Ø×&Ñ&Ø:¸8¸*ÀAÀhÀZÐPÐRZØ˜8˜* EÐ*Ð.AÀ(ÀÈ5Ð,QÐY^Ø1ÐCUÑVÜ—‘ÜœdŸj™j›lÓ+Ø Ø"'Ø ŸN™N¨?Ó;ñ	ð
 %ô&÷
 '-¡f£hð 'ó 	0ˆô ˜H u¬{¨mÐ&<Ó=Ð=rr   c                 óà  ‡ ‡‡— g }t        |ddt        hfdt        hfdd„ hfdœf«      Šˆ ˆˆfd„}‰ j                  d‰«      }|j                   ||d	d
¬«      «       ‰ j                  d‰«      }|j                   ||dd¬«      «       t        |ddddt        hf«      }||fD �	cg c]  }	|	sŒt        |	d ¬«      ‘Œ }
}	|r)t        |d ¬«      |
vr|j                   ||dd¬«      «       |S c c}	w )NÚvideo_propertiesÚwidthÚheightÚmicrophone_enabledc                 ó   — | du rdS d S )NFÚnone© )Úxs    rp   ú<lambda>z)LoomIE._extract_formats.<locals>.<lambda>$  s   € À!ÀuÁ*¸€ ÐRV€ rr   )r€   r�   Úacodecc              3   óî  •K  — | sy t        | «      }t        j                  j                  | «      j                  }|dk(  rv| j                  dd«      } ‰	j                  | ‰
dd|› �d|¬«      }dt        |d	«      v }|D ]6  }|r|j                  d
«      dk7  rd|d<   i |¥t        |d   |¬«      |dœ¥–— Œ8 y |dk(  r+‰	j                  | ‰
d|› �d¬«      }|D ]  }i |¥||dœ¥–— Œ y | |d|› �|dœ‰¥–— y ­w)NÚm3u8z-split.m3u8z.m3u8r   zhls-F)Úm3u8_idra   Úqualityr„   ).Úvcodecr�   rˆ   r   ©rY   )r   Úextra_param_to_segment_urlÚmpdzdash-)Úmpd_idra   )r�   rŒ   zhttp-)r   r   Ú	format_idrŒ   )r   ÚurllibÚparseÚurlparserY   ÚreplaceÚ_extract_m3u8_formatsr   rh   r   Ú_extract_mpd_formats)Ú
format_urlr’   rŒ   r   rY   Úm3u8_formatsÚis_not_premergedÚfmtÚdash_formatsrk   rm   r   s            €€€rp   Úget_formatsz,LoomIE._extract_formats.<locals>.get_formats'  sa  øè ø€ ÙØÜ 
Ó+ˆCÜ—L‘L×)Ñ)¨*Ó5×;Ñ;ˆEà�fŠ}à'×/Ñ/°¸wÓG�
Ø#×9Ñ9Ø ¨%¸4À	¸{Ð9KÐSXÐbið  :ó  k�ð $*¬\¸,ÈÓ-XÐ#XÐ Ø'ò �CÙ'¨C¯G©G°HÓ,=ÀÒ,GØ(.˜˜H™ðØðä)¨#¨e©*¸EÔBØ6;òó ñð ˜’Ø#×8Ñ8Ø °5¸¸Ð1DÈEð  9ó  S�à'ò �CðØðà6;Ø#*òó ñð &ØØ#(¨¨Ð!4Ø&ñ	ð
 'ðó ùs   ƒC2C5zraw-urlÚrawr   )rŒ   ztranscoded-urlÚ
transcodedéÿÿÿÿr`   ÚgetVideoÚnullableRawCdnUrlr   rŽ   Úcdnr   )r   r	   r}   Úextendr   r   )rk   rm   ÚmetadataÚ
video_dataÚformatsrž   Úraw_urlÚtranscoded_urlÚcdn_urlr   Ú
valid_urlsr   s   ``         @rp   Ú_extract_formatszLoomIE._extract_formats  s
  ú€ ØˆÜ'¨Ð3EØ¤˜}Ð-Ø¤+ Ð/Ø+Ñ.VÐ-WÐXñH
ð 3ó Ðö'	ðR ×$Ñ$ Y°Ó9ˆØ�‰‘{ 7¨E¸1Ô=Ô>à×+Ñ+Ð,<¸hÓGˆØ�‰‘{ >°<ÈÔLÔMä˜z¨F°JÐ@SÐUZÔ]hÐ\iÐ+jÓkˆà>EÀ~Ð=VÖ^°cÒZ]”j ¨DÖ1Ð^ˆ
Ð^Ù”z '°Ô6¸jÑHØ�N‰N™; w°¸qÔAÔBàˆùò	 _s   Â%C+Â-C+c                 óx   — | j                  d|dd¬«      }t        dt        |dddd	t        hif«      xs d i«      S )
NrK   z"Downloading GraphQL subtitles JSONF©ra   Úenr`   ÚfetchVideoTranscript)Ú
source_urlÚcaptions_source_urlr   )rq   r   r   r   )rk   rm   Ú	subs_datas      rp   Ú_get_subtitleszLoomIE._get_subtitles^  se   € Ø×*Ñ*Ø" HÐ.RÐZ_ð +ó aˆ	äØ”,˜yØÐ.Ø5ØœK˜=ð8ð+ó ò ð ð
ó ð 	rr   c                 ój  — | j                  |«      }t        | j                  d|dd¬«      ddt        hf«      xs i }|j	                  d«      dk(  r+| j                  d	«      st        d
d¬«      ‚t        dd¬«      ‚| j                  d|d«      }| j                  d|dd¬«      }t        |ddt        hf«      }||| j                  t        |dddt        hf«      |«      xs d | j                  |||«      | j                  |«      dœt        |dt        hfdt        hfddt        hfdt        hfdœ«      ¥S )NrJ   z!Downloading GraphQL metadata JSONFr¯   r`   r¢   Ú
__typenameÚVideoPasswordMissingOrIncorrectr7   zAThis video is password-protected, use the --video-password optionT)ÚexpectedzInvalid video passwordrD   zDownloading GraphQL video JSONrL   z!Downloading GraphQL chapters JSONr   r   ÚfetchVideoChaptersÚcontent)r   r   r+   r¨   Ú	subtitlesÚnamer*   ÚownerÚdisplay_nameÚ	createdAt)r   r*   r   r   )Ú	_match_idr   rq   Údictrh   rb   r   r	   Ú"_extract_chapters_from_descriptionrx   r­   Úextract_subtitlesr
   )rk   r   rm   r¦   r§   Úchapter_datar   s          rp   Ú_real_extractzLoomIE._real_extracti  s�  € Ø—>‘> #Ó&ˆÜØ×"Ñ" =°(Ð<_ÐglÐ"ÓmØ�Z¤$ Ð(ó*ò 0à-/ð 	ð �<‰<˜Ó%Ð)JÒJØ—>‘> /Ô2Ü$ØWÐbfôhð hä Ð!9ÀDÔIÐIà×+Ñ+Ø˜hÐ(HóJˆ
à×-Ñ-Ø˜XÐ'JÐRWð .ó Yˆä Ð+=¸zÌKÈ=Ð*YÓZˆð Ø Ø×?Ñ?Ü˜\¨FÐ4HÈ)ÔVYÐUZÐ+[Ó\Ð^fóhò pØkoØ×,Ñ,¨X°xÀÓLØ×/Ñ/°Ó9ñ
ô ˜8Ø ¤3 %˜Ø -´¨uÐ5Ø$ n´s°eÐ<Ø)¬M¨?Ð;ñ	&ó ð
ð 	
rr   )NNT)Ú__name__Ú
__module__Ú__qualname__ÚIE_NAMEÚ
_VALID_URLÚ_EMBED_REGEXÚ_TESTSÚ_WEBPAGE_TESTSrg   ÚtextwrapÚdedentri   rd   rq   r}   r­   rµ   rÆ   r…   rr   rp   r   r      s  „ Ø€GØT€JØ6°z°lÀ!ÐDÐE€Lð MØ1à4ØØ:Ø%Ø%Ø#Øñ
ñ	ð MØ1à4ØØ0Ø'Ø%Ø#Øñ
ñ	ð MØ1à4ØØ0ØrØ'Ø!Ø%Ø#Øñ

ñ	ð" Mà4ØØ!ØAØ'Ø%Ø#Øñ	
ð # FÐ+Ø4Ð5ñð" MØ1à4ØØ(Ø&Ø%Ø#Øñ
ð #Ð$4Ð5Ø4Ð5ñð" MØ1à4ØØ0Ø&Ø%Ø#Øñ
ð ˜[Ð)Ø4Ð5ñðOV€Fðp TØ1à4ØØFØ*Ø%ØØ#ñ
ð  ñð €Nð  	ØÒ>ð
ðÐð '�x—‘ð 9(ó 9ðt *˜(Ÿ/™/ð +ó ð( !0 §¡ð 1ó !ð" )˜Ÿ™ð *ó ñAwÐðp (Ðó=ò,>ò=ò~	ó
rr   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$œgZd%„ Zd)d'„Zd(„ Z	y&)*ÚLoomFolderIEFzloom:folderz=https?://(?:www\.)?loom\.com/share/folder/(?P<id>[\da-f]{32})zBhttps://www.loom.com/share/folder/997db4db046f43e5912f10dc5f817b5cé   Ú 997db4db046f43e5912f10dc5f817b5czBlending Lessons)r   r   )r   Úplaylist_mincountr    zBhttps://www.loom.com/share/folder/9a8a87f6b6f546d9a400c8e7575ff7f2é   Ú 9a8a87f6b6f546d9a400c8e7575ff7f2zList A- a, i, ozBhttps://www.loom.com/share/folder/886e534218c24fd292e97e9563078cc4é   Ú 886e534218c24fd292e97e9563078cc4zMedicare Agent Training videoszBhttps://www.loom.com/share/folder/b72c4ecdf04745da9403926d80a40c38Ú b72c4ecdf04745da9403926d80a40c38zQuick Altos Q & A TutorialszBhttps://www.loom.com/share/folder/8b458a94e0e4449b8df9ea7a68fafc4eé   Ú 8b458a94e0e4449b8df9ea7a68fafc4ezSezer Texting Guide)r   Úplaylist_countr    zBhttps://www.loom.com/share/folder/e056a91d290d47ca9b00c9d1df56c463é=   Ú e056a91d290d47ca9b00c9d1df56c463zUser VideoszBhttps://www.loom.com/share/folder/c2dde8cc67454f0e99031677279d8954éK   Ú c2dde8cc67454f0e99031677279d8954zHonors 1zKhttps://www.loom.com/share/folder/bae17109a68146c7803454f2893c8cf8/EdpuzzleT)r   Úonly_matchingc                 ó6   — | j                  d|› �|dddi¬«      S )Nz https://www.loom.com/v1/folders/zDownloading folder info JSONÚlimitÚ10000rŽ   )rc   )rk   Ú	folder_ids     rp   Ú_extract_folder_dataz!LoomFolderIE._extract_folder_dataÌ  s2   € Ø×"Ñ"Ø.¨y¨kÐ:¸IØ*°7¸GÐ2Dð #ó Fð 	Frr   Nc           	   #   ó2  ‡K  — |xs | j                  ‰«      }t        |dd„ f«      D ]3  }|d   }| j                  d|› �t        ||j	                  d«      «      –— Œ5 t        |dˆfd„dt
        hf«      D ]  }| j                  |«      E d {  –—†  Œ y 7 Œ­w)NÚvideosc                 ó   — |d   S ©Nr   r…   )Ú_Úvs     rp   r‡   z6LoomFolderIE._extract_folder_entries.<locals>.<lambda>Ô  s
   € ÀqÈÁw€ rr   r   zhttps://www.loom.com/share/r½   Úfoldersc                 ó   •— |d   ‰k7  S rë   r…   )rì   rí   ræ   s     €rp   r‡   z6LoomFolderIE._extract_folder_entries.<locals>.<lambda>Û  s   ø€ ¨¨$©°9Ñ(<€ rr   )rç   r   Ú
url_resultr   rh   rx   Ú_extract_folder_entries)rk   ræ   Úinitial_folder_dataÚfolder_dataÚvideorm   Úsubfolder_ids    `     rp   rñ   z$LoomFolderIE._extract_folder_entriesÑ  s´   øè ø€ Ø)ÒQ¨T×-FÑ-FÀyÓ-Qˆä! +°Ñ:NÐ/OÓPò 	_ˆEØ˜T‘{ˆHØ—/‘/Ø-¨h¨ZÐ8¼&À(ÈEÏIÉIÐV\ÓL]ó_ó _ð	_ô )¨ØÓ<¸dÄSÀEð7Kó Lò 	BˆLà×3Ñ3°LÓA×AÑAñ	BàAús   ƒB
BÂBÂBc           
      óÄ   — | j                  |«      }| j                  |«      }| j                  | j                  ||«      |t	        |ddt
        j                  hf«      «      S )NÚfolderr½   )rÁ   rç   Úplaylist_resultrñ   r   rx   Ústrip)rk   r   Úplaylist_idÚplaylist_datas       rp   rÆ   zLoomFolderIE._real_extractÞ  s^   € Ø—n‘n SÓ)ˆØ×1Ñ1°+Ó>ˆà×#Ñ#Ø×(Ñ(¨°mÓDÀkÜ˜¨°6¼C¿I¹I¸;Ð(GÓHóJð 	Jrr   )N)
rÇ   rÈ   rÉ   Ú_WORKINGrÊ   rË   rÍ   rç   rñ   rÆ   r…   rr   rp   rÒ   rÒ   ‹  sé   „ Ø€HØ€GØQ€Jð TØà4Ø'ñ
ñ	ð TØà4Ø&ñ
ñ	ð TØà4Ø5ñ
ñ	ð TØà4Ø2ñ
ñ	ð TØà4Ø*ñ
ñ	ð TØà4Ø"ñ
ñ	ð TØà4Øñ
ñ	ð ]Øñðq;€FòzFó
BóJrr   rÒ   )re   rÏ   Úurllib.parser“   ry   Úcommonr   Úutilsr   r   r   r	   r
   r   r   Úutils.traversalr   r   rÒ   r…   rr   rp   ú<module>r     sG   ðÛ Û Û Û å !÷÷ ñ õ +ôu
ˆ]ô u
ôpYJ�=õ YJrr   