Ë
    š„jí4  ã                   óˆ   — 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mZmZ ddlmZmZ  G d„ de«      Z G d	„ d
e«      Zy)é    Né   )ÚInfoExtractoré   )Údetermine_extÚextract_attributesÚfilter_dictÚget_element_by_classÚget_element_html_by_idÚint_or_noneÚmimetype2extÚparse_durationÚstr_or_noneÚupdate_url_queryÚurl_or_none)Útraverse_objÚvaluec                   ó¾   — e 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œg	Zed#„ «       Zed$„ «       Zd%„ Z	d&„ Z
y')(ÚGoogleDriveIEaþ  (?x)
                        https?://
                            (?:
                                (?:docs|drive|drive\.usercontent)\.google\.com/
                                (?:
                                    (?:uc|open|download)\?.*?id=|
                                    file/d/
                                )|
                                video\.google\.com/get_player\?.*?docid=
                            )
                            (?P<id>[a-zA-Z0-9_-]{28,})
                    zGhttps://drive.google.com/file/d/0ByeS4oOUV-49Zzh4R1J6R09zazQ/edit?pli=1Ú 5c602afbbf2c1db91831f5d82f678554z0ByeS4oOUV-49Zzh4R1J6R09zazQÚmp4zBig Buck Bunny.mp4gF¶óýÔˆF@z5re:https://lh3\.googleusercontent\.com/drive-storage/)ÚidÚextÚtitleÚdurationÚ	thumbnail)ÚurlÚmd5Ú	info_dictz@https://drive.google.com/uc?id=1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1xÚ 322db8d63dd19788c04050a4bba67073Ú!1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1xÚmp3z7My Buddy - Henry Burr - Gus Kahn - Walter Donaldson.mp3gö(\�Âg@)r   r   r   r   zFhttps://drive.google.com/file/d/1RAGWRgzn85TXCaCk4gxnwF6TGUaZatzE/viewÚ 05488c528da6ef737ec8c962bfa9724eÚ!1RAGWRgzn85TXCaCk4gxnwF6TGUaZatzEztest.mp4gsh‘í|ÿ#@zFhttps://drive.google.com/file/d/1Prvv9-mtDDfN_gkJgtt1OFvIULK8c3Ev/viewÚ ccae12d07f18b5988900b2c8b92801fcz!1Prvv9-mtDDfN_gkJgtt1OFvIULK8c3Evz#LEE NA GYUNG-3410-VOICE_MESSAGE.mp4gÕxé&1ˆ!@zAhttps://drive.google.com/file/d/0B-vUyvmDLdWDcEt4WjBqcmI2XzQ/viewT)r   Úonly_matchingzHhttps://drive.google.com/file/d/1ENcQ_jeCuj7y19s66_Ou9dRP4GKGsodiDQ/editz=https://drive.google.com/open?id=0B2fjwgkl1A_CX083Tkowdmt6d28z;https://drive.google.com/uc?id=0B2fjwgkl1A_CX083Tkowdmt6d28zMhttps://drive.usercontent.google.com/download?id=0ByeS4oOUV-49Zzh4R1J6R09zazQc              #   ó‚   K  — t        j                  d|«      }|r#dj                  |j                  d«      «      –— y y ­w)Nz„<iframe[^>]+src="https?://(?:video\.google\.com/get_player\?.*?docid=|(?:docs|drive)\.google\.com/file/d/)(?P<id>[a-zA-Z0-9_-]{28,})z"https://drive.google.com/file/d/{}r   )ÚreÚsearchÚformatÚgroup)Úclsr   ÚwebpageÚmobjs       úS/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/googledrive.pyÚ_extract_embed_urlsz!GoogleDriveIE._extract_embed_urls_   sA   è ø€ ä�y‰yð TØóˆñ Ø6×=Ñ=¸d¿j¹jÈÓ>NÓOÓOð ùs   ‚=?c                 ó:   — t        | t        d|d|||dœ«      «      S )Núen-USÚtrack)ÚhlÚvÚtypeÚlangÚfmtÚkind)r   r   )Úbase_urlÚvideo_idÚlanguager7   r8   s        r.   Ú_construct_subtitle_urlz%GoogleDriveIE._construct_subtitle_urlg   s0   € äØ”kØØØØ ØØñ#ó óð 	ó    c                 ó¸  — i }t        |ddt        hf«      }|s|S | j                  ||ddddd|ddœ¬	«      }t        |d
