developer28 commited on
Commit
e132b35
Β·
verified Β·
1 Parent(s): 6e0845f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -11
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import gradio as gr
3
  import yt_dlp
4
  import os
@@ -18,6 +17,64 @@ class YouTubeDownloader:
18
  )
19
  return youtube_regex.match(url) is not None
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  def get_video_info(self, url, progress=gr.Progress(), cookiefile=None):
22
  if not url or not url.strip():
23
  return None, "❌ Please enter a YouTube URL"
@@ -132,12 +189,12 @@ def create_interface():
132
  status_output = gr.Textbox(label="Download Status")
133
  file_output = gr.File(label="Downloaded Video", visible=False)
134
  analysis_btn = gr.Button("Show Analysis Results", visible=False)
135
- analysis_output = gr.Textbox(label="Video Analysis Results", visible=False)
136
  video_info_state = gr.State(value=None)
137
 
138
  def handle_download(url, cookies_path):
139
  if not url or not url.strip():
140
- return "Please enter a YouTube URL", gr.File(visible=False), gr.Button(visible=False), None
141
 
142
  cookiefile = cookies_path.strip() if cookies_path and os.path.exists(cookies_path.strip()) else None
143
  video_info, info_message = downloader.get_video_info(url, cookiefile=cookiefile)
@@ -146,20 +203,21 @@ def create_interface():
146
 
147
  if file_path and video_info:
148
  success_message = f"{download_message}\n\nVideo downloaded successfully! Click 'Show Analysis Results' to see detailed information."
149
- return success_message, gr.File(value=file_path, visible=True), gr.Button(visible=True), video_info
150
  elif file_path:
151
- return f"{download_message}\n\nVideo downloaded but analysis data unavailable.", gr.File(value=file_path, visible=True), gr.Button(visible=False), None
152
  else:
153
- return f"❌ Download failed:\n{download_message}", gr.File(visible=False), gr.Button(visible=False), None
154
 
155
  def show_analysis(video_info):
156
  if video_info:
157
- return downloader.format_video_info(video_info)
158
- return "❌ No analysis data available."
 
159
 
160
- download_btn.click(handle_download, inputs=[url_input, cookies_input], outputs=[status_output, file_output, analysis_btn, video_info_state])
161
  analysis_btn.click(show_analysis, inputs=[video_info_state], outputs=[analysis_output])
162
- url_input.submit(handle_download, inputs=[url_input, cookies_input], outputs=[status_output, file_output, analysis_btn, video_info_state])
163
 
164
  return demo
165
 
@@ -167,4 +225,4 @@ if __name__ == "__main__":
167
  demo = create_interface()
168
  import atexit
169
  atexit.register(downloader.cleanup)
170
- demo.launch()
 
 
1
  import gradio as gr
2
  import yt_dlp
3
  import os
 
17
  )
18
  return youtube_regex.match(url) is not None
19
 
