Spaces:
Sleeping
Sleeping
# URL To YoutubeID | |
from urllib.parse import urlparse | |
from youtube_transcript_api import YouTubeTranscriptApi | |
from youtube_transcript_api.formatters import TextFormatter | |
import openai | |
import gradio as gr | |
# μ νλΈ λΉλμ€ ID μΆμΆ ν¨μ | |
def get_yt_video_id(url): | |
from urllib.parse import urlparse, parse_qs | |
if url.startswith(('youtu', 'www')): | |
url = 'http://' + url | |
query = urlparse(url) | |
if 'youtube' in query.hostname: | |
if query.path == '/watch': | |
return parse_qs(query.query)['v'][0] | |
elif query.path.startswith(('/embed/', '/v/')): | |
return query.path.split('/')[2] | |
elif 'youtu.be' in query.hostname: | |
return query.path[1:] | |
else: | |
raise ValueError("μ ν¨ν μ νλΈ λ§ν¬κ° μλλλ€.") | |
# μ νλΈ μμμ μλ§μ κ°μ Έμ€λ ν¨μ | |
def transcribe(youtubeId): | |
transcription = YouTubeTranscriptApi.get_transcript(youtubeId) | |
return transcription | |
# μλ§μ ν μ€νΈλ‘ λ³ννλ ν¨μ | |
formatter = TextFormatter() | |
def transcriptToText(transcript): | |
text = formatter.format_transcript(transcript) | |
text = text.replace("\n", " ") | |
return text | |
# ν μ€νΈλ₯Ό μμ½νλ ν¨μ (OpenAI API μ¬μ©) | |
def textToSummary(text, OpenAIkey): | |
openai.api_key = OpenAIkey | |
response = openai.Completion.create( | |
model="text-davinci-003", | |
prompt="Summarize this in 200 words or less:\n\n" + text, | |
temperature=0.7, | |
max_tokens=400, | |
top_p=1.0, | |
frequency_penalty=0.0, | |
presence_penalty=1 | |
) | |
return response["choices"][0]["text"].replace("\n", " ").strip() | |
# μ 체 μμ½ νλ‘μΈμ€λ₯Ό μ²λ¦¬νλ ν¨μ | |
def summarize(url, OpenAIkey): | |
try: | |
videoId = get_yt_video_id(url) | |
transcript = transcribe(videoId) | |
text = transcriptToText(transcript) | |
summary = textToSummary(text, OpenAIkey) | |
return summary | |
except Exception as e: | |
return f"μμ½μ μ€ν¨νμ΅λλ€: {str(e)}" | |
# Gradio μΈν°νμ΄μ€ μ€μ | |
description = "μμ½ν μ νλΈ λμμ λ§ν¬λ₯Ό μ λ ₯νμΈμ" | |
gr.Interface(fn=summarize, | |
inputs=["text", "text"], | |
outputs="textbox", | |
description=description | |
).launch() |