„ d„ ht        hf«      }t        |d„ «      D ]w  }|j	                  d«      }|j                  |g «      j                  |D �	cg c]9  }	| j                  ||||	|j	                  d«      «      |j	                  d«      |	dœ‘Œ; c}	«       Œy |S c c}	w )NÚtimedTextDetailsÚtimedTextBaseUrlzDownloading subtitles XMLFr1   Úlistr   )r3   r5   Útlangsr4   Úvssids)ÚfatalÚqueryc                 ó    — |j                   dk(  S )Nr)   )Útag©Ú_r4   s     r.   ú<lambda>z.GoogleDriveIE._get_subtitles.<locals>.<lambda>€   s   € ÀQÇUÁUÈhÑEV€ r=   c                 ó$   — | j                  d«      S )NÚfmt_code)Úget)Úxs    r.   rJ   z.GoogleDriveIE._get_subtitles.<locals>.<lambda>€   s   € Ðcd×chÑchÐisÓct€ r=   c                 óF   — |j                   dk(  xr |j                  d«      S )Nr2   Ú	lang_code)rG   rM   rH   s     r.   rJ   z.GoogleDriveIE._get_subtitles.<locals>.<lambda>�   s!   € ¸q¿u¹uÈÑ?OÒ?fÐTU×TYÑTYÐZeÓTf€ r=   rP   r8   Úlang_original)r   Únamer   )r   r   Ú_download_xmlÚstrrM   Ú
setdefaultÚextendr<   )
Úselfr:   Ú
video_infoÚ	subtitlesÚtimed_text_base_urlÚsubtitle_dataÚsubtitle_formatsr2   r;   Úsub_fmts
             r.   Ú_get_subtitleszGoogleDriveIE._get_subtitless   s  € Øˆ	Ü*¨:Ð8JÐL^ÔalÐ`mÐ7nÓoÐÙ"ØÐØ×*Ñ*Ø Ð+FÈeØØØØØñ\ð +ó ˆô (¨Ñ8VÑYtÐXuÔx{Ðw|Ð7}Ó~ÐÜ! -Ñ2fÓhò 	0ˆEØ—y‘y Ó-ˆHØ× Ñ  ¨2Ó.×5Ñ5ð
 .ö7/ð
 ð	 ×3Ñ3Ø'¨°8¸WÀeÇiÁiÐPVÓFWóYàŸ	™	 /Ó2Øó	8ò 7/õ 0ð	0ð Ðùò7/s   Â>C
c                 óv  ‡ ‡
‡‡— ‰ j                  |«      Š‰ j                  d‰› d�‰dddiddi¬«      }g Š
t        |d	d
dd„ f«      D ]   }‰
j                  i t        |ddt        ht
        hfdœ«      ¥t        |ddt        hfdt        hfdt        hfdt        hfdt        hfdt        hft        d«      hft        fdt        hft        d«      hft        fdœf«      ¥dddii¥«       Œ¢ t        |ddt        hf«      Št        d‰d d!d"œ«      }d;ˆ ˆfd#„	} ||d$«      }|rÌˆ
ˆ ˆfd%„}|j                  j                  d&«      r	 ||«       n¡‰ j                  ||‰d'd(d)¬*«      }|rˆt        t!        d+|«      xs d,«      j                  d-«      }	|	r1 ||	d.d/¬0«      }|rQ|j                  j                  d&«      r6 ||«       n-‰ j#                  t%        d1|«      xs t%        d2|«      xs d3«       ‰‰d4œt        |dd5t&        hfd6d7„ ddt        hfdt        hfdt        hfd8œfd9œ«      ¥‰
‰ j)                  ‰|«      d:œ¥S )<Nz@https://content-workspacevideo-pa.googleapis.com/v1/drive/media/z	/playbackzDownloading video webpageÚkeyz'AIzaSyDVQw45DwoYh632gvsP5vPDqEKvb-Ywnb8ÚRefererzhttps://drive.google.com/)rE   ÚheadersÚmediaStreamingDataÚformatStreamingData)ÚadaptiveTranscodesÚprogressiveTranscodesc                 ó   — t        |d   «      S ©Nr   ©r   rH   s     r.   rJ   z-GoogleDriveIE._real_extract.<locals>.<lambda>•   s   € œ[¨¨5©Ó2€ r=   r   Úitag)r   Ú	format_idÚtranscodeMetadataÚmimeTypeÚwidthÚheightÚvideoFpsÚcontentLengthÚvideoCodecStringÚnoneÚaudioCodecString)r   rn   ro   ÚfpsÚfilesizeÚvcodecÚacodecÚdownloader_optionsÚhttp_chunk_sizei    ÚmediaMetadatar   z-https://drive.usercontent.google.com/downloadÚdownloadÚt)r   ÚexportÚconfirmc                 óB   •— ‰j                  | ‰d|› d�d|› d�d|¬«      S )NzRequesting z filezUnable to request F)ÚnoteÚerrnoterD   Údata)Ú_request_webpage)Ú
source_urlr8   rƒ   rW   r:   s      €€r.   Úrequest_source_filez8GoogleDriveIE._real_extract.<locals>.request_source_file²   s=   ø€ Ø×(Ñ(Ø˜H¨[¸¸¸eÐ+DØ,¨T¨F°%Ð8ÀÈDð )ó Rð Rr=   Úsourcec                 óÖ   •— ‰s.‰j                  d| j                  j                  d«      dd ¬«      Š‰j                  | j                  t        ‰d«      j                  «       dddœ«       y )	Nz\bfilename="([^"]+)"úContent-Dispositionr   )Údefaultr   r‡   r   )r   r   rk   Úquality)Ú_search_regexrb   rM   Úappendr   r   Úlower)ÚurlhÚformatsrW   r   s    €€€r.   Úadd_source_formatz6GoogleDriveIE._real_extract.<locals>.add_source_format¸   sj   ø€ áØ ×.Ñ.Ø/°·±×1AÑ1AÐBWÓ1XØ¨ð /ó /�Eð —‘ð  Ÿ8™8Ü(¨°Ó6×<Ñ<Ó>Ø!)Ø ñ
 õ 
r=   r‰   zDownloading confirmation pagezUnable to confirm downloadF)r�   r‚   rD   zdownload-formÚ Úactionzconfirmed sourcer=   )rƒ   zuc-error-subcaptionzuc-error-captionz#unable to extract confirmation code©r   r   r   Ú
thumbnailsc                 ó   — t        |d   «      S rh   ri   rH   s     r.   rJ   z-GoogleDriveIE._real_extract.<locals>.<lambda>á   s   € ¼+ÀaÈÁhÓ:O€ r=   )r   r   rn   ro   )r   r•   )r�   rY   )N)Ú	_match_idÚ_download_jsonr   r�   Úintr   r   r   rT   r   Úanyr   rb   rM   Ú_webpage_read_contentr   r
   Úreport_warningr	   r   Úextract_subtitles)rW   r   rX   r7   r…   r†   r�   r‘   Úconfirmation_webpageÚconfirmed_source_urlr�   r   r:   s   `         @@@r.   Ú_real_extractzGoogleDriveIE._real_extract‹   sò  û€ Ø—>‘> #Ó&ˆØ×(Ñ(ØNÈxÈjÐXaÐbØÐ1¸%ÐAjÐ9kØÐ ;Ð<ð )ó >ˆ
