Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -8,21 +8,18 @@ from urllib.parse import urlparse, parse_qs
|
|
8 |
|
9 |
# Video ID çıkarma fonksiyonu
|
10 |
def extract_video_id(url):
|
11 |
-
# YouTube URL formatları için regex
|
12 |
youtube_regex = r'(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})'
|
13 |
|
14 |
match = re.match(youtube_regex, url)
|
15 |
if match:
|
16 |
return match.group(6)
|
17 |
|
18 |
-
# URL parametrelerinden ID çıkarma
|
19 |
parsed_url = urlparse(url)
|
20 |
if parsed_url.netloc in ['youtube.com', 'www.youtube.com']:
|
21 |
query_params = parse_qs(parsed_url.query)
|
22 |
if 'v' in query_params:
|
23 |
return query_params['v'][0]
|
24 |
|
25 |
-
# youtu.be URL'leri için
|
26 |
if parsed_url.netloc == 'youtu.be':
|
27 |
return parsed_url.path.strip('/')
|
28 |
|
@@ -31,19 +28,14 @@ def extract_video_id(url):
|
|
31 |
# RapidAPI üzerinden transkript alma fonksiyonu
|
32 |
def get_transcript_via_rapidapi(video_url):
|
33 |
try:
|
34 |
-
# Video ID'yi çıkar
|
35 |
video_id = extract_video_id(video_url)
|
36 |
if not video_id:
|
37 |
return "Geçersiz YouTube URL'si. Lütfen geçerli bir YouTube video URL'si girin."
|
38 |
|
39 |
-
# Hugging Face'de ayarladığınız secret değeri al
|
40 |
RAPID_API_KEY = os.environ.get("RAPID_API_KEY", "")
|
41 |
-
|
42 |
if not RAPID_API_KEY:
|
43 |
return "RapidAPI anahtarı bulunamadı. Lütfen Hugging Face Space ayarlarında RAPID_API_KEY adlı bir secret oluşturun."
|
44 |
|
45 |
-
# ----- RapidAPI Endpoint Seçeneği 1: YouTube Transcriptor -----
|
46 |
-
# API endpoint ve parametreleri
|
47 |
url = "https://youtube-transcriptor.p.rapidapi.com/transcript"
|
48 |
querystring = {"video_id": video_id, "lang": "tr"}
|
49 |
headers = {
|
@@ -51,37 +43,14 @@ def get_transcript_via_rapidapi(video_url):
|
|
51 |
"X-RapidAPI-Host": "youtube-transcriptor.p.rapidapi.com"
|
52 |
}
|
53 |
|
54 |
-
# API isteği gönder
|
55 |
response = requests.get(url, headers=headers, params=querystring)
|
56 |
|
57 |
-
# ----- VEYA -----
|
58 |
-
|
59 |
-
# ----- RapidAPI Endpoint Seçeneği 2: Ultimate YouTube API -----
|
60 |
-
# url = "https://ultimate-youtube-api.p.rapidapi.com/video/transcript"
|
61 |
-
# querystring = {"id": video_id}
|
62 |
-
# headers = {
|
63 |
-
# "X-RapidAPI-Key": RAPID_API_KEY,
|
64 |
-
# "X-RapidAPI-Host": "ultimate-youtube-api.p.rapidapi.com"
|
65 |
-
# }
|
66 |
-
# response = requests.get(url, headers=headers, params=querystring)
|
67 |
-
|
68 |
-
# API yanıtını kontrol et
|
69 |
if response.status_code == 200:
|
70 |
try:
|
71 |
data = response.json()
|
72 |
-
|
73 |
-
# API'nin yanıt formatına göre ayarla - YouTube Transcriptor API için:
|
74 |
-
if data and 'transcriptionAsText' in data[0]:
|
75 |
-
transcript = data[0]['transcriptionAsText']
|
76 |
-
return transcript
|
77 |
|
78 |
-
|
79 |
-
|
80 |
-
# transcript_parts = []
|
81 |
-
# for item in data:
|
82 |
-
# if 'text' in item:
|
83 |
-
# transcript_parts.append(item['text'])
|
84 |
-
# return " ".join(transcript_parts)
|
85 |
|
86 |
return "Transkript verileri beklenen formatta değil. Manuel olarak girmeyi deneyin."
|
87 |
except Exception as e:
|
@@ -95,9 +64,7 @@ def get_transcript_via_rapidapi(video_url):
|
|
95 |
# Gemini API ile metni özetleme
|
96 |
def fn_sum_text(transkript_text, word_count, model_sel, lang_sel, action_sel):
|
97 |
try:
|
98 |
-
# Hugging Face'de ayarladığınız secret değeri al
|
99 |
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "")
|
100 |
-
|
101 |
if not GEMINI_API_KEY:
|
102 |
return "Gemini API anahtarı bulunamadı. Lütfen Hugging Face Space ayarlarında GEMINI_API_KEY adlı bir secret oluşturun."
|
103 |
|
@@ -114,14 +81,11 @@ def fn_sum_text(transkript_text, word_count, model_sel, lang_sel, action_sel):
|
|
114 |
|
115 |
# Her ikisini birleştiren fonksiyon
|
116 |
def process_video(video_url, word_count, model_sel, lang_sel, action_sel):
|
117 |
-
# Önce transkripti al
|
118 |
transcript = get_transcript_via_rapidapi(video_url)
|
119 |
|
120 |
-
# Hata kontrolü
|
121 |
if transcript.startswith("Hata") or transcript.startswith("Geçersiz") or transcript.startswith("API"):
|
122 |
return transcript, ""
|
123 |
|
124 |
-
# Transkript başarıyla alındıysa, özetle
|
125 |
summary = fn_sum_text(transcript, word_count, model_sel, lang_sel, action_sel)
|
126 |
return transcript, summary
|
127 |
|
@@ -227,9 +191,7 @@ with gr.Blocks(title="YouTube Transcript Özetleyici") as demo:
|
|
227 |
with gr.Accordion("Sorun Giderme", open=False):
|
228 |
gr.Markdown("""
|
229 |
### Sık Karşılaşılan Sorunlar
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
**"Transkript Bulunamadı" Hatası**
|
234 |
- Videonun altyazıları bulunmuyor olabilir
|
235 |
- Seçilen RapidAPI servisi bu video için altyazı sunmuyor olabilir
|
|
|
8 |
|
9 |
# Video ID çıkarma fonksiyonu
|
10 |
def extract_video_id(url):
|
|
|
11 |
youtube_regex = r'(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})'
|
12 |
|
13 |
match = re.match(youtube_regex, url)
|
14 |
if match:
|
15 |
return match.group(6)
|
16 |
|
|
|
17 |
parsed_url = urlparse(url)
|
18 |
if parsed_url.netloc in ['youtube.com', 'www.youtube.com']:
|
19 |
query_params = parse_qs(parsed_url.query)
|
20 |
if 'v' in query_params:
|
21 |
return query_params['v'][0]
|
22 |
|
|
|
23 |
if parsed_url.netloc == 'youtu.be':
|
24 |
return parsed_url.path.strip('/')
|
25 |
|
|
|
28 |
# RapidAPI üzerinden transkript alma fonksiyonu
|
29 |
def get_transcript_via_rapidapi(video_url):
|
30 |
try:
|
|
|
31 |
video_id = extract_video_id(video_url)
|
32 |
if not video_id:
|
33 |
return "Geçersiz YouTube URL'si. Lütfen geçerli bir YouTube video URL'si girin."
|
34 |
|
|
|
35 |
RAPID_API_KEY = os.environ.get("RAPID_API_KEY", "")
|
|
|
36 |
if not RAPID_API_KEY:
|
37 |
return "RapidAPI anahtarı bulunamadı. Lütfen Hugging Face Space ayarlarında RAPID_API_KEY adlı bir secret oluşturun."
|
38 |
|
|
|
|
|
39 |
url = "https://youtube-transcriptor.p.rapidapi.com/transcript"
|
40 |
querystring = {"video_id": video_id, "lang": "tr"}
|
41 |
headers = {
|
|
|
43 |
"X-RapidAPI-Host": "youtube-transcriptor.p.rapidapi.com"
|
44 |
}
|
45 |
|
|
|
46 |
response = requests.get(url, headers=headers, params=querystring)
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
if response.status_code == 200:
|
49 |
try:
|
50 |
data = response.json()
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
+
if data and 'transcriptionAsText' in data[0]:
|
53 |
+
return data[0]['transcriptionAsText']
|
|
|
|
|
|
|
|
|
|
|
54 |
|
55 |
return "Transkript verileri beklenen formatta değil. Manuel olarak girmeyi deneyin."
|
56 |
except Exception as e:
|
|
|
64 |
# Gemini API ile metni özetleme
|
65 |
def fn_sum_text(transkript_text, word_count, model_sel, lang_sel, action_sel):
|
66 |
try:
|
|
|
67 |
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "")
|
|
|
68 |
if not GEMINI_API_KEY:
|
69 |
return "Gemini API anahtarı bulunamadı. Lütfen Hugging Face Space ayarlarında GEMINI_API_KEY adlı bir secret oluşturun."
|
70 |
|
|
|
81 |
|
82 |
# Her ikisini birleştiren fonksiyon
|
83 |
def process_video(video_url, word_count, model_sel, lang_sel, action_sel):
|
|
|
84 |
transcript = get_transcript_via_rapidapi(video_url)
|
85 |
|
|
|
86 |
if transcript.startswith("Hata") or transcript.startswith("Geçersiz") or transcript.startswith("API"):
|
87 |
return transcript, ""
|
88 |
|
|
|
89 |
summary = fn_sum_text(transcript, word_count, model_sel, lang_sel, action_sel)
|
90 |
return transcript, summary
|
91 |
|
|
|
191 |
with gr.Accordion("Sorun Giderme", open=False):
|
192 |
gr.Markdown("""
|
193 |
### Sık Karşılaşılan Sorunlar
|
194 |
+
|
|
|
|
|
195 |
**"Transkript Bulunamadı" Hatası**
|
196 |
- Videonun altyazıları bulunmuyor olabilir
|
197 |
- Seçilen RapidAPI servisi bu video için altyazı sunmuyor olabilir
|