SUHHHH commited on
Commit
b1aeb47
·
verified ·
1 Parent(s): 161ad03

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -3
app.py CHANGED
@@ -1,9 +1,46 @@
1
- import os
 
 
 
2
  import openai
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
- # 환경 변수에서 OpenAI API 키를 가져오기
 
 
 
 
 
 
 
 
5
  def textToSummary(text):
6
- openai.api_key = os.getenv("OPENAI_API_KEY") # 환경 변수에서 가져오기
7
  response = openai.Completion.create(
8
  model="text-davinci-003",
9
  prompt="Summarize this in 200 words or less:\n\n" + text,
@@ -14,3 +51,23 @@ def textToSummary(text):
14
  presence_penalty=1
15
  )
16
  return response["choices"][0]["text"].replace("\n", " ").strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # URL To YoutubeID
2
+ from urllib.parse import urlparse
3
+ from youtube_transcript_api import YouTubeTranscriptApi
4
+ from youtube_transcript_api.formatters import TextFormatter
5
  import openai
6
+ import os
7
+ import gradio as gr
8
+
9
+ # 유튜브 비디오 ID 추출 함수
10
+ def get_yt_video_id(url):
11
+ from urllib.parse import urlparse, parse_qs
12
+
13
+ if url.startswith(('youtu', 'www')):
14
+ url = 'http://' + url
15
+
16
+ query = urlparse(url)
17
+
18
+ if 'youtube' in query.hostname:
19
+ if query.path == '/watch':
20
+ return parse_qs(query.query)['v'][0]
21
+ elif query.path.startswith(('/embed/', '/v/')):
22
+ return query.path.split('/')[2]
23
+ elif 'youtu.be' in query.hostname:
24
+ return query.path[1:]
25
+ else:
26
+ raise ValueError("유효한 유튜브 링크가 아닙니다.")
27
+
28
+ # 유튜브 영상의 자막을 가져오는 함수
29
+ def transcribe(youtubeId):
30
+ transcription = YouTubeTranscriptApi.get_transcript(youtubeId)
31
+ return transcription
32
 
33
+ # 자막을 텍스트로 변환하는 함수
34
+ formatter = TextFormatter()
35
+
36
+ def transcriptToText(transcript):
37
+ text = formatter.format_transcript(transcript)
38
+ text = text.replace("\n", " ")
39
+ return text
40
+
41
+ # 텍스트를 요약하는 함수 (OpenAI API 사용, 환경 변수로 키를 가져옴)
42
  def textToSummary(text):
43
+ openai.api_key = os.getenv("OPENAI_API_KEY") # 환경 변수에서 OpenAI API 키 가져오기
44
  response = openai.Completion.create(
45
  model="text-davinci-003",
46
  prompt="Summarize this in 200 words or less:\n\n" + text,
 
51
  presence_penalty=1
52
  )
53
  return response["choices"][0]["text"].replace("\n", " ").strip()
54
+
55
+ # 전체 요약 프로세스를 처리하는 함수
56
+ def summarize(url):
57
+ try:
58
+ videoId = get_yt_video_id(url)
59
+ transcript = transcribe(videoId)
60
+ text = transcriptToText(transcript)
61
+ summary = textToSummary(text)
62
+ return summary
63
+ except Exception as e:
64
+ return f"요약에 실패했습니다: {str(e)}"
65
+
66
+ # Gradio 인터페이스 설정
67
+ description = "요약할 유튜브 동영상 링크를 입력하세요"
68
+
69
+ gr.Interface(fn=summarize,
70
+ inputs="text",
71
+ outputs="textbox",
72
+ description=description
73
+ ).launch()