youtube-api / app.py
Arifzyn's picture
Update app.py
ce70dca verified
from flask import Flask, request, jsonify, send_file
from yt_dlp import YoutubeDL
import os
app = Flask(__name__)
@app.route('/', methods=['GET'])
def home():
return jsonify({ 'message': 'Hallo, Welcome' })
@app.route('/formats', methods=['POST'])
def get_formats():
data = request.json
url = data.get('url')
if not url:
return jsonify({'error': 'URL is required'}), 400
try:
with YoutubeDL({'listformats': True}) as ydl:
info = ydl.extract_info(url, download=False)
formats = [{
'format_id': f['format_id'],
'format_note': f.get('format_note', 'N/A'),
'ext': f['ext'],
'filesize': f.get('filesize'),
'resolution': f.get('resolution', 'audio only'),
} for f in info['formats']]
return jsonify({'title': info['title'], 'formats': formats})
except Exception as e:
return jsonify({'error': str(e)}), 500
# Endpoint untuk mendownload video atau audio
@app.route('/download', methods=['POST'])
def download_file():
data = request.json
url = data.get('url')
format_id = data.get('format_id')
if not url or not format_id:
return jsonify({'error': 'URL and format_id are required'}), 400
try:
# Konfigurasi yt-dlp
ydl_opts = {
'format': format_id,
'outtmpl': '%(title)s.%(ext)s',
'cookiefile': 'www.youtube.com_cookies.txt' # Jika dibutuhkan
}
with YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=True)
file_name = ydl.prepare_filename(info)
# Kirim file ke client
return send_file(file_name, as_attachment=True)
except Exception as e:
return jsonify({'error': str(e)}), 500
finally:
# Bersihkan file setelah dikirim
if os.path.exists(file_name):
os.remove(file_name)