o
    i4                     @   s|   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 deZG d	d
 d
eZdS )    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                   @   s   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#d$ Zed%d& Zd'd( Z	d)d* Z
d+S ),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                 c   s,    t d|}|rd|dV  d S d S )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mobj r+   P/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/googledrive.py_extract_embed_urls_   s   z!GoogleDriveIE._extract_embed_urlsc              
   C   s   t | td|d|||dS )Nen-UStrack)hlvtypelangfmtkind)r   r   )base_urlvideo_idlanguager4   r5   r+   r+   r,   _construct_subtitle_urlg   s   z%GoogleDriveIE._construct_subtitle_urlc                    s   i }t |ddthfs|S jdddddddd	}t |d
d dd hthf}t |dd D ]d | g  fdd|D  q4|S )NtimedTextDetailstimedTextBaseUrlzDownloading subtitles XMLFr.   listr   )r0   r2   tlangsr1   vssids)fatalqueryc                 S   s
   |j dkS )Nr&   )tag_r1   r+   r+   r,   <lambda>      
 z.GoogleDriveIE._get_subtitles.<locals>.<lambda>c                 S   s
   |  dS )Nfmt_code)get)xr+   r+   r,   rD      rE   c                 S   s   |j dko	|dS )Nr/   	lang_code)rA   rG   rB   r+   r+   r,   rD      s    rI   c                    s2   g | ]}  |d d|dqS )r5   lang_original)r   namer   )r9   rG   ).0sub_fmtr8   selftimed_text_base_urlr/   r7   r+   r,   
<listcomp>   s    
z0GoogleDriveIE._get_subtitles.<locals>.<listcomp>)r   r   _download_xmlstrrG   
setdefaultextend)rO   r7   
video_info	subtitlessubtitle_datasubtitle_formatsr+   rN   r,   _get_subtitless   s(   

zGoogleDriveIE._get_subtitlesc           
         s    |jd ddddiddid}g  t|d	d
ddd fD ]L} 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 q$t|ddthftd d!d"d#}d>fd$d%	}||d&}|r fd'd(}|jd)r|| n>j||d*d+d,d-}|rttd.|pd/d0}	|	r||	d1d2d3}|r|jd)r|| ntd4|ptd5|pd6 d7t|dd8thfd9d:d ddthfdthfdthfd;fd< |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/)r@   headersmediaStreamingDataformatStreamingData)adaptiveTranscodesprogressiveTranscodesc                 S      t |d S Nr   r   rB   r+   r+   r,   rD          z-GoogleDriveIE._real_extract.<locals>.<lambda>r   itag)r   	format_idtranscodeMetadatamimeTypewidthheightvideoFpscontentLengthvideoCodecStringnoneaudioCodecString)r   rj   rk   fpsfilesizevcodecacodecdownloader_optionshttp_chunk_sizei   mediaMetadatar   z-https://drive.usercontent.google.com/downloaddownloadt)r   exportconfirmc                    s&    j | d| dd| dd|dS )NzRequesting z filezUnable to request F)noteerrnoter?   data)_request_webpage)
source_urlr5   r~   )rO   r7   r+   r,   request_source_file   s   z8GoogleDriveIE._real_extract.<locals>.request_source_filesourcec                    sB   sj d| jddd d | jtd ddd d S )	Nz\bfilename="([^"]+)"Content-Dispositionr   )defaultr   r   r   )r   r   rg   quality)_search_regexr]   rG   appendr   r   lower)urlh)formatsrO   r   r+   r,   add_source_format   s   z6GoogleDriveIE._real_extract.<locals>.add_source_formatr   zDownloading confirmation pagezUnable to confirm downloadF)r|   r}   r?   zdownload-form actionzconfirmed source    )r~   zuc-error-subcaptionzuc-error-captionz#unable to extract confirmation coder   r   r   
thumbnailsc                 S   rb   rc   rd   rB   r+   r+   r,   rD      re   )r   r   rj   rk   )r   r   )r   rW   )N)	_match_id_download_jsonr   r   intr   r   r
   rS   r   anyr   r]   rG   _webpage_read_contentr   r	   report_warningr   r   extract_subtitles)
rO   r   rV   r4   r   r   r   r   confirmation_webpageconfirmed_source_urlr+   )r   rO   r   r7   r,   _real_extract   s   









zGoogleDriveIE._real_extractN)__name__
__module____qualname__
_VALID_URL_TESTSclassmethodr-   staticmethodr9   rZ   r   r+   r+   r+   r,   r      sv    >

r   c                   @   sZ   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d Z	dd Z
dd ZdS )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                 K   sR   | j d|f| dddd| j d|dd|}| jd	|d
|fi |p(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~   r]   r@   r   zapi response)_download_webpageencode	_BOUNDARY_search_json)rO   	folder_idr[   r~   kwargsresponser+   r+   r,   	_call_api  s   	
zGoogleDriveFolderIE._call_apic                 c   s\    d}|d ur,| j j|||d}| ||| j| }|d E d H  |d}|d usd S d S )Nr   )r   
page_tokenr[   itemsnextPageToken)_REQUESTr&   r   _DATArG   )rO   r   r[   r   requestpager+   r+   r,   _get_folder_items  s   
z%GoogleDriveFolderIE._get_folder_itemsc                 C   sj   |  |}| ||}| d|d}| j||| jd| d dd}| j| ||||dtdd	 d
S )Nz
"(\w{39})"r[   z/drive/v2beta/files/z	 HTTP/1.1F)r?   r   c                 S   s   d| d  S )Nz https://drive.google.com/file/d/r   r+   )itemr+   r+   r,   rD   "  s    z3GoogleDriveFolderIE._real_extract.<locals>.<lambda>)iegetter)	r   r   r   r   r   playlist_from_matchesr   rG   r   )rO   r   r   r)   r[   folder_infor+   r+   r,   r     s   
 z!GoogleDriveFolderIE._real_extractN)r   r   r   IE_NAMEr   r   r   r   r   r   r   r   r+   r+   r+   r,   r      s"    	r   )r$   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r   r+   r+   r+   r,   <module>   s    4 Z