ð
 ˆÜ 
Ø$Ð&;Ð=lÙ2ð-4ó 5ò 	ˆCð �N‰Nð Ü˜sØ Ø"(¬3¨%´+°Ð!?ñ%ó ðô
 ˜sÐ%8Ø&¬¨Ð7Ø%¬ }Ð5Ø'¬+¨Ð7Ø&¬¨Ð6Ø!0´;°-Ð @Ø!3´c°UÐ ;¼eÀF»m¸_ÐMÌsÐSØ!3´c°UÐ ;¼eÀF»m¸_ÐMÌsÐSñ;ð %ó ðð %Ø% xð'ñõ ð	ô, ˜Z¨/¸7ÄSÀEÐ)JÓKˆä%Ø;ØØ$Øñ>óˆ
ö	Rñ # :¨xÓ8ˆÙöð" �|‰|×ÑÐ 5Ô6Ù! $Õ'à'+×'AÑ'AØ˜#˜xÐ.MØ8Àð (Bó (GÐ$ñ (Ü+=Ü.¨Ð@TÓUÒ[ÐY[ó,]ß]`Ñ]`ÐaiÓ]jð )á+Ù2Ð3GÐI[ÐbeÔf˜Ù D§L¡L×$4Ñ$4Ð5JÔ$KÙ-¨dÕ3à×+Ñ+Ü0Ð1FÐH\Ó]ò EÜ3Ð4FÐH\Ó]òEàDôFð Øñ
ô ˜:Ø,¨j¼>Ð:JÐKØ+Ñ-OØ Ø&¬¨Ð7Ø%¬ uÐ-Ø'¬#¨Ð/ñ	Rð ñ(ó ð
ð Ø×/Ñ/°¸*ÓEò
ð 	
r=   N)Ú__name__Ú
__module__Ú__qualname__Ú
_VALID_URLÚ_TESTSÚclassmethodr/   Ústaticmethodr<   r^   r    © r=   r.   r   r      s  „ ð€Jð YØ1à0ØØ)ØØQñ
ñ
ð RØ1à5ØØNØñ	
ñ	
ð XØ1à5ØØØØQñ
ñ	ð XØ1à5ØØ:ØØQñ
ñ	ð SØñ	ð ZØñð
 OØñð MØñð _Øñðs<€Fð| ñPó ðPð ñ	ó ð	òó0_
