AIRider commited on
Commit
2d747aa
Β·
verified Β·
1 Parent(s): f6753a4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -32
app.py CHANGED
@@ -8,23 +8,16 @@ import re
8
  AA_KEY = os.getenv("AA_KEY")
9
  AA_HOST = "youtube-transcriptor.p.rapidapi.com"
10
 
 
11
  def get_video_id(youtube_url):
12
- # λ‹€μ–‘ν•œ YouTube URL ν˜•μ‹μ— λŒ€ν•œ μ •κ·œν‘œν˜„μ‹ νŒ¨ν„΄
13
- patterns = [
14
- r"(?:v=|\/)([0-9A-Za-z_-]{11}).*", # 일반적인 YouTube URL 및 Shorts URL
15
- r"(?:youtu\.be\/|youtube.com\/shorts\/)([0-9A-Za-z_-]{11})", # 단좕 URL 및 Shorts URL
16
- r"^[0-9A-Za-z_-]{11}$" # λΉ„λ””μ˜€ ID만 μž…λ ₯된 경우
17
- ]
18
 
19
- # URLμ—μ„œ 쿼리 νŒŒλΌλ―Έν„° 제거
20
- url_without_params = youtube_url.split('?')[0]
 
21
 
22
- for pattern in patterns:
23
- match = re.search(pattern, url_without_params)
24
- if match:
25
- return match.group(1)
26
-
27
- return None
28
 
29
  # μžλ§‰ μ–Έμ–΄ μš°μ„ μˆœμœ„ 리슀트
30
  LANGUAGE_PRIORITY = ['ko', 'en', 'ja', 'zh']
@@ -46,27 +39,21 @@ def get_youtube_transcript(youtube_url):
46
  # μ–Έμ–΄ μš°μ„ μˆœμœ„μ— 따라 순차적으둜 μš”μ²­μ„ μ‹œλ„
47
  for lang in LANGUAGE_PRIORITY:
48
  querystring = {"video_id": video_id, "lang": lang}
49
- try:
50
- response = requests.get(url, headers=headers, params=querystring)
51
- response.raise_for_status() # 였λ₯˜ μƒνƒœ μ½”λ“œμ— λŒ€ν•΄ μ˜ˆμ™Έ λ°œμƒ
52
-
53
- data = response.json()
54
-
55
- # μžλ§‰μ΄ μ—†λŠ” 경우 처리
56
- if "transcript" not in data or not data["transcript"]:
57
- continue
58
-
59
- return {"language": lang, "data": data}
60
 
61
- except requests.exceptions.RequestException as e:
62
- print(f"Error for language {lang}: {str(e)}")
63
- continue
64
- except json.JSONDecodeError as e:
65
- print(f"JSON Decode Error for language {lang}: {str(e)}")
66
- continue
67
 
68
  # λͺ¨λ“  μ–Έμ–΄μ—μ„œ μžλ§‰μ„ 찾지 λͺ»ν•œ 경우
69
- return {"error": "μš°μ„ μˆœμœ„ μ–Έμ–΄λ‘œ μžλ§‰μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ™μ˜μƒμ— μžλ§‰μ΄ μ—†κ±°λ‚˜ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€."}
70
 
71
  # Gradio μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
72
  def youtube_transcript_interface(youtube_url):
 
8
  AA_KEY = os.getenv("AA_KEY")
9
  AA_HOST = "youtube-transcriptor.p.rapidapi.com"
10
 
11
+ # 유튜브 URLμ—μ„œ λΉ„λ””μ˜€ IDλ₯Ό μΆ”μΆœν•˜λŠ” ν•¨μˆ˜
12
  def get_video_id(youtube_url):
13
+ # 유튜브 URL λ˜λŠ” youtu.be 단좕 URLμ—μ„œ video_id μΆ”μΆœ
14
+ video_id_match = re.search(r"(?<=v=)[^#&?]*", youtube_url) or re.search(r"(?<=youtu.be/)[^#&?]*", youtube_url)
 
 
 
 
15
 
16
+ # YouTube Shorts URL 처리
17
+ if not video_id_match:
18
+ video_id_match = re.search(r"(?<=shorts/)[^#&?]*", youtube_url)
19
 
20
+ return video_id_match.group(0) if video_id_match else None
 
 
 
 
 
21
 
22
  # μžλ§‰ μ–Έμ–΄ μš°μ„ μˆœμœ„ 리슀트
23
  LANGUAGE_PRIORITY = ['ko', 'en', 'ja', 'zh']
 
39
  # μ–Έμ–΄ μš°μ„ μˆœμœ„μ— 따라 순차적으둜 μš”μ²­μ„ μ‹œλ„
40
  for lang in LANGUAGE_PRIORITY:
41
  querystring = {"video_id": video_id, "lang": lang}
42
+ response = requests.get(url, headers=headers, params=querystring)
43
+
44
+ # μƒνƒœ μ½”λ“œ 확인 및 전체 응닡 λ°˜ν™˜
45
+ if response.status_code == 200:
46
+ try:
47
+ data = response.json()
48
+
49
+ # 전체 응닡 데이터λ₯Ό κ·ΈλŒ€λ‘œ λ°˜ν™˜
50
+ return {"language": lang, "data": data}
 
 
51
 
52
+ except json.JSONDecodeError as e:
53
+ return {"error": f"JSON λ””μ½”λ”© 였λ₯˜ λ°œμƒ: {str(e)}"}
 
 
 
 
54
 
55
  # λͺ¨λ“  μ–Έμ–΄μ—μ„œ μžλ§‰μ„ 찾지 λͺ»ν•œ 경우
56
+ return {"error": "μš°μ„ μˆœμœ„ μ–Έμ–΄λ‘œ μžλ§‰μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."}
57
 
58
  # Gradio μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
59
  def youtube_transcript_interface(youtube_url):