Spaces:
Sleeping
Sleeping
File size: 3,096 Bytes
81bcd2a 7d8fcf6 81bcd2a 9b40771 8740291 b00675f 9b40771 38df333 9b40771 85eef1a 81bcd2a e7222de fc187ac 81bcd2a e7222de 81bcd2a ef4c690 e7222de 9b40771 38df333 9b40771 546d2ec 8740291 e7222de 546d2ec 4b56793 546d2ec ef4c690 546d2ec 29a949b ef4c690 159d136 81bcd2a 29a949b 8740291 546d2ec 8740291 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
from flask import Flask, request, send_file, jsonify
import os
import subprocess
app = Flask(__name__)
# 権限変更コマンドを実行する関数
def change_permissions(directory):
try:
# chmod 775コマンドを使って権限を変更
subprocess.run(['chmod', '775', directory], check=True)
print(f"Permissions for {directory} changed to 775.")
except subprocess.CalledProcessError as e:
print(f"Error changing permissions for {directory}: {e}")
return False
return True
@app.route('/', 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) # ダウンロード先ディレクトリが存在しない場合、作成する
# `downloads`ディレクトリの権限を775に変更
if not change_permissions(output_path):
return jsonify({"error": "Failed to change directory permissions"}), 500
# 出力ファイル名テンプレート
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=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 出力とエラーメッセージをログに表示
print(result.stdout.decode()) # コマンド実行結果を表示
print(result.stderr.decode()) # エラーメッセージを表示
# エラーメッセージがあれば、それを返す
if result.returncode != 0:
return jsonify({"error": result.stderr.decode()}), 500
# ダウンロードされたファイル名を取得するために、ダウンロードディレクトリ内のファイルを確認
downloaded_files = os.listdir(output_path)
video_file = None
# ダウンロードしたファイルがMP4またはWebMの場合、そのファイルを選択
for file in downloaded_files:
if file.endswith('.mp4') or file.endswith('.webm'):
video_file = os.path.join(output_path, file)
break
if not video_file:
return jsonify({"error": "No video file found"}), 404
# ファイルをクライアントに送信
return send_file(video_file, 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)
|