tianyunperfect 3 mesiacov pred
rodič
commit
aaac138b93
1 zmenil súbory, kde vykonal 100 pridanie a 0 odobranie
  1. 100 0
      video_play/main.py

+ 100 - 0
video_play/main.py

@@ -0,0 +1,100 @@
+import os
+import hashlib
+import random
+import json
+from flask import Flask, jsonify, send_file, request
+from flask_cors import CORS
+
+app = Flask(__name__)
+CORS(app)
+
+# 配置文件路径
+VIDEO_DIR = "videos"  # 视频存放目录
+WEIGHT_FILE = "weights.json"  # 权重存储文件
+
+def get_file_md5(filepath):
+    """计算文件的MD5值"""
+    hash_md5 = hashlib.md5()
+    with open(filepath, "rb") as f:
+        for chunk in iter(lambda: f.read(4096), b""):
+            hash_md5.update(chunk)
+    return hash_md5.hexdigest()
+
+def scan_videos():
+    """扫描视频目录并返回带权重的文件列表"""
+    videos = []
+    for filename in os.listdir(VIDEO_DIR):
+        if filename.split('.')[-1].lower() in ['mp4', 'avi', 'mov', 'mkv']:
+            filepath = os.path.join(VIDEO_DIR, filename)
+            md5 = get_file_md5(filepath)
+            videos.append({'md5': md5, 'filename': filename})
+    return videos
+
+def load_weights():
+    """加载权重数据"""
+    try:
+        with open(WEIGHT_FILE, 'r') as f:
+            return json.load(f)
+    except:
+        return {}
+
+def save_weights(weights):
+    """保存权重数据"""
+    with open(WEIGHT_FILE, 'w') as f:
+        json.dump(weights, f)
+
+def get_weighted_list():
+    """获取带权重的视频列表"""
+    videos = scan_videos()
+    weights = load_weights()
+    weighted_list = []
+    for v in videos:
+        weight = weights.get(v['md5'], 5)
+        weighted_list.append({
+            **v,
+            'weight': max(0, min(10, int(weight))),  # 限制在0-10之间
+            'path': os.path.join(VIDEO_DIR, v['filename'])
+        })
+    return weighted_list
+
+@app.route('/files')
+def get_files():
+    """接口1:获取文件列表"""
+    return jsonify(get_weighted_list())
+
+@app.route('/random')
+def get_random():
+    """接口2:加权随机获取视频"""
+    files = get_weighted_list()
+    total_weight = sum(f['weight'] for f in files)
+    rand = random.uniform(0, total_weight)
+    current = 0
+    for f in files:
+        current += f['weight']
+        if rand <= current:
+            return jsonify(f)
+    return jsonify(files[0])
+
+@app.route('/play/<md5>')
+def play_video(md5):
+    """接口3:播放指定视频"""
+    for f in get_weighted_list():
+        if f['md5'] == md5:
+            return send_file(f['path'])
+    return "File not found", 404
+
+@app.route('/weight/<md5>', methods=['POST'])
+def update_weight(md5):
+    """接口4:更新权重"""
+    weights = load_weights()
+    try:
+        weight = int(request.json.get('weight', 5))
+        weights[md5] = max(0, min(10, weight))
+        save_weights(weights)
+        return jsonify({'status': 'success'})
+    except:
+        return jsonify({'status': 'error'}), 400
+
+if __name__ == '__main__':
+    os.makedirs(VIDEO_DIR, exist_ok=True)
+    app.run(debug=True)