from youtubesearchpython import VideosSearch, Transcript # Changed import statement import gradio as gr import openai import os # openai.api_key = os.getenv('O_API_KEY') def search_youtube_videos(keyword): videos_search = VideosSearch(keyword, limit=5) results = videos_search.result() video_urls = [video['link'] for video in results['result']] return video_urls def get_transcript(urls): contents = '' for url in urls: data = Transcript.get(url) text = "" for segment in data['segments']: text += segment['text'] contents += text return contents def summarize_text(contents, OPENAI_API_KEY): response = openai.ChatCompletion.create( model="gpt-4-turbo-preview", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": f"Summarize this: {contents}"} ], headers={ "Content-Type": "application/json", "Authorization": f"Bearer {OPENAI_API_KEY}" } ) return response.choices[0].message['content'].strip() # def summarize_text(contents): # response = openai.ChatCompletion.create( # engine="gpt-3.5-turbo", # prompt=f"요약: {contents}", # max_tokens=150 # ) # return response.choices[0].text.strip() # Function to integrate all the functionalities def summarize_youtube_videos(keyword, OPENAI_API_KEY): urls = search_youtube_videos(keyword) contents = get_transcript(urls) summary = summarize_text(contents,OPENAI_API_KEY) return summary def summarize_button_click(keyword, OPENAI_API_KEY): summary = summarize_youtube_videos(keyword, OPENAI_API_KEY) return summary with gr.Blocks(css="footer {visibility: hidden;}") as demo: with gr.Tab(): keyword = gr.Textbox(label="keyword", placeholder='키워드를 입력하세요. (예.비트코인)') OPEN_API_KEY = gr.Textbox("OpenAI API 키", placeholder="여기에 OpenAI API 키를 입력하세요") output = gr.JSON(label="결과") analysis_result = gr.HTML() # 사주 분석 결과를 출력할 HTML 컴포넌트 analysis_btn = gr.Button("submit") analysis_btn.click( fn=summarize_youtube_videos, inputs=[keyword, OPEN_API_KEY], outputs=[output, analysis_result] ) demo.launch()