| import requests |
| import time |
| import gradio as gr |
|
|
| |
| HEADERS = { |
| 'accept': 'application/json', |
| 'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8,pt;q=0.7,hi;q=0.6', |
| 'content-type': 'application/json', |
| 'origin': 'https://www.savethevideo.com', |
| 'priority': 'u=1, i', |
| 'referer': 'https://www.savethevideo.com/', |
| 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', |
| 'sec-ch-ua-mobile': '?0', |
| 'sec-ch-ua-platform': '"macOS"', |
| 'sec-fetch-dest': 'empty', |
| 'sec-fetch-mode': 'cors', |
| 'sec-fetch-site': 'same-site', |
| 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36' |
| } |
|
|
| def get_video_data(url): |
| response = requests.post( |
| 'https://api.v02.savethevideo.com/tasks', |
| headers=HEADERS, |
| json={"type": "info", "url": url} |
| ) |
|
|
| data = response.json() |
|
|
| while data.get('state') != 'completed': |
| if data.get('state') in ('pending', 'active'): |
| task_id = data['id'] |
| time.sleep(2) |
| response = requests.get( |
| f'https://api.v02.savethevideo.com/tasks/{task_id}', |
| headers=HEADERS |
| ) |
| data = response.json() |
| else: |
| raise Exception(f"Unexpected task state: {data}") |
|
|
| return data['result'] |
|
|
| def extract_important_info(video_json): |
| video = video_json[0] |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| hd_formats = [ |
| f for f in video.get('formats', []) |
| if f.get('vcodec') != 'none' |
| and 'DASH' not in f.get('format_note', '') |
| and not f.get('url', '').endswith('.m3u8') |
| and 'dash' not in f.get('format_id', '').lower() |
| ] |
|
|
| best_format = hd_formats[0] if hd_formats else {} |
|
|
| return { |
| 'title': video.get('title'), |
| 'filesize_approx': best_format.get('filesize_approx'), |
| 'hd_video_url': best_format.get('url'), |
| 'view_count': video.get('like_count'), |
| 'duration': video.get('duration'), |
| 'duration_string': video.get('duration_string'), |
| 'thumbnail': video.get('thumbnail'), |
| 'upload_date': video.get('upload_date'), |
| 'timestamp': video.get('timestamp') |
| } |
|
|
| def gradio_handler(video_url): |
| try: |
| raw_data = get_video_data(video_url) |
| return extract_important_info(raw_data) |
| except Exception as e: |
| return {"error": str(e)} |
|
|
| |
| app = gr.Interface( |
| fn=gradio_handler, |
| inputs=gr.Textbox( |
| label="Video URL", |
| placeholder="Paste video URL here..." |
| ), |
| outputs=gr.JSON(label="Extracted Video Info"), |
| title="Video Info Extractor", |
| description="Fetch HD video metadata using API" |
| ) |
|
|
| if __name__ == "__main__": |
| app.launch() |
|
|