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)