r=   r   c                   óT   — e Zd ZdZdZddddœddœgZd	Zd
Zde› de› d�Zd„ Z	d„ Z
d„ Zy)ÚGoogleDriveFolderIEzGoogleDrive:FolderzEhttps?://(?:docs|drive)\.google\.com/drive/folders/(?P<id>[\w-]{28,})zHhttps://drive.google.com/drive/folders/1dQ4sx0-__Nvg65rxTSgQrl7VyW_FZ9QIz!1dQ4sx0-__Nvg65rxTSgQrl7VyW_FZ9QIÚForrestr”   é   )r   r   Úplaylist_countz=====vc17a3rwnndj=====aÃ  /drive/v2beta/files?openDrive=true&reason=102&syncType=0&errorRecovery=false&q=trashed%20%3D%20false%20and%20'{folder_id}'%20in%20parents&fields=kind%2CnextPageToken%2Citems(kind%2CmodifiedDate%2CmodifiedByMeDate%2ClastViewedByMeDate%2CfileSize%2Cowners(kind%2CpermissionId%2Cid)%2ClastModifyingUser(kind%2CpermissionId%2Cid)%2ChasThumbnail%2CthumbnailVersion%2Ctitle%2Cid%2CresourceKey%2Cshared%2CsharedWithMeDate%2CuserPermission(role)%2CexplicitlyTrashed%2CmimeType%2CquotaBytesUsed%2Ccopyable%2CfileExtension%2CsharingUser(kind%2CpermissionId%2Cid)%2Cspaces%2Cversion%2CteamDriveId%2ChasAugmentedPermissions%2CcreatedDate%2CtrashingUser(kind%2CpermissionId%2Cid)%2CtrashedDate%2Cparents(id)%2CshortcutDetails(targetId%2CtargetMimeType%2CtargetLookupStatus)%2Ccapabilities(canCopy%2CcanDownload%2CcanEdit%2CcanAddChildren%2CcanDelete%2CcanRemoveChildren%2CcanShare%2CcanTrash%2CcanRename%2CcanReadTeamDrive%2CcanMoveTeamDriveItem)%2Clabels(starred%2Ctrashed%2Crestricted%2Cviewed))%2CincompleteSearch&appDataFilter=NO_APP_DATA&spaces=drive&pageToken={page_token}&maxResults=50&supportsTeamDrives=true&includeItemsFromAllDrives=true&corpora=default&orderBy=folder%2Ctitle_natural%20asc&retryCount=0&key={key} HTTP/1.1z--zM
content-type: application/http
content-transfer-encoding: binary

