Spaces:
Sleeping
Sleeping
File size: 2,068 Bytes
81bcd2a 7d8fcf6 81bcd2a fc187ac 81bcd2a e7222de fc187ac 81bcd2a e7222de 81bcd2a ef4c690 e7222de 546d2ec 7d8fcf6 e7222de 546d2ec 4b56793 546d2ec ef4c690 546d2ec ef4c690 159d136 81bcd2a 546d2ec 159d136 546d2ec 159d136 81bcd2a e7222de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
from flask import Flask, request, send_file, jsonify
import os
import subprocess
app = Flask(__name__)
@app.route('/download', methods=['GET'])
def download_video():
try:
# URLの取得
video_url = request.args.get('url')
if not video_url:
return jsonify({"error": "URL is required"}), 400
# ダウンロード先ディレクトリ
output_path = "downloads"
os.makedirs(output_path, exist_ok=True) # ダウンロード先ディレクトリが存在しない場合、作成する
# 出力ファイル名テンプレート
output_file = os.path.join(output_path, '%(title)s.%(ext)s')
# yt-dlpコマンドの設定
cookies_file = 'cookies.txt' # エクスポートしたクッキーを指定
cmd = [
'yt-dlp',
'--cookies', cookies_file,
'--output', output_file, # 出力ファイルのパスを指定
'-f', 'bestvideo+bestaudio/best', # 最適なビデオ+オーディオフォーマットを選択
video_url
]
# yt-dlpコマンドを実行
result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 出力とエラーメッセージをログに表示
print(result.stdout.decode()) # コマンド実行結果を表示
print(result.stderr.decode()) # エラーメッセージを表示
# ダウンロードされたファイルのパスを取得
# 出力ファイル名の形式をチェック
file_path = os.path.join(output_path, 'nRh5QyKIs8o.mp4') # 固定ファイル名でなく、動的に取得する方法が良い
if not os.path.exists(file_path):
return jsonify({"error": "File not found"}), 404
# ファイルをクライアントに送信
return send_file(file_path, as_attachment=True)
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host="0.0.0.0", port=7860, debug=True)
|