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', # Format untuk audio terbaik '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" # Kirim file ke client 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: # Bersihkan file setelah dikirim 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)