GET %s

--ú
c                 óª   —  | j                   d|f|j                  «       dddœd| j                  › d�|dœdœ|¤Ž} | j                  d	|d
|fi |¤Žxs i S )Nz.https://clients6.google.com/batch/drive/v2betaztext/plain;charset=UTF-8;zhttps://drive.google.com)zContent-TypeÚOriginzmultipart/mixed; boundary="ú")z$ctr`   )rƒ   rb   rE   r’   zapi response)Ú_download_webpageÚencodeÚ	_BOUNDARYÚ_search_json)rW   Ú	folder_idr`   rƒ   ÚkwargsÚresponses         r.   Ú	_call_apizGoogleDriveFolderIE._call_api  s~   € Ø)�4×)Ñ)Ø<Øð	à ŸK™K›Mà ;Ø4ñð 5°T·^±^Ð4DÀAÐFØññ	ð ñ	ˆð !ˆt× Ñ   X¨~¸yÑSÈFÑSÒYÐWYÐYr=   c              #   óØ   K  — d}|�`| j                   j                  |||¬«      }| j                  ||| j                  |z  «      }|d   E d {  –—†  |j	                  d«      }|�Œ_y y 7 Œ­w)Nr’   )r¶   Ú
page_tokenr`   ÚitemsÚnextPageToken)Ú_REQUESTr)   r¹   Ú_DATArM   )rW   r¶   r`   r»   ÚrequestÚpages         r.   Ú_get_folder_itemsz%GoogleDriveFolderIE._get_folder_items  sp   è ø€ Øˆ
ØÐ$Ø—m‘m×*Ñ*°YÈ:Ð[^Ð*Ó_ˆGØ—>‘> )¨S°$·*±*¸wÑ2FÓGˆDØ˜G‘}×$Ð$ØŸ™ /Ó2ˆJð	 Ó$ð %ús   ‚AA*ÁA(ÁA*Á&A*c                 ó.  — | j                  |«      }| j                  ||«      }| j                  d|d«      }| j                  ||| j                  d|› d�z  d¬«      }| j                  | j                  ||«      ||j                  d«      t        d„ ¬	«      S )
Nz
"(\w{39})"r`   z/drive/v2beta/files/z	 HTTP/1.1F)rD   r   c                 ó   — d| d   › �S )Nz https://drive.google.com/file/d/r   r¨   )Úitems    r.   rJ   z3GoogleDriveFolderIE._real_extract.<locals>.<lambda>"  s   € Ð4TÐUYÐZ^ÑU_ÐT`Ð2a€ r=   )ÚieÚgetter)	r—   r²   rŒ   r¹   r¿   Úplaylist_from_matchesrÂ   rM   r   )rW   r   r¶   r,   r`   Úfolder_infos         r.   r    z!GoogleDriveFolderIE._real_extract  s    € Ø—N‘N 3Ó'ˆ	à×(Ñ(¨¨iÓ8ˆØ× Ñ  °¸Ó?ˆà—n‘n Y°°T·Z±ZÐDXÐYbÐXcÐclÐBmÑ5mÐuz�nÓ{ˆà×)Ñ)Ø×"Ñ" 9¨cÓ2°I¸{¿¹ÈwÓ?WÜÑ%að *ó cð 	cr=   N)r¡   r¢   r£   ÚIE_NAMEr¤   r¥   r´   r¾   r¿   r¹   rÂ   r    r¨   r=   r.   rª   rª   í   sj   „ Ø"€GØY€JàYà5Øñ
ð ñð €Fð )€Ið U€HØ�9�+ð ð €+ð ð€EòZò3ó
cr=   rª   )r'   Úcommonr   Úutilsr   r   r   r	   r
   r   r   r   r   r   r   Úutils.traversalr   r   r   rª   r¨   r=   r.   ú<module>rÎ      sA   ðÛ 	å !÷÷ ÷ ñ ÷ 2ôV
�Mô V
ôr5c˜-õ 5cr=   