
    ̙i                     .   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  ej                  e      Zd	 Zd
ededefdZdedefdZ	 d"dedededededefdZdededededededededefdZdedededededededefdZded edefd!Zy)#u   Google Drive 업로드 모듈    N)Optional)Credentials)build)MediaInMemoryUpload   )configc                      t        dt        j                  t        j                  t        j                  d      } t        dd|       S )u*   OAuth2 인증으로 Drive 서비스 생성Nz#https://oauth2.googleapis.com/token)tokenrefresh_token	client_idclient_secret	token_uridrivev3)credentials)r   r   DRIVE_REFRESH_TOKENDRIVE_CLIENT_IDDRIVE_CLIENT_SECRETr   )credss    W/home/jay/projects/insuwiki/scripts/youtube-pipeline/youtube_pipeline/drive_uploader.py_get_drive_servicer      s>    00((007E $E22    	parent_idfolder_namereturnc                 "   d| d| d}| j                         j                  |dd      j                         }|j                  dg       }|r|d   d	   S |d
|gd}| j                         j	                  |d	      j                         }|d	   S )u   폴더 찾기 또는 생성'' in parents and name='zE' and mimeType='application/vnd.google-apps.folder' and trashed=falsez	files(id)r   qfieldspageSizefilesr   idz"application/vnd.google-apps.foldernamemimeTypeparents)bodyr!   )r#   listexecutegetcreate)servicer   r   queryresultsr#   file_metadatafolders           r   _find_or_create_folderr3      s     I;-k] ;O 	O 
 mmo""U;"KSSUGKK$EQx~ 8;M
 ]]_##t#DLLNF$<r   titlec                 6    t        j                  dd|       dd S )u/   파일명에 사용할 수 없는 문자 제거z[/\\:*?"<>|]_N2   )resub)r4   s    r   _safe_filenamer:   0   s    66/3.s33r   contentchannel_namevideo_title
video_datesuffixc                    t               }t        j                  }t        ||d      }t        |||      }t	        |      }	| d|	 | d}
d| d|
 d}|j                         j                  |dd	      j                         }|j                  d
g       }|r1t        j                  d|
       |d   j                  d|d   d         S t        | j                  d      d      }|
d|gd}|j                         j                  ||d      j                         }|j                  d|j                  dd            }t        j                  d|
|       |S )uB   마크다운 파일을 Drive에 업로드하고 webViewLink 반환   04_유튜브요약r6   z.mdr   r   z' and trashed=falsezfiles(id,webViewLink)r   r   r#   u   Drive 중복 파일 스킵: %sr   webViewLinkr$   utf-8
text/plainmimetyper%   id,webViewLinkr)   
media_bodyr!    u!   Drive 업로드 완료: %s → %s)r   r   DRIVE_ROOT_FOLDER_IDr3   r:   r#   r*   r+   r,   loggerinfor   encoder-   )r;   r<   r=   r>   r?   r.   root_idyoutube_folder_idchannel_folder_id
safe_title	file_namer/   existingexisting_filesmediar1   resulturls                     r   upload_markdownrY   5   sb    !"G))G /wAUV.w8I<X,J,a
|F837I !""9)DWXE	5	B	 
 \\'2.N4i@a $$]N14Ed4KLLw 7,OE %&M 		]u=M	N	  **]FJJtR$8
9C
KK3YDJr   summaryvideo_idpublished_atdurationtranscription_sourcetranscript_lengthc                 @    d| d| d| d|dd  d| d| d	|d
d|  dS )u!   요약 마크다운 문서 생성# u   

- **채널**:    
- **영상 ID**:    
- **게시일**: N
      
- **길이**:    
- **전사 방식**: u   
- **전사 길이**: ,u0   자
- **요약 생성**: Gemini 2.5 Flash

---


 )rZ   r4   r<   r[   r\   r]   r^   r_   s           r   build_summary_markdownrj   d   sn     % n  s#$ %j *+ ,'* +
 		 
 r   
transcriptc                 8    d| d| d| d|dd  d| d| d	|  d
S )u(   전사 원문 마크다운 문서 생성ra   u"    — 전사 원문

- **채널**: rb   rc   Nrd   re   rf   z

---

rh   ri   )rk   r4   r<   r[   r\   r]   r^   s          r   build_transcript_markdownrm      sa     % n  s#$ %j *+ ,   r   log_contentdate_strc                 ^   t               }t        j                  }t        ||d      }t        ||d      }| d}t	        | j                  d      d      }|d|gd}|j                         j                  ||d	      j                         }	|	j                  d
|	j                  dd            S )u#   처리 로그를 Drive에 업로드rA   u   _처리로그u   _크롤링로그.mdrC   rD   rE   r%   rG   rH   rB   r$   rJ   )
r   r   rK   r3   r   rN   r#   r-   r+   r,   )
rn   ro   r.   rO   rP   log_folder_idrS   rV   r1   rW   s
             r   upload_processing_logrr      s     "G))G.wAUV*74EWM*/0I 2 27 ;lSE !?M 		]u=M	N	 
 ::mVZZb%9::r   )rJ   )__doc__loggingr8   typingr   google.oauth2.credentialsr   googleapiclient.discoveryr   googleapiclient.httpr   rJ   r   	getLogger__name__rL   r   strr3   r:   rY   intrj   rm   rr   ri   r   r   <module>r}      sj   #  	  1 + 4 			8	$	3s   (4# 4# 4 ,,, , 	,
 , 	,^  	
     	6  	
    	0;s ;c ;c ;r   