
    uki4                         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.mp4gx&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       W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/googledrive.py_extract_embed_urlsz!GoogleDriveIE._extract_embed_urls_   sA     yy T 6==djj>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    QUUhEV r=   c                 $    | j                  d      S )Nfmt_code)get)xs    r.   rJ   z.GoogleDriveIE._get_subtitles.<locals>.<lambda>   s    cdchchisct 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!    quu?O?fTUTYTYZeTf 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   	*:8JL^al`m7no"**+Fe\ +  (8VYtXux{w|7}~!-2fh 	0Eyy-H  2.55
 .7/
 	 33'8WeiiPVFW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)*      }|rt        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,TF%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     ../1A1ABW1X / /E   88(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   >>#&((NxjXab1%Aj9k ;< ) >

 
$&;=l2-4 5 	C NN s "(3%+!?% 
 s%8&7%}5'+7&6!0;- @!3cU ;eFm_MsS!3cU ;eFm_MsS; %  %%x' 	, Z/7SE)JK%;$>
	R #:x8" || 56!$''+'A'A#x.M8 (B (G$ (+=.@TU[Y[,]]`]`ai]j )+23GI[befDLL$4$45J$K-d3++01FH\] E34FH\]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))<	 KKM ;4 5T^^4DAF	 	 !t  X~ySFSYWY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     
$mm**Y:[^*_G>>)S$**w2FGDG}$$/2J	 $ %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    4TUYZ^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    NN3'	((i8  ?nnYTZZDXYbXcclBm5muzn{))""9c2I{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YJ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=   