
    VGh;                         d dl Z d dlZddlm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  G d de      Z G d	 d
e      Zy)    N   )InfoExtractor)	YoutubeIE   )
ExtractorErrorbug_reports_messagedetermine_extextract_attributesget_element_by_classget_element_html_by_idint_or_nonelowercase_escapetry_getupdate_url_queryc            	       T   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gZi ej                  j                         D  ci c]  \  }}|j                  d      s||d    c}}} ddiZ	dZ
dddZg Zd Zed!        Zd" Z	 d'd#Zd$ Zd% Zd& Zy c c}}} w )(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.mp4-   zBhttps://drive.google.com/thumbnail?id=0ByeS4oOUV-49Zzh4R1J6R09zazQ)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.mp3   zGhttps://drive.google.com/thumbnail?id=1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1xzAhttps://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-49Zzh4R1J6R09zazQr   50m4az"https://drive.google.com/timedtexttracktarget)	subtitlesautomatic_captionsNc              #      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       e/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/googledrive.py_extract_embed_urlsz!GoogleDriveIE._extract_embed_urlsU   sA     yy T 6==djj>NOO s   =?c                    | j                   ry | j                  | j                  |||||dddddddd      | _         | j                   r| j                   j                  d      D ]b  }|j                  j                  d	      s|j                  j                  d
      r;| j                  j                  |j                  d	          d y y )Nlist1)r   vidhlvtypetlangsfmtsvssidszDownloading subtitles XMLz Unable to download subtitles XMLF)querynoteerrnotefatalr,   fmt_codedefault)_captions_xml_download_xml_BASE_URL_CAPTIONSfindallattribget_caption_formats_extappend)selfvideo_idsubtitles_idr7   fs        r1   _download_subtitles_xmlz%GoogleDriveIE._download_subtitles_xml]   s    !//##X#	6 06e 0 E ''//9 K88<<
+AHHLL4K--44QXXj5IJK     c           
      p   |r|sy i }| j                   j                  | j                  |         D ]  }|j                  j	                  d      }|s!g }| j
                  D ]M  }	|||	||n|dddd}
||
j                  d|i       |j                  t        | j                  |
      |	d       O |||<    |S )N	lang_coder%    )r6   r8   fmtlangr9   namekindtlang)r   r   )
rC   rF   _CAPTIONS_ENTRY_TAGrG   rH   rI   updaterJ   r   rE   )rK   rL   rM   caption_typeorigin_lang_codecaptionscaption_entrycaption_lang_codecaption_format_datacaption_formatr=   s              r1   _get_captions_by_typez#GoogleDriveIE._get_captions_by_typeq   s    <!//77((68 	>M - 4 4 8 8 E$"$"&";"; '!)2B2J."2#	 $/LL'+<!=>#**+D,C,CUK), " +>H&'/	>0 rP   c                 r    |r|sy | j                  |||       | j                  sy | j                  ||d      S )Nr'   )rO   rC   rb   )rK   rL   rM   r7   s       r1   _get_subtitleszGoogleDriveIE._get_subtitles   s=    2$$X|R@!!))(L+NNrP   c                     |r|sy | j                  |||       | j                  sy | j                  j                  d      }|y |j                  j	                  d      }|sy | j                  ||d|      S )Nr%   rR   r(   )rO   rC   findrG   rH   rb   )rK   rL   rM   r7   r%   r\   s         r1   _get_automatic_captionsz%GoogleDriveIE._get_automatic_captions   s    2$$X|R@!!""''0= <<++K8))l$8:JL 	LrP   c                      j                  |      t        j                  j                   j	                  dddi            fd} |d      } |d      g  |d      xs d	j                  d
      } |d      xs d	j                  d
      }|r"|ri }|D ]a  }t        j                  d|      }|st        |j                  d            t        |j                  d            f||j                  d      <   c |D ]  }	|	j                  d      }
t        |
      dk  r#|
