import gradio as gr from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow # YouTube API 인증 및 클라이언트 초기화 def authenticate_youtube(): flow = InstalledAppFlow.from_client_secrets_file('client_secrets.json', ['https://www.googleapis.com/auth/youtube.force-ssl']) creds = flow.run_local_server(port=0) return build('youtube', 'v3', credentials=creds) # 현재 동영상 설명 가져오기 def get_video_description(video_id): youtube = authenticate_youtube() request = youtube.videos().list(part='snippet', id=video_id) response = request.execute() if not response['items']: return 'Video not found.' video = response['items'][0] snippet = video['snippet'] return snippet['description'] # 동영상 설명 업데이트 def update_video_description(video_id, additional_text): youtube = authenticate_youtube() request = youtube.videos().list(part='snippet', id=video_id) response = request.execute() if not response['items']: return 'Video not found.' video = response['items'][0] snippet = video['snippet'] snippet['description'] += f"\n\n{additional_text}" youtube.videos().update(part='snippet', body={'id': video_id, 'snippet': snippet}).execute() return 'Successfully updated the video description.' # Gradio 인터페이스 설정 with gr.Blocks() as app: gr.Markdown("YouTube Video Description Manager") with gr.Row(): video_id_input = gr.Textbox(label="Video ID") get_desc_button = gr.Button("Get Description") description_output = gr.Textbox(label="Current Description", lines=4, interactive=False) additional_text_input = gr.Textbox(label="Additional Text to Add", lines=4) update_button = gr.Button("Update Description") result_output = gr.Textbox(label="Result", interactive=False) get_desc_button.click(fn=get_video_description, inputs=video_id_input, outputs=description_output) update_button.click(fn=update_video_description, inputs=[video_id_input, additional_text_input], outputs=result_output) app.launch()