AIRider commited on
Commit
9c0a72e
·
verified ·
1 Parent(s): 64cd965

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -89
app.py CHANGED
@@ -1,89 +0,0 @@
1
- import os
2
- import requests
3
- import json
4
- import gradio as gr
5
- import re
6
-
7
- # Hugging Face 환경 변수로부터 RapidAPI 키와 호스트 가져오기
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']
31
-
32
- # 유튜브 자막을 요청하는 함수 (언어 우선순위를 적용하여 시도)
33
- def get_youtube_transcript(youtube_url):
34
- # 비디오 ID 추출
35
- video_id = get_video_id(youtube_url)
36
- if video_id is None:
37
- return {"error": "잘못된 유튜브 URL입니다. 비디오 ID를 찾을 수 없습니다."}
38
-
39
- url = "https://youtube-transcriptor.p.rapidapi.com/transcript"
40
-
41
- headers = {
42
- "x-rapidapi-key": AA_KEY,
43
- "x-rapidapi-host": AA_HOST
44
- }
45
-
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):
73
- # 자막 데이터 가져오기
74
- transcript_data = get_youtube_transcript(youtube_url)
75
-
76
- # 결과 출력
77
- return json.dumps(transcript_data, ensure_ascii=False, indent=2)
78
-
79
- # Gradio 인터페이스 생성
80
- interface = gr.Interface(
81
- fn=youtube_transcript_interface,
82
- inputs="text",
83
- outputs="text",
84
- title="YouTube 자막 추출기",
85
- description="유튜브 URL을 입력하세요."
86
- )
87
-
88
- # Gradio 인터페이스 실행
89
- interface.launch()