20
+ def format_video_info(self, video_info):
21
+ """Format video information into a readable report"""
22
+ if not video_info:
23
+ return "❌ No video information available."
24
+
25
+ # Format duration
26
+ duration = video_info.get('duration', 0)
27
+ duration_str = f"{duration//3600}:{(duration%3600)//60:02d}:{duration%60:02d}" if duration else "Unknown"
28
+
29
+ # Format upload date
30
+ upload_date = video_info.get('upload_date', '')
31
+ if upload_date and len(upload_date) == 8:
32
+ formatted_date = f"{upload_date[:4]}-{upload_date[4:6]}-{upload_date[6:8]}"
33
+ else:
34
+ formatted_date = upload_date or "Unknown"
35
+
36
+ # Format numbers
37
+ def format_number(num):
38
+ if num >= 1_000_000:
39
+ return f"{num/1_000_000:.1f}M"
40
+ elif num >= 1_000:
41
+ return f"{num/1_000:.1f}K"
42
+ else:
43
+ return str(num)
44
+
45
+ # Build the report
46
+ report = f"""
47
+ πŸ“Ή VIDEO ANALYSIS REPORT
48
+ {'='*50}
49
+
50
+ πŸ“ BASIC INFORMATION:
51
+ β€’ Title: {video_info.get('title', 'Unknown')}
52
+ β€’ Channel: {video_info.get('channel', 'Unknown')}
53
+ β€’ Uploader: {video_info.get('uploader', 'Unknown')}
54
+ β€’ Upload Date: {formatted_date}
55
+ β€’ Duration: {duration_str}
56
+
57
+ πŸ“Š STATISTICS:
58
+ β€’ Views: {format_number(video_info.get('view_count', 0))}
59
+ β€’ Likes: {format_number(video_info.get('like_count', 0))}
60
+ β€’ Comments: {format_number(video_info.get('comment_count', 0))}
61
+ β€’ Channel Followers: {format_number(video_info.get('channel_followers', 0))}
62
+
63
+ 🏷️ CATEGORIES & TAGS:
64
+ β€’ Categories: {', '.join(video_info.get('categories', [])) or 'None'}
65
+ β€’ Tags: {', '.join(video_info.get('tags', [])[:10]) or 'None'}
66
+ {('β€’ More tags...' if len(video_info.get('tags', [])) > 10 else '')}
67
+
68
+ πŸ“– DESCRIPTION:
69
+ {video_info.get('description', 'No description available')[:500]}
70
+ {'...' if len(video_info.get('description', '')) > 500 else ''}
71
+
72
+ πŸ”— VIDEO URL:
73
+ {video_info.get('webpage_url', 'Unknown')}
74
+ """
75
+
76
+ return report.strip()
77
+
78
  def get_video_info(self, url, progress=gr.Progress(), cookiefile=None):
79
  if not url or not url.strip():
80
  return None, "❌ Please enter a YouTube URL"
 
189
  status_output = gr.Textbox(label="Download Status")
190
  file_output = gr.File(label="Downloaded Video", visible=False)
191
  analysis_btn = gr.Button("Show Analysis Results", visible=False)
192
+ analysis_output = gr.Textbox(label="Video Analysis Results", visible=False, lines=20)
193
  video_info_state = gr.State(value=None)
194
 
195
  def handle_download(url, cookies_path):
196
  if not url or not url.strip():
197
+ return "Please enter a YouTube URL", gr.File(visible=False), gr.Button(visible=False), gr.Textbox(visible=False), None
198
 
199
  cookiefile = cookies_path.strip() if cookies_path and os.path.exists(cookies_path.strip()) else None
200
  video_info, info_message = downloader.get_video_info(url, cookiefile=cookiefile)
 
203
 
204
  if file_path and video_info:
205
  success_message = f"{download_message}\n\nVideo downloaded successfully! Click 'Show Analysis Results' to see detailed information."
206
+ return success_message, gr.File(value=file_path, visible=True), gr.Button(visible=True), gr.Textbox(visible=False), video_info
207
  elif file_path:
208
+ return f"{download_message}\n\nVideo downloaded but analysis data unavailable.", gr.File(value=file_path, visible=True), gr.Button(visible=False), gr.Textbox(visible=False), None
209
  else:
210
+ return f"❌ Download failed:\n{download_message}", gr.File(visible=False), gr.Button(visible=False), gr.Textbox(visible=False), None
211
 
212
  def show_analysis(video_info):
213
  if video_info:
214
+ analysis_report = downloader.format_video_info(video_info)
215
+ return gr.Textbox(value=analysis_report, visible=True)
216
+ return gr.Textbox(value="❌ No analysis data available.", visible=True)
217
 
218
+ download_btn.click(handle_download, inputs=[url_input, cookies_input], outputs=[status_output, file_output, analysis_btn, analysis_output, video_info_state])
219
  analysis_btn.click(show_analysis, inputs=[video_info_state], outputs=[analysis_output])
220
+ url_input.submit(handle_download, inputs=[url_input, cookies_input], outputs=[status_output, file_output, analysis_btn, analysis_output, video_info_state])
221
 
222
  return demo
223
 
 
225
  demo = create_interface()
226
  import atexit
227
  atexit.register(downloader.cleanup)
228
+ demo.launch()