| from flask import Flask, request, jsonify, send_file, render_template |
| from yt_dlp import YoutubeDL |
| import os |
|
|
| app = Flask(__name__) |
|
|
| @app.route('/') |
| def home(): |
| return render_template('index.html') |
|
|
| @app.route('/get-info', methods=['POST']) |
| def get_info(): |
| data = request.json |
| url = data.get('url') |
|
|
| if not url: |
| return jsonify({'error': 'URL is required'}), 400 |
|
|
| try: |
| ydl_opts = { |
| 'cookiefile': 'www.youtube.com_cookies.txt' |
| } |
| |
| with YoutubeDL(ydl_opts) as ydl: |
| info = ydl.extract_info(url, download=False) |
| return jsonify({ |
| 'title': info['title'], |
| 'thumbnail': info.get('thumbnail'), |
| 'duration': info.get('duration'), |
| 'channel': info.get('channel') |
| }) |
|
|
| except Exception as e: |
| return jsonify({'error': str(e)}), 500 |
|
|
| @app.route('/download', methods=['POST']) |
| def download_audio(): |
| data = request.json |
| url = data.get('url') |
|
|
| if not url: |
| return jsonify({'error': 'URL is required'}), 400 |
|
|
| try: |
| ydl_opts = { |
| 'format': '251/bestaudio', |
| 'outtmpl': '%(title)s.%(ext)s', |
| 'cookiefile': 'www.youtube.com_cookies.txt', |
| 'postprocessors': [{ |
| 'key': 'FFmpegExtractAudio', |
| 'preferredcodec': 'mp3', |
| 'preferredquality': '192', |
| }], |
| } |
|
|
| with YoutubeDL(ydl_opts) as ydl: |
| info = ydl.extract_info(url, download=True) |
| file_name = ydl.prepare_filename(info).rsplit(".", 1)[0] + ".mp3" |
|
|
| |
| return send_file( |
| file_name, |
| as_attachment=True, |
| download_name=os.path.basename(file_name) |
| ) |
|
|
| except Exception as e: |
| return jsonify({'error': str(e)}), 500 |
|
|
| finally: |
| |
| if 'file_name' in locals() and os.path.exists(file_name): |
| os.remove(file_name) |
|
|
| if __name__ == '__main__': |
| app.run(host='0.0.0.0', port=7860, debug=True) |