DailyMotion/flask_test.py
2025-07-16 13:41:49 +08:00

58 lines
1.7 KiB
Python

import requests
from flask import Flask, request, jsonify
from DB import DBVidcon
app = Flask(__name__)
endpoint = "https://api.dailymotion.com/videos"
DEFAULT_PAGE = 1
FIXED_LIMIT = 100
VALID_SORTS = {
'recent', 'relevance', 'alpha', 'alphaaz',
'alphaza', 'most', 'least', 'changed'
}
db = DBVidcon()
@app.route("/get", methods=["GET"])
def get_videos():
keyword = request.args.get("keyword", "").strip()
if not keyword:
return jsonify({"status": "error", "msg": "keyword 参数不能为空"}), 400
# 页码和国家参数
i = request.args.get("page", DEFAULT_PAGE, type=int)
rn = request.args.get("rn", "US").upper()
# 排序参数,必须合法
sort = request.args.get("sort", "relevance").strip().lower()
if sort not in VALID_SORTS:
return jsonify({
"status": "error",
"msg": f"sort 参数非法,可选值: {sorted(VALID_SORTS)}"
}), 400
proxy_string = db.get_proxy(rn)
proxies = {"http": proxy_string, "https": proxy_string} if proxy_string else None
params = {
"search": keyword,
"fields": "id,title,created_time,thumbnail_240_url,duration,"
"owner.id,owner.screenname,likes_total,views_total",
"limit": FIXED_LIMIT,
"page": i,
"sort": sort
}
try:
resp = requests.get(endpoint, params=params, proxies=proxies, timeout=10)
resp.raise_for_status()
jd = resp.json()
return jsonify(jd), 200
except requests.exceptions.RequestException as e:
return jsonify({"status": "error", "msg": str(e)}), 502
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=False)