d d \  }} j                  j                  |      }|s j                  d| t                       t        |      ||d}|j                  |      }|r|j!                  |d   |d   d       j#                  |        t%        dddd      }d9 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&'      }|rQ|j&                  j                  d      r6 ||       n- j                  t/        d(|      xs t/        d)|      xs d*       s%|r#r j1                  |d+,       nt3        |d+,       |d-      }d } |d.      }|r1|j5                         j7                  d/      j                  d0      d1   } j8                  j;                  d2d3d45       d6z   t=         |d7             j?                  ||       jA                  ||      d8S ):Nz'https://drive.google.com/get_video_infozDownloading video webpagedocid)r=   c                 $     t         fd      S )Nc                     |    d   S )Nr    )xkeys    r1   <lambda>z@GoogleDriveIE._real_extract.<locals>.get_value.<locals>.<lambda>   s    3 rP   )r   )rn   
video_infos   `r1   	get_valuez.GoogleDriveIE._real_extract.<locals>.get_value   s    :':;;rP   reasonr   fmt_stream_maprS   ,fmt_listz5^(?P<format_id>\d+)/(?P<width>\d+)[xX](?P<height>\d+)widthheight	format_id|r   zUnknown format )r   rx   r   r   r   )rv   rw   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)r>   r?   r@   data)_request_webpage)
source_urlrW   r   rK   rL   s      r1   request_source_filez8GoogleDriveIE._real_extract.<locals>.request_source_file   s=    ((H[e+D,TF%8D ) R RrP   sourcec                     s.j                  d| j                  j                  d      dd       j                  | j                  t        d      j                         ddd       y )	Nz\bfilename="([^"]+)"Content-Dispositionr   )rB   r   r   r   )r   r   rx   quality)_search_regexheadersrH   rJ   r   r	   lower)urlhformatsrK   r   s    r1   add_source_formatz6GoogleDriveIE._real_extract.<locals>.add_source_format   sj     ../1A1ABW1X / /E   88(6<<>!) 
  
rP   r   zDownloading confirmation pagezUnable to confirm downloadF)r>   r?   r@   zdownload-formactionzconfirmed sourcerP   )r   zuc-error-subcaptionzuc-error-captionz#unable to extract confirmation codeT)expectedr7   ttsurlunicode_escape=z.google.com/NID)domainpathrV   z&https://drive.google.com/thumbnail?id=length_seconds)r   r   r   r   r   r'   r(   N)!	_match_idurllibparseparse_qs_download_webpagesplitr*   r+   intr-   len_FORMATS_EXTrH   report_warningr   r   rZ   rJ   r   r   _webpage_read_contentr
   r   r   raise_no_formatsr   encodedecode	cookiejarclearr   extract_subtitlesextract_automatic_captions)rK   r   rq   rr   rs   ru   resolutionsrT   r0   
fmt_streamfmt_stream_splitrx   
format_urlr   rN   
resolutionr   r   r   r   confirmation_webpageconfirmed_source_urlr7   rM   r   r   r   rL   rp   s   `                        @@@@r1   _real_extractzGoogleDriveIE._real_extract   s   >>#&\\**4+A+A51'89L ,B ,N O
	< 8$'"#$45;BB3Gj)/R66s;hK MyyLcSDJJw/0#djj6J2K<MK

; 78	M - "
#-#3#3C#8 '(1,(8!(<%	:''++I6''/)EXEZD[(\]+J7!*
 )__Y7
HH!+A",Q-  q!'"* &;$>
	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
 6%%ft%<$Vd;;t_8$ "==?11 ""'%*R1L 	M%H AHL#I.>$?@//,K"&"A"A,#,	
 		
rP   r   )__name__
__module____qualname__
_VALID_URL_TESTSr   _formatsitemsrH   r   rE   rY   rI   rC   classmethodr2   rO   rb   rd   rg   r   ).0kr8   s   000r1   r   r      sH   J Y10)]

 R15Nb
	 S	 Z
 O M _I'FP#,#5#5#;#;#=
N
N41au1ah;
NeL >& MP PK* 04>OLx
{ Os   B#
,B#
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Forrest)r   r      )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$ctrn   )r   r   r=   rS   zapi response)r   r   	_BOUNDARY_search_json)rK   	folder_idrn   r   kwargsresponses         r1   	_call_apizGoogleDriveFolderIE._call_api8  s~    )4))<	 KKM ;4 5T^^4DAF	 	 !t  X~ySFSYWYYrP   c              #      K   d}|`| j                   j                  |||      }| j                  ||| j                  |z        }|d   E d {    |j	                  d      }|_y y 7 w)NrS   )r   
page_tokenrn   r   nextPageToken)_REQUESTr,   r   _DATArH   )rK   r   rn   r   requestpages         r1   _get_folder_itemsz%GoogleDriveFolderIE._get_folder_itemsE  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})"rn   z/drive/v2beta/files/z	 HTTP/1.1F)r@   r   c                     d| d    S )Nz https://drive.google.com/file/d/r   rl   )items    r1   ro   z3GoogleDriveFolderIE._real_extract.<locals>.<lambda>W  s    4TUYZ^U_T`2a rP   )iegetter)	r   r   r   r   r   playlist_from_matchesr   rH   r   )rK   r   r   r/   rn   folder_infos         r1   r   z!GoogleDriveFolderIE._real_extractM  s    NN3'	((i8  ?nnYTZZDXYbXcclBm5muzn{))""9c2I{w?W%a * c 	crP   N)r   r   r   IE_NAMEr   r   r   r   r   r   r   r   rl   rP   r1   r   r   "  sj    "GYJY5
  F )I UH9+  + EZ3
crP   r   )r*   urllib.parser   commonr   youtuber   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   rl   rP   r1   <module>r      s=    	  !   K
M K
\5c- 5crP   